# anowercs/mynotes architecture

> Architecture diagram of the GitHub repository anowercs/mynotes, 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/anowercs/mynotes
- Repository: https://github.com/anowercs/mynotes

## Overview

1. This is an Android app organized around two user-facing domains: note management and fitness tracking. The app is a multi-activity Java project, not a single-activity Compose app, and most screens are represented as separate Android `Activity` classes.

2. The navigation entry points are `SplashActivity`, `LoginActivity`, `RegisterActivity`, `ForgotPasswordActivity`, `ChangePasswordActivity`, and `MainActivity`. These define the authentication and post-login flow, with `SplashActivity` likely deciding whether the user goes to login or straight into the app based on stored session state.

3. Authentication is backed by AWS Cognito through the `AWSAmplify/MyAmplifyApp.java` bootstrap layer and the AWS auth dependencies in Gradle. This is the boundary where app startup connects to cloud identity services before the rest of the UI can access user-specific data.

4. The main notes subsystem centers on `MainActivity`, `CreateNoteActivity`, `NotesAdapter`, `Note` entity, and `NotesListener`. `MainActivity` is the collection/list screen, `CreateNoteActivity` handles note creation and editing, `NotesAdapter` renders note cards into list/grid UI, and `NotesListener` provides callbacks for item interactions such as open/edit/delete.

5. Note persistence is abstracted behind `database/DynamoDBHelper.java`, which is the primary data access layer for cloud-backed note storage. The README and dependencies indicate AWS DynamoDB as the main storage service, so the app’s note data flows from UI → helper layer → AWS cloud storage, then back into the adapter-driven UI.

6. Media and rich content are first-class note features. Notes can include images and web links, with `Glide` handling image loading and AWS S3 serving as the likely remote image store. The layout resources and custom drawables suggest the app also supports color-coded note cards and multiple note types.

7. Fitness tracking is separated into its own screen and service layer: `FitnessActivity` and `services/FitnessUploadService`. The README indicates step-count tracking, graphs, and history views, while the dependencies show Google Play Services Fitness and MPAndroidChart, so the fitness subsystem likely collects activity data and visualizes it in chart form.

8. Shared user/session and utility behavior is centralized in `utility/UserUtils.java` and `utility/ShareUtils.java`. `UserUtils` probably encapsulates current-user identity and profile-related helpers, while `ShareUtils` handles exporting or sharing note content through Android sharing intents.

9. The UI is heavily resource-driven and uses standard Android boundaries: XML layouts, drawables, menus, navigation graphs, and themes. `nav_graph.xml` and `nav_graph2.xml` indicate explicit navigation structure, while the drawer/bottom menu XML files and custom backgrounds imply a Material-style UI with multiple navigation surfaces.

10. The app includes an asset bundle for animation and rich UI polish: `note.json`, `run_animation.json`, and `watch.json` are likely Lottie animations used in onboarding, empty states, or fitness screens. This suggests a presentation layer that mixes native Android widgets with animated assets rather than relying only on static views.

11. Build and packaging are standard Gradle Android app tooling. The repository contains release APK output, baseline profile artifacts for runtime optimization, and Android test/unit test scaffolding, which indicates a production-oriented mobile app with performance tuning rather than a prototype-only codebase.

12. In diagram terms, the key architecture boundaries are: authentication/session management, notes CRUD and rendering, fitness data collection/visualization, and cloud persistence/media storage. Most flows converge on AWS-backed services, while the Android activities, adapters, and resources form the client-side presentation and interaction layer.

