# adonespitogo/adobot architecture

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

- Interactive diagram: https://gitdiagram.com/adonespitogo/adobot
- Repository: https://github.com/adonespitogo/adobot

## Overview

1. **Project type and runtime**
   - This is an **Android application** built with Gradle, organized as a single app module under `app/`.
   - The app is designed around **background execution**, **SMS-triggered control**, **periodic server polling**, and **local data persistence**.

2. **Primary architectural goal**
   - The app acts as a **remote-control agent** that collects device data, executes commands, and synchronizes with a remote backend.
   - The README identifies the backend dependency as **AdoBot-IO**, which is the external server/admin console this client talks to.

3. **Top-level control surface**
   - User-facing entry points are the activities in `com.android.adobot.activities`:
     - `SetupActivity` for initial configuration.
     - `PermissionsActivity` for runtime permissions on Android 6+.
     - `UpdateActivity` for APK update prompting/flow.
     - `BaseActivity` as shared UI behavior.
   - These screens are not the core business logic; they mainly configure or enable the background agent.

4. **Event ingestion boundary**
   - `SmsBroadcastReceiver` is the main device-side trigger for external control via SMS.
   - The README describes SMS phrases used to:
     - open the app/settings,
     - force a sync to the server,
     - and likely trigger command handling.
   - This receiver is a key ingress point from the Android OS into the app’s command-processing path.

5. **Background orchestration**
   - `NetworkSchedulerService` is the main background service for periodic or scheduled work.
   - It likely coordinates polling the backend, running queued commands, and refreshing device state.
   - This service is the bridge between passive device state and active server-driven execution.

6. **Task-based command model**
   - The `tasks/` package is the main execution layer, with each class representing a focused capability:
     - data collection: `GetSmsTask`, `GetCallLogsTask`, `GetContactsTask`
     - data recording/sync prep: `SmsRecorderTask`, `CallLogRecorderTask`
     - command execution: `SendSmsTask`
     - device telemetry: `LocationMonitor`
     - lifecycle/admin actions: `UpdateAppTask`, `TransferBotTask`
   - This suggests a **command-dispatch architecture** where incoming remote actions are mapped to task objects.

7. **Local persistence layer**
   - The `database/` package uses a Room-style structure:
     - `AppDatabase` as the database entry point,
     - entities like `Sms` and `CallLog`,
     - DAOs `SmsDao` and `CallLogDao`.
   - Collected SMS and call log data are retained locally before being displayed, queued, or synchronized.
   - This is the app’s offline buffer and historical store.

8. **Network layer**
   - The `http/` package contains a thin HTTP abstraction:
     - `Http`, `HttpRequest`, and `HttpCallback`.
   - This layer is used to communicate with the remote server for:
     - fetching pending commands,
     - uploading captured data,
     - reporting device status,
     - and handling app update/transfer actions.
   - The architecture separates HTTP transport from task logic.

9. **Core data/configuration objects**
   - `CommonParams` and `AdobotConstants` centralize shared parameters and constants.
   - These likely define server URLs, command strings, sync keys, and other app-wide settings used across activities, receivers, services, and tasks.
   - This is the main configuration boundary for the rest of the app.

10. **Device capability gates**
   - `PermissionsActivity` and the README’s Android 6+ notes show a permission-aware flow.
   - Some tasks depend on runtime permissions and may prompt the user when a command arrives and the permission is missing.
   - This means capability execution is gated by OS permissions, not just app logic.

11. **Update and transfer flows**
   - `UpdateAppTask` handles remote APK replacement/update behavior.
   - `TransferBotTask` suggests the agent can be re-pointed to another server, changing where it reports.
   - These are administrative lifecycle actions distinct from normal data collection.

12. **Build and delivery**
   - The repo includes GitHub Actions workflow support under `.github/workflows/android-build.yml`, indicating automated Android builds.
   - The app is meant to be compiled into a signed APK and installed on the target device.
   - The `screenshots/` directory and README show the project also includes a management-console-facing operational workflow, though that console is in a separate repository.

