# CLAUDE.md This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. ## Project Overview SAR Android (Sistema de Atendimento ao Representante) is a legacy Java Android sales-representative app. It allows sales reps to manage clients, products, and orders offline, then sync with a central PostgreSQL server. **Language:** Java (no Kotlin) **Build System:** Eclipse ADT (pre-Gradle) — no `build.gradle`; configured via `.project`, `.classpath`, and `project.properties` **Min SDK:** 19 | **Target SDK:** 35 **Root package:** `br.com.jcsinformatica.sarandroid` ## Building This is an Eclipse ADT project, not an Android Studio/Gradle project. There are no `gradlew` commands. - Open in **Eclipse with ADT plugin** or import into Android Studio using "Import Eclipse ADT Project" - SDK target is set in `project.properties` (`target=android-23`) - ProGuard config exists in `proguard-project.txt` but is disabled - Lint suppressions are in `lint.xml` There are no automated tests (no `test/` or `androidTest/` directories, no JUnit/Espresso setup). ## Architecture ### Entry Flow `SplashScreen` → `LoginActivity` → `MainActivity` (expandable menu) → feature Activities ### Key Classes - **`Global`** — static singleton holding runtime state: current `Empresa`, `Pedido`, `ItemPedido`. Call `Global.getEmpresa()` (throws `WarningException` if unset). - **`GlobalActivity`** — base `Activity` subclass for all post-login screens; reads company name from `Global` and sets the title. - **`DatabaseHelper`** — `SQLiteOpenHelper` managing the local SQLite schema. - **`ConnectionManager`** — manages PostgreSQL JDBC connections (20s timeout); used for remote sync. ### Package Structure | Package | Role | |---------|------| | `vo/` | Plain value objects (models): `Produto`, `Cliente`, `Pedido`, `ItemPedido`, `Empresa`, `Representante`, etc. | | `database/` | SQLite DAOs (named `*DB.java` or `*BD.java`): CRUD + sync logic with MD5 change detection | | `postgres/` | PostgreSQL JDBC operations mirroring the DAO layer (`*PGSQL.java`) | | `uimodels/` | Custom list adapters and UI helpers | | `pedido/` | Order/quote Activities (`UpdatePedidoActivity`, `UpdatePedItemActivity`, `BrowsePedido`, etc.) | | `produto/` | Product Activities (`BrowseProduto`, `UpdateProduto`, `FotosProduto`) | | `cliente/` | Client Activities (`BrowseCliente`, `UpdateCliente`) | | `comunicacao/` | `ComunicaActivity` — orchestrates full data sync with the PostgreSQL server | | `consulta/` | Query/report Activities (`BrowsePedidoConsulta`, `ConsultaVendasActivity`) | ### Dual-Database Sync Pattern All persistent data lives in local **SQLite** and is periodically synced to/from **PostgreSQL** over direct JDBC. The pattern per entity: 1. `*DB.java` — reads/writes SQLite, computes MD5 checksums for change detection 2. `*PGSQL.java` — mirrors inserts/updates to the PostgreSQL server 3. `ComunicaActivity` acts as the sync orchestrator and provides a callback interface for progress updates ### Third-Party Libraries (in `libs/`) - `postgresql-8.2-jdbc3.jar` — PostgreSQL JDBC driver - `joda-time-2.5.jar` — date/time calculations - `commons-net-3.3.jar` — FTP support