Main entry points: [`app/src/main/java/com/anowercs/notespadpro/activities/MainActivity.java`](https://github.com/anowercs/mynotes/blob/main/app/src/main/java/com/anowercs/notespadpro/activities/MainActivity.java) (MainActivity), [`app/src/main/java/com/anowercs/notespadpro/activities/LoginActivity.java`](https://github.com/anowercs/mynotes/blob/main/app/src/main/java/com/anowercs/notespadpro/activities/LoginActivity.java) (LoginActivity), [`app/src/main/java/com/anowercs/notespadpro/activities/CreateNoteActivity.java`](https://github.com/anowercs/mynotes/blob/main/app/src/main/java/com/anowercs/notespadpro/activities/CreateNoteActivity.java) (CreateNoteActivity), [`app/src/main/res`](https://github.com/anowercs/mynotes/tree/main/app/src/main/res) (UI resources)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_grp_auth["Auth & session"]
  node_n_splash(("SplashActivity"))
  node_n_login(("LoginActivity<br/>[LoginActivity.java]"))
  node_n_register(("RegisterActivity"))
  node_n_forgot(("Forgot Password<br/>activity"))
  node_n_change(("Change Password<br/>activity"))
end

subgraph group_grp_notes["Notes domain"]
  node_n_main(("MainActivity<br/>[MainActivity.java]"))
  node_n_create(("CreateNoteActivity"))
  node_n_adapter["NotesAdapter<br/>[NotesAdapter.java]"]
  node_n_note["Note<br/>entity<br/>[Note.java]"]
  node_n_listener{{"NotesListener<br/>callback<br/>[NotesListener.java]"}}
  node_n_dynamo[("DynamoDBHelper<br/>data access")]
end

subgraph group_grp_fitness["Fitness domain"]
  node_n_fitness(("FitnessActivity"))
  node_n_fitnesssvc["FitnessUploadService"]
end

subgraph group_grp_platform["Platform & resources"]
  node_n_amplify["MyAmplifyApp<br/>bootstrap<br/>[MyAmplifyApp.java]"]
  node_n_userutils["UserUtils<br/>[UserUtils.java]"]
  node_n_shareutils["ShareUtils<br/>[ShareUtils.java]"]
  node_n_resources["UI resources"]
end

node_n_splash -->|"routes to"| node_n_login
node_n_splash -->|"routes to"| node_n_main
node_n_login -->|"signup"| node_n_register
node_n_login -->|"reset"| node_n_forgot
node_n_login -->|"success"| node_n_main
node_n_register -->|"back to login"| node_n_login
node_n_forgot -->|"reset flow"| node_n_change
node_n_change -->|"return"| node_n_login
node_n_amplify -->|"auth backend"| node_n_login
node_n_amplify -->|"cloud setup"| node_n_dynamo
node_n_main -->|"renders with"| node_n_adapter
node_n_main -->|"create/edit"| node_n_create
node_n_main -->|"item actions"| node_n_listener
node_n_adapter -->|"binds"| node_n_note
node_n_listener -->|"open/edit"| node_n_create
node_n_create -->|"writes"| node_n_note
node_n_create -->|"persists"| node_n_dynamo
node_n_main -->|"loads"| node_n_dynamo
node_n_dynamo -->|"stores"| node_n_note
node_n_create -->|"share"| node_n_shareutils
node_n_main -->|"session/profile"| node_n_userutils
node_n_fitness -->|"sync"| node_n_fitnesssvc
node_n_fitness -->|"charts/ui"| node_n_resources
node_n_main -->|"ui shell"| node_n_resources
node_n_create -->|"forms"| node_n_resources
node_n_login -->|"forms"| node_n_resources
node_n_fitnesssvc -->|"assets"| node_n_resources

click node_n_splash "https://github.com/anowercs/mynotes/blob/main/app/src/main/java/com/anowercs/notespadpro/activities/SplashActivity.java"
click node_n_login "https://github.com/anowercs/mynotes/blob/main/app/src/main/java/com/anowercs/notespadpro/activities/LoginActivity.java"
click node_n_register "https://github.com/anowercs/mynotes/blob/main/app/src/main/java/com/anowercs/notespadpro/activities/RegisterActivity.java"
click node_n_forgot "https://github.com/anowercs/mynotes/blob/main/app/src/main/java/com/anowercs/notespadpro/activities/ForgotPasswordActivity.java"
click node_n_change "https://github.com/anowercs/mynotes/blob/main/app/src/main/java/com/anowercs/notespadpro/activities/ChangePasswordActivity.java"
click node_n_main "https://github.com/anowercs/mynotes/blob/main/app/src/main/java/com/anowercs/notespadpro/activities/MainActivity.java"
click node_n_create "https://github.com/anowercs/mynotes/blob/main/app/src/main/java/com/anowercs/notespadpro/activities/CreateNoteActivity.java"
click node_n_adapter "https://github.com/anowercs/mynotes/blob/main/app/src/main/java/com/anowercs/notespadpro/adapters/NotesAdapter.java"
click node_n_note "https://github.com/anowercs/mynotes/blob/main/app/src/main/java/com/anowercs/notespadpro/entities/Note.java"
click node_n_listener "https://github.com/anowercs/mynotes/blob/main/app/src/main/java/com/anowercs/notespadpro/listeners/NotesListener.java"
click node_n_dynamo "https://github.com/anowercs/mynotes/blob/main/app/src/main/java/com/anowercs/notespadpro/database/DynamoDBHelper.java"
click node_n_fitness "https://github.com/anowercs/mynotes/blob/main/app/src/main/java/com/anowercs/notespadpro/activities/FitnessActivity.java"
click node_n_fitnesssvc "https://github.com/anowercs/mynotes/blob/main/app/src/main/java/com/anowercs/notespadpro/services/FitnessUploadService.java"
click node_n_amplify "https://github.com/anowercs/mynotes/blob/main/app/src/main/java/com/anowercs/notespadpro/AWSAmplify/MyAmplifyApp.java"
click node_n_userutils "https://github.com/anowercs/mynotes/blob/main/app/src/main/java/com/anowercs/notespadpro/utility/UserUtils.java"
click node_n_shareutils "https://github.com/anowercs/mynotes/blob/main/app/src/main/java/com/anowercs/notespadpro/utility/ShareUtils.java"
click node_n_resources "https://github.com/anowercs/mynotes/tree/main/app/src/main/res"

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_n_splash,node_n_login,node_n_register,node_n_forgot,node_n_change toneBlue
class node_n_main,node_n_create,node_n_adapter,node_n_note,node_n_listener,node_n_dynamo toneAmber
class node_n_fitness,node_n_fitnesssvc toneMint
class node_n_amplify,node_n_userutils,node_n_shareutils,node_n_resources toneRose
```

## Components

### Auth & session

Startup, login, registration, password recovery, and user session state.

- [SplashActivity](https://github.com/anowercs/mynotes/blob/main/app/src/main/java/com/anowercs/notespadpro/activities/SplashActivity.java): activity · Launches the app and routes users based on session state. · `app/src/main/java/com/anowercs/notespadpro/activities/SplashActivity.java`
- [LoginActivity](https://github.com/anowercs/mynotes/blob/main/app/src/main/java/com/anowercs/notespadpro/activities/LoginActivity.java): activity · Authenticates existing users. · `app/src/main/java/com/anowercs/notespadpro/activities/LoginActivity.java`
- [RegisterActivity](https://github.com/anowercs/mynotes/blob/main/app/src/main/java/com/anowercs/notespadpro/activities/RegisterActivity.java): activity · Creates new user accounts. · `app/src/main/java/com/anowercs/notespadpro/activities/RegisterActivity.java`
- [Forgot Password](https://github.com/anowercs/mynotes/blob/main/app/src/main/java/com/anowercs/notespadpro/activities/ForgotPasswordActivity.java): activity · Starts password reset flow. · `app/src/main/java/com/anowercs/notespadpro/activities/ForgotPasswordActivity.java`
- [Change Password](https://github.com/anowercs/mynotes/blob/main/app/src/main/java/com/anowercs/notespadpro/activities/ChangePasswordActivity.java): activity · Updates an authenticated user's password. · `app/src/main/java/com/anowercs/notespadpro/activities/ChangePasswordActivity.java`

### Notes domain

Note list, editing, rendering, and cloud-backed persistence.

- [MainActivity](https://github.com/anowercs/mynotes/blob/main/app/src/main/java/com/anowercs/notespadpro/activities/MainActivity.java): activity · Primary note list and home screen after login. · `app/src/main/java/com/anowercs/notespadpro/activities/MainActivity.java`
- [CreateNoteActivity](https://github.com/anowercs/mynotes/blob/main/app/src/main/java/com/anowercs/notespadpro/activities/CreateNoteActivity.java): activity · Creates and edits notes, including rich content. · `app/src/main/java/com/anowercs/notespadpro/activities/CreateNoteActivity.java`
- [NotesAdapter](https://github.com/anowercs/mynotes/blob/main/app/src/main/java/com/anowercs/notespadpro/adapters/NotesAdapter.java): adapter · Binds notes into list/grid item views. · `app/src/main/java/com/anowercs/notespadpro/adapters/NotesAdapter.java`
- [Note](https://github.com/anowercs/mynotes/blob/main/app/src/main/java/com/anowercs/notespadpro/entities/Note.java): entity · Core note model for text, media, links, and metadata. · `app/src/main/java/com/anowercs/notespadpro/entities/Note.java`
- [NotesListener](https://github.com/anowercs/mynotes/blob/main/app/src/main/java/com/anowercs/notespadpro/listeners/NotesListener.java): callback · Handles item actions such as open, edit, and delete. · `app/src/main/java/com/anowercs/notespadpro/listeners/NotesListener.java`
- [DynamoDBHelper](https://github.com/anowercs/mynotes/blob/main/app/src/main/java/com/anowercs/notespadpro/database/DynamoDBHelper.java): data access · Cloud persistence layer for note storage and retrieval. · `app/src/main/java/com/anowercs/notespadpro/database/DynamoDBHelper.java`

### Fitness domain

Step tracking, upload, and charted history views.

- [FitnessActivity](https://github.com/anowercs/mynotes/blob/main/app/src/main/java/com/anowercs/notespadpro/activities/FitnessActivity.java): activity · Displays fitness tracking screens and charts. · `app/src/main/java/com/anowercs/notespadpro/activities/FitnessActivity.java`
- [FitnessUploadService](https://github.com/anowercs/mynotes/blob/main/app/src/main/java/com/anowercs/notespadpro/services/FitnessUploadService.java): service · Uploads or syncs fitness data in the background. · `app/src/main/java/com/anowercs/notespadpro/services/FitnessUploadService.java`

### Platform & resources

Cloud bootstrap, shared utilities, assets, and Android resource layer.

- [MyAmplifyApp](https://github.com/anowercs/mynotes/blob/main/app/src/main/java/com/anowercs/notespadpro/AWSAmplify/MyAmplifyApp.java): bootstrap · Initializes AWS Amplify and cloud identity integration. · `app/src/main/java/com/anowercs/notespadpro/AWSAmplify/MyAmplifyApp.java`
- [UserUtils](https://github.com/anowercs/mynotes/blob/main/app/src/main/java/com/anowercs/notespadpro/utility/UserUtils.java): utility · Shared current-user and profile helpers. · `app/src/main/java/com/anowercs/notespadpro/utility/UserUtils.java`
- [ShareUtils](https://github.com/anowercs/mynotes/blob/main/app/src/main/java/com/anowercs/notespadpro/utility/ShareUtils.java): utility · Exports note content through Android sharing flows. · `app/src/main/java/com/anowercs/notespadpro/utility/ShareUtils.java`
- [UI resources](https://github.com/anowercs/mynotes/tree/main/app/src/main/res): resources · Layouts, menus, drawables, themes, navigation graphs, and assets. · `app/src/main/res`

## Connections

- SplashActivity → LoginActivity: routes to · Sends unauthenticated users to sign-in.
- SplashActivity → MainActivity: routes to · Skips login when a valid session exists.
- LoginActivity → RegisterActivity: signup · Moves to account creation.
- LoginActivity → Forgot Password: reset · Starts password recovery.
- LoginActivity → MainActivity: success · Opens the app after authentication.
- RegisterActivity → LoginActivity: back to login · Returns after successful registration.
- Forgot Password → Change Password: reset flow · Continues toward credential update.
- Change Password → LoginActivity: return · Returns to sign-in after password change.
- MyAmplifyApp → LoginActivity: auth backend · Initializes AWS auth used by the login flow.
- MyAmplifyApp → DynamoDBHelper: cloud setup · Provides AWS runtime context for persistence.
- MainActivity → NotesAdapter: renders with · Uses the adapter to show note collections.
- MainActivity → CreateNoteActivity: create/edit · Opens the note editor.
- MainActivity → NotesListener: item actions · Receives callbacks for note interactions.
- NotesAdapter → Note: binds · Reads note fields for display.
- NotesListener → CreateNoteActivity: open/edit · Triggers editing from note actions.
- CreateNoteActivity → Note: writes · Creates or updates note records.
- CreateNoteActivity → DynamoDBHelper: persists · Saves note data to cloud storage.
- MainActivity → DynamoDBHelper: loads · Fetches stored notes for the home list.
- DynamoDBHelper → Note: stores · Serializes the note entity for cloud persistence.
- CreateNoteActivity → ShareUtils: share · Exports note content through share actions.
- MainActivity → UserUtils: session/profile · Uses shared user context and identity helpers.
- FitnessActivity → FitnessUploadService: sync · Delegates background fitness upload.
- FitnessActivity → UI resources: charts/ui · Uses layouts, assets, and chart-related UI resources.
- MainActivity → UI resources: ui shell · Depends on app layouts, menus, and drawables.
- CreateNoteActivity → UI resources: forms · Uses note editor layouts and UI assets.
- LoginActivity → UI resources: forms · Uses auth screen layouts and icons.
- FitnessUploadService → UI resources: assets · Supports fitness UI and animation resources.
