|
| 1 | +# TaskApp |
| 2 | + |
| 3 | +TaskApp is a modern Android application built with Jetpack Compose that helps you create, organize, and track tasks with priorities, statistics, and insights. It supports email/password, Google, and anonymous sign-in, and includes a clean, themeable UI with light/dark mode. |
| 4 | + |
| 5 | +<div align="center"> |
| 6 | + <table> |
| 7 | + <tr> |
| 8 | + <td><img src="screenshots/0.png" alt="Screenshot 0" width="220"/></td> |
| 9 | + <td><img src="screenshots/1.png" alt="Screenshot 1" width="220"/></td> |
| 10 | + <td><img src="screenshots/2.png" alt="Screenshot 2" width="220"/></td> |
| 11 | + <td><img src="screenshots/3.png" alt="Screenshot 3" width="220"/></td> |
| 12 | + </tr> |
| 13 | + <tr> |
| 14 | + <td><img src="screenshots/4.png" alt="Screenshot 4" width="220"/></td> |
| 15 | + <td><img src="screenshots/5.png" alt="Screenshot 5" width="220"/></td> |
| 16 | + <td><img src="screenshots/6.png" alt="Screenshot 6" width="220"/></td> |
| 17 | + <td><img src="screenshots/7.png" alt="Screenshot 7" width="220"/></td> |
| 18 | + </tr> |
| 19 | + <tr> |
| 20 | + <td></td> |
| 21 | + <td><img src="screenshots/8.png" alt="Screenshot 8" width="220"/></td> |
| 22 | + <td><img src="screenshots/9.png" alt="Screenshot 9" width="220"/></td> |
| 23 | + <td></td> |
| 24 | + </tr> |
| 25 | + </table> |
| 26 | +</div> |
| 27 | + |
| 28 | +## Features |
| 29 | +- Task list with creation, editing, selection, and bulk actions |
| 30 | +- Priority management and breakdown (Low/Medium/High) |
| 31 | +- Statistics overview with completion and productivity indicators |
| 32 | +- Recent activity and smart insights |
| 33 | +- Sign in/up (email & Google) and guest mode |
| 34 | +- Settings: dark mode, UI preferences, font scale, and more |
| 35 | +- Profile and notifications screens |
| 36 | + |
| 37 | +## Architecture |
| 38 | +This project follows a modular Clean Architecture: |
| 39 | + |
| 40 | +- `app` — Android application module; wires dependencies and composes modules |
| 41 | +- `core` — Shared utilities and platform integrations (analytics, billing, etc.) |
| 42 | +- `domain` — Business logic, models, and use cases |
| 43 | +- `data` — Room, Firebase, networking, repositories, and data sources |
| 44 | +- `ui` — Jetpack Compose UI, navigation, view models |
| 45 | + |
| 46 | +Module wiring (see `settings.gradle.kts`): |
| 47 | +- `app` depends on `core`, `domain`, `data`, and `ui` |
| 48 | +- `ui` depends on `domain`, `core`, and `data` |
| 49 | +- `data` depends on `domain` and `core` |
| 50 | +- `domain` depends on `core` |
| 51 | + |
| 52 | +### Tech Stack |
| 53 | +- Jetpack Compose (Material 3, Navigation) |
| 54 | +- Hilt (DI) with KSP |
| 55 | +- Room (local persistence) |
| 56 | +- Firebase (Auth, Firestore, Analytics, Crashlytics) |
| 57 | +- WorkManager (background tasks) |
| 58 | +- Coroutines |
| 59 | + |
| 60 | +### Navigation & Flows |
| 61 | +Navigation is defined in `ui/src/main/java/com/example/ui/AppRoot.kt` using `NavHost`: |
| 62 | +- Routes: `signin`, `home`, `stats`, `profile`, `notifications`, `settings`, `edit`, `edit/{id}` |
| 63 | +- Start destination: `signin` when not authenticated, otherwise `home` |
| 64 | + |
| 65 | +Key screens: |
| 66 | +- `HomeScreen` — Task list, bulk actions, top-bar menu (settings, notifications, logout) |
| 67 | +- `StatsScreen` — Overview cards, weekly progress, priority chips, recent activity, insights |
| 68 | +- `SignInScreen` — Email/Password, Google sign-in, anonymous sign-in |
| 69 | +- `SettingsScreen` — Dark mode and UI preferences via `LocalDarkModeController` and `LocalUiSettingsController` |
| 70 | +- `ProfileScreen` — Account details and sign out via `ProfileViewModel` |
| 71 | + |
| 72 | +## Setup |
| 73 | + |
| 74 | +### Prerequisites |
| 75 | +- Android Studio latest (Koala or newer recommended) |
| 76 | +- JDK `11` |
| 77 | +- Android SDK API 24+ |
| 78 | + |
| 79 | +### Steps |
| 80 | +1. Clone the repository: |
| 81 | + ```bash |
| 82 | + git clone <repository-url> |
| 83 | + cd TaskApp |
| 84 | + ``` |
| 85 | +2. Open the project in Android Studio and sync Gradle |
| 86 | +3. Configure Firebase (optional but recommended): |
| 87 | + - Place your `google-services.json` into `app/` |
| 88 | + - Ensure Google services plugins are enabled in `app/build.gradle.kts` |
| 89 | +4. Configure Google Sign-In server client ID (optional): |
| 90 | + - Add `GOOGLE_SERVER_CLIENT_ID` to `local.properties` or your environment; it is read in `ui/build.gradle.kts` |
| 91 | +5. Build and run: |
| 92 | + ```bash |
| 93 | + ./gradlew :app:assembleDebug |
| 94 | + ./gradlew :app:installDebug |
| 95 | + ``` |
| 96 | + |
| 97 | +## Build Commands |
| 98 | +```bash |
| 99 | +# Clean build |
| 100 | +./gradlew clean |
| 101 | + |
| 102 | +# Build app |
| 103 | +./gradlew :app:assembleDebug |
| 104 | +./gradlew :app:assembleRelease |
| 105 | + |
| 106 | +# Install on device/emulator |
| 107 | +./gradlew :app:installDebug |
| 108 | + |
| 109 | +# Build UI module (library) |
| 110 | +./gradlew :ui:assembleDebug |
| 111 | + |
| 112 | +# Run tests |
| 113 | +./gradlew test |
| 114 | + |
| 115 | +# Lint |
| 116 | +./gradlew lint |
| 117 | +``` |
| 118 | + |
| 119 | +## Notes |
| 120 | +- The project uses KSP for Hilt and Room to improve build speed. |
| 121 | +- Some Compose icon APIs may be deprecated; warnings are expected and non-blocking. |
| 122 | + |
| 123 | +## Folder Structure (Top-Level) |
| 124 | +``` |
| 125 | +TaskApp/ |
| 126 | +├── app/ # Android app module (entry point) |
| 127 | +├── core/ # Core utilities and integrations |
| 128 | +├── domain/ # Entities, use cases, business logic |
| 129 | +├── data/ # Repositories, Room, Firebase, networking |
| 130 | +├── ui/ # Compose UI and navigation |
| 131 | +├── screenshots/ # App screenshots |
| 132 | +└── scripts/ # Firebase test utilities and seed scripts |
| 133 | +``` |
| 134 | + |
| 135 | +## License |
| 136 | +This project is provided as-is for demonstration. Add your license notice here if needed. |
0 commit comments