# islambek996/gs1scanner architecture

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

- Interactive diagram: https://gitdiagram.com/islambek996/gs1scanner
- Repository: https://github.com/islambek996/gs1scanner

## Overview

GS1Scanner is an Android app for scanning Data Matrix codes, keeping a deduplicated scan history, exporting it as CSV, and submitting scans to a remote API. The principal flow runs from the app’s main screen through camera-based barcode recognition into the displayed and locally persisted history; users can then export that history or send scans to the service. The README provides no capability details, and the MainActivity excerpt omits some camera and network callback code, so uncertain wiring is not shown.

Main entry points: [`app/src/main/java/kg/teksher/gs1scanner/MainActivity.kt`](https://github.com/islambek996/gs1scanner/blob/main/app/src/main/java/kg/teksher/gs1scanner/MainActivity.kt) (Main screen), [`app/src/main/java/kg/teksher/gs1scanner/SplashActivity.kt`](https://github.com/islambek996/gs1scanner/blob/main/app/src/main/java/kg/teksher/gs1scanner/SplashActivity.kt) (Splash screen), [`app/src/main/java/kg/teksher/gs1scanner/network/RetrofitClient.kt`](https://github.com/islambek996/gs1scanner/blob/main/app/src/main/java/kg/teksher/gs1scanner/network/RetrofitClient.kt) (Retrofit client), [`app/src/main/java/kg/teksher/gs1scanner/api/ApiService.kt`](https://github.com/islambek996/gs1scanner/blob/main/app/src/main/java/kg/teksher/gs1scanner/api/ApiService.kt) (Scan API)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app_flow["App flow"]
  node_splash["Splash screen<br/>[SplashActivity.kt]"]
  node_main["Main screen<br/>[MainActivity.kt]"]
end

subgraph group_scan["Scanning"]
  node_camera["CameraX"]
  node_mlkit["ML Kit barcode scanner"]
end

subgraph group_history["History and export"]
  node_code_adapter["Code list adapter<br/>[CodeAdapter.kt]"]
  node_preferences[("Scan preferences")]
  node_csv_file["CSV export file"]
  node_share["Android share chooser"]
end

subgraph group_remote["Remote submission"]
  node_scan_request["Scan request<br/>[ScanRequest.kt]"]
  node_retrofit["Retrofit client<br/>[RetrofitClient.kt]"]
  node_api["Scan API<br/>[ApiService.kt]"]
end

node_user(("User"))
node_server["Teksher API"]

node_user -->|"opens app"| node_splash
node_splash -->|"launches"| node_main
node_user -->|"uses controls"| node_main
node_main -->|"starts preview"| node_camera
node_camera -->|"provides frames"| node_main
node_main -->|"configures scanning"| node_mlkit
node_mlkit -->|"detects codes"| node_main
node_main -->|"updates list"| node_code_adapter
node_main -->|"reads and writes"| node_preferences
node_main -->|"writes CSV"| node_csv_file
node_main -->|"shares file"| node_share
node_share -->|"offers export"| node_user
node_main -->|"builds request"| node_scan_request
node_main -->|"requests API"| node_retrofit
node_retrofit -->|"creates service"| node_api
node_api -->|"posts scan"| node_server

click node_splash "https://github.com/islambek996/gs1scanner/blob/main/app/src/main/java/kg/teksher/gs1scanner/SplashActivity.kt"
click node_main "https://github.com/islambek996/gs1scanner/blob/main/app/src/main/java/kg/teksher/gs1scanner/MainActivity.kt"
click node_code_adapter "https://github.com/islambek996/gs1scanner/blob/main/app/src/main/java/CodeAdapter.kt"
click node_scan_request "https://github.com/islambek996/gs1scanner/blob/main/app/src/main/java/kg/teksher/gs1scanner/model/ScanRequest.kt"
click node_retrofit "https://github.com/islambek996/gs1scanner/blob/main/app/src/main/java/kg/teksher/gs1scanner/network/RetrofitClient.kt"
click node_api "https://github.com/islambek996/gs1scanner/blob/main/app/src/main/java/kg/teksher/gs1scanner/api/ApiService.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_splash,node_main,node_user toneBlue
class node_camera,node_mlkit toneAmber
class node_code_adapter,node_preferences,node_csv_file,node_share,node_server toneMint
class node_scan_request,node_retrofit,node_api toneRose
```

## Components

### App flow

- [Splash screen](https://github.com/islambek996/gs1scanner/blob/main/app/src/main/java/kg/teksher/gs1scanner/SplashActivity.kt): `app/src/main/java/kg/teksher/gs1scanner/SplashActivity.kt`
- [Main screen](https://github.com/islambek996/gs1scanner/blob/main/app/src/main/java/kg/teksher/gs1scanner/MainActivity.kt): `app/src/main/java/kg/teksher/gs1scanner/MainActivity.kt`

### Scanning

- **CameraX**
- **ML Kit barcode scanner**

### History and export

- [Code list adapter](https://github.com/islambek996/gs1scanner/blob/main/app/src/main/java/CodeAdapter.kt): `app/src/main/java/CodeAdapter.kt`
- **Scan preferences**
- **CSV export file**
- **Android share chooser**

### Remote submission

- [Scan request](https://github.com/islambek996/gs1scanner/blob/main/app/src/main/java/kg/teksher/gs1scanner/model/ScanRequest.kt): `app/src/main/java/kg/teksher/gs1scanner/model/ScanRequest.kt`
- [Retrofit client](https://github.com/islambek996/gs1scanner/blob/main/app/src/main/java/kg/teksher/gs1scanner/network/RetrofitClient.kt): `app/src/main/java/kg/teksher/gs1scanner/network/RetrofitClient.kt`
- [Scan API](https://github.com/islambek996/gs1scanner/blob/main/app/src/main/java/kg/teksher/gs1scanner/api/ApiService.kt): `app/src/main/java/kg/teksher/gs1scanner/api/ApiService.kt`

### Other components

- **User**
- **Teksher API**

## Connections

- User → Splash screen: opens app
- Splash screen → Main screen: launches
- User → Main screen: uses controls
- Main screen → CameraX: starts preview
- CameraX → Main screen: provides frames
- Main screen → ML Kit barcode scanner: configures scanning
- ML Kit barcode scanner → Main screen: detects codes
- Main screen → Code list adapter: updates list
- Main screen → Scan preferences: reads and writes
- Main screen → CSV export file: writes CSV
- Main screen → Android share chooser: shares file
- Android share chooser → User: offers export
- Main screen → Scan request: builds request
- Main screen → Retrofit client: requests API
- Retrofit client → Scan API: creates service
- Scan API → Teksher API: posts scan
