# velocity081/droidbubble architecture

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

- Interactive diagram: https://gitdiagram.com/velocity081/droidbubble
- Repository: https://github.com/velocity081/droidbubble

## Overview

Droidtools is an Android overlay app with two user-facing tools: Droidbubble’s dynamic island and Droidbar’s edge bar. The main workflow is opening the app, granting overlay/accessibility/notification permissions, then running the overlay service; system events and media/notification activity feed island state that the overlay presents. Droidbar, task shortcuts, settings, and update checking are additional capabilities. Some service and UI internals were not sampled, so uncertain runtime links are omitted or marked unverified.

Main entry points: [`app/src/main/java/com/droidbubble/app/service/IslandOverlayService.kt`](https://github.com/velocity081/droidbubble/blob/main/app/src/main/java/com/droidbubble/app/service/IslandOverlayService.kt) (Overlay service), [`app/src/main/java/com/droidbubble/app/MainActivity.kt`](https://github.com/velocity081/droidbubble/blob/main/app/src/main/java/com/droidbubble/app/MainActivity.kt) (App entry), [`app/src/main/java/com/droidbubble/app/island/IslandStateManager.kt`](https://github.com/velocity081/droidbubble/blob/main/app/src/main/java/com/droidbubble/app/island/IslandStateManager.kt) (Island state), [`app/src/main/java/com/droidbubble/app/ui/main/MainScreenViewModel.kt`](https://github.com/velocity081/droidbubble/blob/main/app/src/main/java/com/droidbubble/app/ui/main/MainScreenViewModel.kt) (Screen state)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["App and Settings"]
  node_main["App entry<br/>[MainActivity.kt]"]
  node_screen["Main screen<br/>[MainScreen.kt]"]
  node_viewmodel["Screen state"]
  node_permissions["Permission checks"]
  node_settings[("Settings storage")]
  node_islandsettings["Island preferences<br/>[IslandSettings.kt]"]
  node_update["Update manager<br/>[UpdateManager.kt]"]
end

subgraph group_island["Droidbubble Island"]
  node_overlay["Overlay service"]
  node_islandview["Island display<br/>[IslandView.kt]"]
  node_islandstate["Island state"]
  node_events["Event models<br/>[IslandEvent.kt]"]
end

subgraph group_system["System Integrations"]
  node_notifications["Media and alerts"]
  node_accessibility["Accessibility service"]
  node_battery["Battery utilities<br/>[BatteryUtils.kt]"]
  node_power["Power events"]
  node_boot["Boot receiver<br/>[BootReceiver.kt]"]
  node_telemetry["Widget telemetry"]
end

subgraph group_bar["Droidbar"]
  node_droidbar["Edge bar<br/>[DroidbarOverlay.kt]"]
  node_apps["Frequent apps"]
end

subgraph group_tasks["Task Shortcuts"]
  node_tasksui["Shortcut editor<br/>[TasksPage.kt]"]
  node_taskrepo[("Shortcut storage<br/>[TasksRepository.kt]")]
  node_executor["Task executor<br/>[TaskExecutor.kt]"]
end

node_user(("Device user"))
node_android{{"Android system"}}

node_user -.->|"opens"| node_main
node_main -->|"creates"| node_viewmodel
node_main -->|"displays"| node_screen
node_main -->|"starts"| node_overlay
node_main -->|"checks"| node_permissions
node_viewmodel -->|"loads settings"| node_settings
node_settings -->|"maps preferences"| node_islandsettings
node_screen -->|"reads state"| node_viewmodel
node_overlay -->|"renders"| node_islandview
node_islandview -.->|"observes state"| node_islandstate
node_notifications -.->|"updates state"| node_islandstate
node_accessibility -->|"updates lock state"| node_islandstate
node_accessibility -->|"notifies changes"| node_overlay
node_power -.->|"reports events"| node_islandstate
node_power -.->|"uses"| node_battery
node_boot -->|"starts"| node_overlay
node_telemetry -.->|"updates state"| node_islandstate
node_overlay -.->|"shows bar"| node_droidbar
node_droidbar -->|"lists apps"| node_apps
node_screen -->|"opens shortcuts"| node_tasksui
node_tasksui -->|"loads shortcuts"| node_taskrepo
node_tasksui -->|"runs shortcut"| node_executor
node_viewmodel -->|"checks updates"| node_update
node_overlay -->|"reads settings"| node_islandsettings
node_android -.->|"delivers notifications"| node_notifications
node_android -->|"dispatches events"| node_accessibility

click node_main "https://github.com/velocity081/droidbubble/blob/main/app/src/main/java/com/droidbubble/app/MainActivity.kt"
click node_screen "https://github.com/velocity081/droidbubble/blob/main/app/src/main/java/com/droidbubble/app/ui/main/MainScreen.kt"
click node_viewmodel "https://github.com/velocity081/droidbubble/blob/main/app/src/main/java/com/droidbubble/app/ui/main/MainScreenViewModel.kt"
click node_permissions "https://github.com/velocity081/droidbubble/blob/main/app/src/main/java/com/droidbubble/app/ui/main/PermissionHelper.kt"
click node_settings "https://github.com/velocity081/droidbubble/blob/main/app/src/main/java/com/droidbubble/app/data/SettingsRepository.kt"
click node_islandsettings "https://github.com/velocity081/droidbubble/blob/main/app/src/main/java/com/droidbubble/app/model/IslandSettings.kt"
click node_overlay "https://github.com/velocity081/droidbubble/blob/main/app/src/main/java/com/droidbubble/app/service/IslandOverlayService.kt"
click node_islandview "https://github.com/velocity081/droidbubble/blob/main/app/src/main/java/com/droidbubble/app/island/IslandView.kt"
click node_islandstate "https://github.com/velocity081/droidbubble/blob/main/app/src/main/java/com/droidbubble/app/island/IslandStateManager.kt"
click node_events "https://github.com/velocity081/droidbubble/blob/main/app/src/main/java/com/droidbubble/app/model/IslandEvent.kt"
click node_notifications "https://github.com/velocity081/droidbubble/blob/main/app/src/main/java/com/droidbubble/app/service/NotificationReceiverService.kt"
click node_accessibility "https://github.com/velocity081/droidbubble/blob/main/app/src/main/java/com/droidbubble/app/service/IslandAccessibilityService.kt"
click node_battery "https://github.com/velocity081/droidbubble/blob/main/app/src/main/java/com/droidbubble/app/service/BatteryUtils.kt"
click node_power "https://github.com/velocity081/droidbubble/blob/main/app/src/main/java/com/droidbubble/app/service/PowerConnectionReceiver.kt"
click node_boot "https://github.com/velocity081/droidbubble/blob/main/app/src/main/java/com/droidbubble/app/service/BootReceiver.kt"
click node_telemetry "https://github.com/velocity081/droidbubble/blob/main/app/src/main/java/com/droidbubble/app/service/PersistentWidgetTelemetryManager.kt"
click node_droidbar "https://github.com/velocity081/droidbubble/blob/main/app/src/main/java/com/droidbubble/app/droidbar/DroidbarOverlay.kt"
click node_apps "https://github.com/velocity081/droidbubble/blob/main/app/src/main/java/com/droidbubble/app/droidbar/MostUsedAppsHelper.kt"
click node_tasksui "https://github.com/velocity081/droidbubble/blob/main/app/src/main/java/com/droidbubble/app/tasks/TasksPage.kt"
click node_taskrepo "https://github.com/velocity081/droidbubble/blob/main/app/src/main/java/com/droidbubble/app/tasks/TasksRepository.kt"
click node_executor "https://github.com/velocity081/droidbubble/blob/main/app/src/main/java/com/droidbubble/app/tasks/TaskExecutor.kt"
click node_update "https://github.com/velocity081/droidbubble/blob/main/app/src/main/java/com/droidbubble/app/util/UpdateManager.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_main,node_screen,node_viewmodel,node_permissions,node_settings,node_islandsettings,node_update,node_user toneBlue
class node_overlay,node_islandview,node_islandstate,node_events toneAmber
class node_notifications,node_accessibility,node_battery,node_power,node_boot,node_telemetry toneMint
class node_droidbar,node_apps toneRose
class node_tasksui,node_taskrepo,node_executor,node_android toneIndigo
```

## Components

### App and Settings

- [App entry](https://github.com/velocity081/droidbubble/blob/main/app/src/main/java/com/droidbubble/app/MainActivity.kt): `app/src/main/java/com/droidbubble/app/MainActivity.kt`
- [Main screen](https://github.com/velocity081/droidbubble/blob/main/app/src/main/java/com/droidbubble/app/ui/main/MainScreen.kt): `app/src/main/java/com/droidbubble/app/ui/main/MainScreen.kt`
- [Screen state](https://github.com/velocity081/droidbubble/blob/main/app/src/main/java/com/droidbubble/app/ui/main/MainScreenViewModel.kt): `app/src/main/java/com/droidbubble/app/ui/main/MainScreenViewModel.kt`
- [Permission checks](https://github.com/velocity081/droidbubble/blob/main/app/src/main/java/com/droidbubble/app/ui/main/PermissionHelper.kt): `app/src/main/java/com/droidbubble/app/ui/main/PermissionHelper.kt`
- [Settings storage](https://github.com/velocity081/droidbubble/blob/main/app/src/main/java/com/droidbubble/app/data/SettingsRepository.kt): `app/src/main/java/com/droidbubble/app/data/SettingsRepository.kt`
- [Island preferences](https://github.com/velocity081/droidbubble/blob/main/app/src/main/java/com/droidbubble/app/model/IslandSettings.kt): `app/src/main/java/com/droidbubble/app/model/IslandSettings.kt`
- [Update manager](https://github.com/velocity081/droidbubble/blob/main/app/src/main/java/com/droidbubble/app/util/UpdateManager.kt): `app/src/main/java/com/droidbubble/app/util/UpdateManager.kt`

### Droidbubble Island

- [Overlay service](https://github.com/velocity081/droidbubble/blob/main/app/src/main/java/com/droidbubble/app/service/IslandOverlayService.kt): `app/src/main/java/com/droidbubble/app/service/IslandOverlayService.kt`
- [Island display](https://github.com/velocity081/droidbubble/blob/main/app/src/main/java/com/droidbubble/app/island/IslandView.kt): `app/src/main/java/com/droidbubble/app/island/IslandView.kt`
- [Island state](https://github.com/velocity081/droidbubble/blob/main/app/src/main/java/com/droidbubble/app/island/IslandStateManager.kt): `app/src/main/java/com/droidbubble/app/island/IslandStateManager.kt`
- [Event models](https://github.com/velocity081/droidbubble/blob/main/app/src/main/java/com/droidbubble/app/model/IslandEvent.kt): `app/src/main/java/com/droidbubble/app/model/IslandEvent.kt`

### System Integrations

- [Media and alerts](https://github.com/velocity081/droidbubble/blob/main/app/src/main/java/com/droidbubble/app/service/NotificationReceiverService.kt): `app/src/main/java/com/droidbubble/app/service/NotificationReceiverService.kt`
- [Accessibility service](https://github.com/velocity081/droidbubble/blob/main/app/src/main/java/com/droidbubble/app/service/IslandAccessibilityService.kt): `app/src/main/java/com/droidbubble/app/service/IslandAccessibilityService.kt`
- [Battery utilities](https://github.com/velocity081/droidbubble/blob/main/app/src/main/java/com/droidbubble/app/service/BatteryUtils.kt): `app/src/main/java/com/droidbubble/app/service/BatteryUtils.kt`
- [Power events](https://github.com/velocity081/droidbubble/blob/main/app/src/main/java/com/droidbubble/app/service/PowerConnectionReceiver.kt): `app/src/main/java/com/droidbubble/app/service/PowerConnectionReceiver.kt`
- [Boot receiver](https://github.com/velocity081/droidbubble/blob/main/app/src/main/java/com/droidbubble/app/service/BootReceiver.kt): `app/src/main/java/com/droidbubble/app/service/BootReceiver.kt`
- [Widget telemetry](https://github.com/velocity081/droidbubble/blob/main/app/src/main/java/com/droidbubble/app/service/PersistentWidgetTelemetryManager.kt): `app/src/main/java/com/droidbubble/app/service/PersistentWidgetTelemetryManager.kt`

### Droidbar

- [Edge bar](https://github.com/velocity081/droidbubble/blob/main/app/src/main/java/com/droidbubble/app/droidbar/DroidbarOverlay.kt): `app/src/main/java/com/droidbubble/app/droidbar/DroidbarOverlay.kt`
- [Frequent apps](https://github.com/velocity081/droidbubble/blob/main/app/src/main/java/com/droidbubble/app/droidbar/MostUsedAppsHelper.kt): `app/src/main/java/com/droidbubble/app/droidbar/MostUsedAppsHelper.kt`

### Task Shortcuts

- [Shortcut editor](https://github.com/velocity081/droidbubble/blob/main/app/src/main/java/com/droidbubble/app/tasks/TasksPage.kt): `app/src/main/java/com/droidbubble/app/tasks/TasksPage.kt`
- [Shortcut storage](https://github.com/velocity081/droidbubble/blob/main/app/src/main/java/com/droidbubble/app/tasks/TasksRepository.kt): `app/src/main/java/com/droidbubble/app/tasks/TasksRepository.kt`
- [Task executor](https://github.com/velocity081/droidbubble/blob/main/app/src/main/java/com/droidbubble/app/tasks/TaskExecutor.kt): `app/src/main/java/com/droidbubble/app/tasks/TaskExecutor.kt`

### Other components

- **Device user**
- **Android system**

## Connections

- Device user → App entry: opens
- App entry → Screen state: creates (evidence: `app/src/main/java/com/droidbubble/app/MainActivity.kt`)
- App entry → Main screen: displays (evidence: `app/src/main/java/com/droidbubble/app/MainActivity.kt`)
- App entry → Overlay service: starts (evidence: `app/src/main/java/com/droidbubble/app/MainActivity.kt`)
- App entry → Permission checks: checks (evidence: `app/src/main/java/com/droidbubble/app/MainActivity.kt`)
- Screen state → Settings storage: loads settings (evidence: `app/src/main/java/com/droidbubble/app/ui/main/MainScreenViewModel.kt`)
- Settings storage → Island preferences: maps preferences (evidence: `app/src/main/java/com/droidbubble/app/data/SettingsRepository.kt`)
- Main screen → Screen state: reads state (evidence: `app/src/main/java/com/droidbubble/app/ui/main/MainScreen.kt`)
- Overlay service → Island display: renders (evidence: `app/src/main/java/com/droidbubble/app/service/IslandOverlayService.kt`)
- Island display → Island state: observes state (evidence: `app/src/main/java/com/droidbubble/app/island/IslandView.kt`)
- Media and alerts → Island state: updates state (evidence: `app/src/main/java/com/droidbubble/app/service/NotificationReceiverService.kt`)
- Accessibility service → Island state: updates lock state (evidence: `app/src/main/java/com/droidbubble/app/service/IslandAccessibilityService.kt`)
- Accessibility service → Overlay service: notifies changes (evidence: `app/src/main/java/com/droidbubble/app/service/IslandAccessibilityService.kt`)
- Power events → Island state: reports events (evidence: `app/src/main/java/com/droidbubble/app/service/PowerConnectionReceiver.kt`)
- Power events → Battery utilities: uses (evidence: `app/src/main/java/com/droidbubble/app/service/PowerConnectionReceiver.kt`)
- Boot receiver → Overlay service: starts (evidence: `app/src/main/java/com/droidbubble/app/service/BootReceiver.kt`)
- Widget telemetry → Island state: updates state (evidence: `app/src/main/java/com/droidbubble/app/service/PersistentWidgetTelemetryManager.kt`)
- Overlay service → Edge bar: shows bar (evidence: `app/src/main/java/com/droidbubble/app/service/IslandOverlayService.kt`)
- Edge bar → Frequent apps: lists apps (evidence: `app/src/main/java/com/droidbubble/app/droidbar/DroidbarOverlay.kt`)
- Main screen → Shortcut editor: opens shortcuts (evidence: `app/src/main/java/com/droidbubble/app/ui/main/MainScreen.kt`)
- Shortcut editor → Shortcut storage: loads shortcuts (evidence: `app/src/main/java/com/droidbubble/app/tasks/TasksPage.kt`)
- Shortcut editor → Task executor: runs shortcut (evidence: `app/src/main/java/com/droidbubble/app/tasks/TasksPage.kt`)
- Screen state → Update manager: checks updates (evidence: `app/src/main/java/com/droidbubble/app/ui/main/MainScreenViewModel.kt`)
- Overlay service → Island preferences: reads settings (evidence: `app/src/main/java/com/droidbubble/app/service/IslandOverlayService.kt`)
- Android system → Media and alerts: delivers notifications
- Android system → Accessibility service: dispatches events (evidence: `app/src/main/java/com/droidbubble/app/service/IslandAccessibilityService.kt`)