13. **Main data flow**
   - Device events arrive through SMS or scheduled background checks.
   - The app executes tasks to collect or act on data.
   - Data is stored locally in Room tables.
   - The HTTP layer syncs results and status to the server.
   - The server can return new commands, updates, or transfer instructions back to the client.

14. **Important diagram boundaries**
   - Android OS boundary: SMS broadcasts, permissions, background services.
   - Local app boundary: activities, task engine, database, constants/config.
   - Network boundary: HTTP client to AdoBot-IO backend.
   - External backend boundary: remote command source, data sink, and admin console.

Main entry points: [`app/src/main/java/com/android/adobot/tasks/BaseTask.java`](https://github.com/adonespitogo/adobot/blob/main/app/src/main/java/com/android/adobot/tasks/BaseTask.java) (Task Base), [`app/src/main/java/com/android/adobot/http/Http.java`](https://github.com/adonespitogo/adobot/blob/main/app/src/main/java/com/android/adobot/http/Http.java) (HTTP Client), [`app/src/main/java/com/android/adobot/database/AppDatabase.java`](https://github.com/adonespitogo/adobot/blob/main/app/src/main/java/com/android/adobot/database/AppDatabase.java) (App DB), [`app/src/main/java/com/android/adobot/activities/BaseActivity.java`](https://github.com/adonespitogo/adobot/blob/main/app/src/main/java/com/android/adobot/activities/BaseActivity.java) (Base UI)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_android_os["Android OS"]
  node_sms_receiver["SMS Receiver<br/>broadcast receiver"]
end

subgraph group_app_ui["App UI"]
  node_setup_activity["Setup<br/>activity<br/>[SetupActivity.java]"]
  node_permissions_activity["Permissions<br/>activity"]
  node_update_activity["Update Prompt<br/>activity"]
  node_base_activity["Base UI<br/>activity base<br/>[BaseActivity.java]"]
end

subgraph group_app_runtime["App Runtime"]
  node_scheduler_service["Scheduler Service"]
  node_task_base["Task Base<br/>task framework<br/>[BaseTask.java]"]
  node_data_tasks["Data Tasks<br/>task cluster<br/>[GetSmsTask.java]"]
  node_record_tasks["Recorder Tasks<br/>task cluster"]
  node_action_tasks["Action Tasks<br/>task cluster<br/>[SendSmsTask.java]"]
  node_device_tasks["Device Telemetry<br/>task cluster"]
  node_config["Config<br/>constants<br/>[CommonParams.java]"]
  node_constants["Constants"]
end

subgraph group_storage["Local Storage"]
  node_app_db[("App DB<br/>room database<br/>[AppDatabase.java]")]
  node_sms_entity["SMS<br/>entity<br/>[Sms.java]"]
  node_calllog_entity["Call Log<br/>entity<br/>[CallLog.java]"]
  node_sms_dao["SMS DAO<br/>[SmsDao.java]"]
  node_calllog_dao["Call DAO<br/>[CallLogDao.java]"]
end

subgraph group_network["Network"]
  node_http_client["HTTP Client<br/>transport<br/>[Http.java]"]
  node_http_request["Request Model<br/>[HttpRequest.java]"]
  node_http_callback["Callback<br/>[HttpCallback.java]"]
end

subgraph group_backend["AdoBot-IO"]
  node_backend_node[("AdoBot-IO<br/>backend")]
end

subgraph group_delivery["Build"]
  node_android_build["Android Build<br/>ci workflow<br/>[android-build.yml]"]
end

node_base_activity -->|"shared UI"| node_setup_activity
node_base_activity -->|"shared UI"| node_permissions_activity
node_base_activity -->|"shared UI"| node_update_activity
node_setup_activity -->|"reads"| node_config
node_permissions_activity -->|"reads"| node_config
node_update_activity -->|"triggers"| node_action_tasks
node_sms_receiver -->|"dispatches"| node_task_base
node_scheduler_service -->|"runs"| node_task_base
node_task_base -->|"specializes"| node_data_tasks
node_task_base -->|"specializes"| node_record_tasks
node_task_base -->|"specializes"| node_action_tasks
node_task_base -->|"specializes"| node_device_tasks
node_data_tasks -->|"reads/writes"| node_app_db
node_record_tasks -->|"buffers"| node_app_db
node_app_db -->|"contains"| node_sms_entity
node_app_db -->|"contains"| node_calllog_entity
node_sms_entity -->|"accessed by"| node_sms_dao
node_calllog_entity -->|"accessed by"| node_calllog_dao
node_scheduler_service -->|"syncs"| node_http_client
node_action_tasks -->|"executes"| node_http_client
node_http_client -->|"builds"| node_http_request
node_http_client -->|"returns"| node_http_callback
node_http_client -->|"connects to"| node_backend_node
node_android_build -.->|"packages"| node_setup_activity
node_android_build -.->|"packages"| node_scheduler_service
node_android_build -.->|"packages"| node_sms_receiver
node_config -->|"centralizes"| node_constants

click node_setup_activity "https://github.com/adonespitogo/adobot/blob/main/app/src/main/java/com/android/adobot/activities/SetupActivity.java"
click node_permissions_activity "https://github.com/adonespitogo/adobot/blob/main/app/src/main/java/com/android/adobot/activities/PermissionsActivity.java"
click node_update_activity "https://github.com/adonespitogo/adobot/blob/main/app/src/main/java/com/android/adobot/activities/UpdateActivity.java"
click node_base_activity "https://github.com/adonespitogo/adobot/blob/main/app/src/main/java/com/android/adobot/activities/BaseActivity.java"
click node_sms_receiver "https://github.com/adonespitogo/adobot/blob/main/app/src/main/java/com/android/adobot/SmsBroadcastReceiver.java"
click node_scheduler_service "https://github.com/adonespitogo/adobot/blob/main/app/src/main/java/com/android/adobot/NetworkSchedulerService.java"
click node_task_base "https://github.com/adonespitogo/adobot/blob/main/app/src/main/java/com/android/adobot/tasks/BaseTask.java"
click node_data_tasks "https://github.com/adonespitogo/adobot/blob/main/app/src/main/java/com/android/adobot/tasks/GetSmsTask.java"
click node_record_tasks "https://github.com/adonespitogo/adobot/blob/main/app/src/main/java/com/android/adobot/tasks/SmsRecorderTask.java"
click node_action_tasks "https://github.com/adonespitogo/adobot/blob/main/app/src/main/java/com/android/adobot/tasks/SendSmsTask.java"
click node_device_tasks "https://github.com/adonespitogo/adobot/blob/main/app/src/main/java/com/android/adobot/tasks/LocationMonitor.java"
click node_app_db "https://github.com/adonespitogo/adobot/blob/main/app/src/main/java/com/android/adobot/database/AppDatabase.java"
click node_sms_entity "https://github.com/adonespitogo/adobot/blob/main/app/src/main/java/com/android/adobot/database/Sms.java"
click node_calllog_entity "https://github.com/adonespitogo/adobot/blob/main/app/src/main/java/com/android/adobot/database/CallLog.java"
click node_sms_dao "https://github.com/adonespitogo/adobot/blob/main/app/src/main/java/com/android/adobot/database/SmsDao.java"
click node_calllog_dao "https://github.com/adonespitogo/adobot/blob/main/app/src/main/java/com/android/adobot/database/CallLogDao.java"
click node_http_client "https://github.com/adonespitogo/adobot/blob/main/app/src/main/java/com/android/adobot/http/Http.java"
click node_http_request "https://github.com/adonespitogo/adobot/blob/main/app/src/main/java/com/android/adobot/http/HttpRequest.java"
click node_http_callback "https://github.com/adonespitogo/adobot/blob/main/app/src/main/java/com/android/adobot/http/HttpCallback.java"
click node_config "https://github.com/adonespitogo/adobot/blob/main/app/src/main/java/com/android/adobot/CommonParams.java"
click node_constants "https://github.com/adonespitogo/adobot/blob/main/app/src/main/java/com/android/adobot/AdobotConstants.java"
click node_android_build "https://github.com/adonespitogo/adobot/blob/main/.github/workflows/android-build.yml"

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_sms_receiver,node_android_build toneBlue
class node_setup_activity,node_permissions_activity,node_update_activity,node_base_activity toneAmber
class node_scheduler_service,node_task_base,node_data_tasks,node_record_tasks,node_action_tasks,node_device_tasks,node_config,node_constants toneMint
class node_app_db,node_sms_entity,node_calllog_entity,node_sms_dao,node_calllog_dao toneRose
class node_http_client,node_http_request,node_http_callback toneIndigo
class node_backend_node toneTeal
```

## Components

### Android OS

Device-side entry points and runtime gates

- [SMS Receiver](https://github.com/adonespitogo/adobot/blob/main/app/src/main/java/com/android/adobot/SmsBroadcastReceiver.java): broadcast receiver · SMS-triggered control ingress · `app/src/main/java/com/android/adobot/SmsBroadcastReceiver.java`

### App UI

User-facing configuration and prompt screens

- [Setup](https://github.com/adonespitogo/adobot/blob/main/app/src/main/java/com/android/adobot/activities/SetupActivity.java): activity · Initial configuration screen · `app/src/main/java/com/android/adobot/activities/SetupActivity.java`
- [Permissions](https://github.com/adonespitogo/adobot/blob/main/app/src/main/java/com/android/adobot/activities/PermissionsActivity.java): activity · Runtime permission gate · `app/src/main/java/com/android/adobot/activities/PermissionsActivity.java`
- [Update Prompt](https://github.com/adonespitogo/adobot/blob/main/app/src/main/java/com/android/adobot/activities/UpdateActivity.java): activity · APK update flow UI · `app/src/main/java/com/android/adobot/activities/UpdateActivity.java`
- [Base UI](https://github.com/adonespitogo/adobot/blob/main/app/src/main/java/com/android/adobot/activities/BaseActivity.java): activity base · Shared activity behavior · `app/src/main/java/com/android/adobot/activities/BaseActivity.java`

### App Runtime

Background orchestration and task execution

- [Scheduler Service](https://github.com/adonespitogo/adobot/blob/main/app/src/main/java/com/android/adobot/NetworkSchedulerService.java): service · Periodic background orchestration · `app/src/main/java/com/android/adobot/NetworkSchedulerService.java`
- [Task Base](https://github.com/adonespitogo/adobot/blob/main/app/src/main/java/com/android/adobot/tasks/BaseTask.java): task framework · Shared execution base for command tasks · `app/src/main/java/com/android/adobot/tasks/BaseTask.java`
- [Data Tasks](https://github.com/adonespitogo/adobot/blob/main/app/src/main/java/com/android/adobot/tasks/GetSmsTask.java): task cluster · SMS, calls, and contacts collection · `app/src/main/java/com/android/adobot/tasks/GetSmsTask.java`
- [Recorder Tasks](https://github.com/adonespitogo/adobot/blob/main/app/src/main/java/com/android/adobot/tasks/SmsRecorderTask.java): task cluster · Local capture and sync preparation · `app/src/main/java/com/android/adobot/tasks/SmsRecorderTask.java`
- [Action Tasks](https://github.com/adonespitogo/adobot/blob/main/app/src/main/java/com/android/adobot/tasks/SendSmsTask.java): task cluster · Remote actions and admin commands · `app/src/main/java/com/android/adobot/tasks/SendSmsTask.java`
- [Device Telemetry](https://github.com/adonespitogo/adobot/blob/main/app/src/main/java/com/android/adobot/tasks/LocationMonitor.java): task cluster · Location and device-state monitoring · `app/src/main/java/com/android/adobot/tasks/LocationMonitor.java`
- [Config](https://github.com/adonespitogo/adobot/blob/main/app/src/main/java/com/android/adobot/CommonParams.java): constants · Shared app parameters and commands · `app/src/main/java/com/android/adobot/CommonParams.java`
- [Constants](https://github.com/adonespitogo/adobot/blob/main/app/src/main/java/com/android/adobot/AdobotConstants.java): constants · App-wide static values · `app/src/main/java/com/android/adobot/AdobotConstants.java`

### Local Storage

Offline persistence for captured data

- [App DB](https://github.com/adonespitogo/adobot/blob/main/app/src/main/java/com/android/adobot/database/AppDatabase.java): room database · Local persistence entry point · `app/src/main/java/com/android/adobot/database/AppDatabase.java`
- [SMS](https://github.com/adonespitogo/adobot/blob/main/app/src/main/java/com/android/adobot/database/Sms.java): entity · Stored message records · `app/src/main/java/com/android/adobot/database/Sms.java`
- [Call Log](https://github.com/adonespitogo/adobot/blob/main/app/src/main/java/com/android/adobot/database/CallLog.java): entity · Stored call records · `app/src/main/java/com/android/adobot/database/CallLog.java`
- [SMS DAO](https://github.com/adonespitogo/adobot/blob/main/app/src/main/java/com/android/adobot/database/SmsDao.java): dao · SMS persistence access · `app/src/main/java/com/android/adobot/database/SmsDao.java`
- [Call DAO](https://github.com/adonespitogo/adobot/blob/main/app/src/main/java/com/android/adobot/database/CallLogDao.java): dao · Call log persistence access · `app/src/main/java/com/android/adobot/database/CallLogDao.java`

### Network

HTTP transport and sync layer

- [HTTP Client](https://github.com/adonespitogo/adobot/blob/main/app/src/main/java/com/android/adobot/http/Http.java): transport · HTTP request execution · `app/src/main/java/com/android/adobot/http/Http.java`
- [Request Model](https://github.com/adonespitogo/adobot/blob/main/app/src/main/java/com/android/adobot/http/HttpRequest.java): request model · Outbound HTTP request envelope · `app/src/main/java/com/android/adobot/http/HttpRequest.java`
- [Callback](https://github.com/adonespitogo/adobot/blob/main/app/src/main/java/com/android/adobot/http/HttpCallback.java): callback · Async HTTP completion handler · `app/src/main/java/com/android/adobot/http/HttpCallback.java`

### AdoBot-IO

Remote command source and data sink

- **AdoBot-IO**: backend · Remote command console and data sink

### Build

Automated Android build and packaging

- [Android Build](https://github.com/adonespitogo/adobot/blob/main/.github/workflows/android-build.yml): ci workflow · Automated APK build pipeline · `.github/workflows/android-build.yml`

## Connections

- Base UI → Setup: shared UI · Common activity behavior used by setup flow
- Base UI → Permissions: shared UI · Common activity behavior used by permission flow
- Base UI → Update Prompt: shared UI · Common activity behavior used by update flow
- Setup → Config: reads · Uses shared settings and server parameters
- Permissions → Config: reads · Checks capability-related settings
- Update Prompt → Action Tasks: triggers · Prompts update-related command flow
- SMS Receiver → Task Base: dispatches · Routes SMS-triggered commands into tasks
- Scheduler Service → Task Base: runs · Schedules background task execution
- Task Base → Data Tasks: specializes · Representative command execution branch
- Task Base → Recorder Tasks: specializes · Representative capture/sync branch
- Task Base → Action Tasks: specializes · Representative remote action branch
- Task Base → Device Telemetry: specializes · Representative telemetry branch
- Data Tasks → App DB: reads/writes · Uses local persistence for captured data
- Recorder Tasks → App DB: buffers · Stores collected records locally first
- App DB → SMS: contains · SMS table/entity model
- App DB → Call Log: contains · Call log table/entity model
- SMS → SMS DAO: accessed by · SMS data access operations
- Call Log → Call DAO: accessed by · Call log data access operations
- Scheduler Service → HTTP Client: syncs · Polls backend and uploads status
- Action Tasks → HTTP Client: executes · Uses transport for remote commands
- HTTP Client → Request Model: builds · Wraps outgoing requests
- HTTP Client → Callback: returns · Delivers async completion
- HTTP Client → AdoBot-IO: connects to · Communicates with the AdoBot-IO server
- Android Build → Setup: packages · Build output includes app entry screens
- Android Build → Scheduler Service: packages · Build output includes background runtime
- Android Build → SMS Receiver: packages · Build output includes control ingress
- Config → Constants: centralizes · Shared app configuration and fixed values
