Commit Graph

34 Commits

Author SHA1 Message Date
c9c7cedd55 fix(ui): status bar layout and icons for Map, Dashboard, Manage
- Dashboard: apply background before statusBarsPadding so gradient extends under status bar
- Map: add statusBarsPadding to layer selector so it no longer overlaps status bar
- NavGraph: set white status bar icons (isAppearanceLightStatusBars=false) on main tab screens

Made-with: Cursor
2026-03-04 20:25:06 +01:00
e59e5aa060 feat(device): implement Device feature with SSOT, offline support, and settings screen
- Add domain layer: Device, PendingMutation, DeviceRepository
- Add Room DB: DeviceEntity, PendingMutationEntity, DAOs, DeviceLocalDataSource
- Add mock DeviceRemoteDataSource and DeviceSubscriptionManager
- Implement DeviceRepositoryImpl with optimistic updates and mutation queue
- Add UseCases: GetMyDevices, Rename, SetLocation, SetDataSharing, TriggerFirmware
- Implement DeviceSettingsScreen with rename, location, data sharing, firmware
- Wire ManageScreen to GetMyDevicesUseCase and DeviceSubscriptionManager
- Update navigation to pass deviceId and show DeviceSettingsScreen
- Add Room 2.7.0-alpha11 and Room dependencies to SDK

Made-with: Cursor
2026-03-04 19:35:07 +01:00
ca5cf8c439 feat(metric): reimplement RoundedDiagram/RingDiagram in Compose
- Add MetricGauge, RingGauge, MetricGaugeRow composables
- Add MetricGaugeContract with SensorType enum and AQI color mapping
- Add AQI colors (SensorGreen, SensorYellow, etc.) to theme
- Copy ic_temperature, ic_humidity, ic_pressure drawables from legacy
- Integrate MetricGaugeRow into DashboardScreen
- Add 9 preview composables for portfolio readiness

Made-with: Cursor
2026-03-04 19:34:59 +01:00
00ad737e7e feat(chart): implement AirMQChart component with legacy design
- Add AirMQChart Composable with 4-segment background, rounded corners, fake piece
- Support single-line and multiline datasets with cubic Bezier curves
- Add value labels (max, mid, min) on left, last value on right
- Add bottom row with time labels and center label (e.g. sensor name)
- Include touch marker, empty state (threshold 3 points), multiline preview
- Add ChartConfig, ChartData, ChartDataGenerator, ChartUtils
- Add chart/sensor colors to Color.kt
- Integrate test chart in DashboardScreen, use in MapUiComponents device panel

Made-with: Cursor
2026-03-04 19:18:03 +01:00
b607d0198b feat(manage): rework Manage screen layout and device list
- Match device item design to reference (ic_chip, status chips, trailing icon)
- Add header (Your devices) and footer to device list
- CTA at bottom, centered 46% width, same style for Sign in/Add device
- Window background #FAFAFA, LegacyBackground on list area
- No spacing between device items, no horizontal margin on list
- Add DeviceItem.extra, ic_go_to_location drawable
- Replace personal data with User/user@example.com
- Strengthen app-recreation-core rule: path check before edits
- Restore real auth logic in ManageViewModel

Made-with: Cursor
2026-03-02 21:51:50 +01:00
9a80ce5dff feat(login): replace Facebook with email-password auth screen
- Remove Facebook provider from Login flow
- Add EmailLoginScreen with gradient background, email/password fields
- Add EmailLoginScreenContract and EmailLoginViewModel with stub logic
- Add navigation: Sign in with email -> EmailLoginScreen
- Use back arrow icon instead of back text
- Move header above email field, add Register button
- Update run command to launch app after install
- Add ic_arrow_back drawable, update strings

Made-with: Cursor
2026-03-02 20:38:09 +01:00
f4b6df10ac Fix Manage screen header size 2026-03-02 20:23:38 +01:00
c96a433307 Add new Cursor commands 2026-03-02 20:23:02 +01:00
31f723cbd6 Implement Google->Firebase->Backend auth flow
- Add authGoogleNew GraphQL mutation and token exchange in AuthServiceImpl
- Add ApiTokenStore and SharedPreferencesApiTokenStore for API token persistence
- Add ApolloAuthInterceptor to inject Bearer token on GraphQL requests
- Introduce FirebaseSessionManager for testable Firebase auth orchestration
- Update LoginViewModel to surface backend auth errors
- Add unit tests for Firebase failure, backend failure, and auth state

Made-with: Cursor
2026-03-02 20:19:54 +01:00
436e165679 Point SDK GraphQL to api-app and switch map markers query to getMarkers.
This aligns the app with the new backend endpoint/schema and keeps map marker mapping compatible with the new response shape.

Made-with: Cursor
2026-03-02 19:22:03 +01:00
8bf076697e Refine social auth UI and simplify manage auth state.
Extract Google sign-in into a dedicated manager with explicit cancel handling, update shared social button variants, and switch manage UI state from enum modes to a direct authorization flag.

Made-with: Cursor
2026-03-02 03:16:46 +01:00
28ad63fb4a Wire Firebase auth state into settings/logout and refresh Google sign-in config.
This updates the settings account section to show/logout based on authenticated user state, refines auth service naming, and aligns app signing/Firebase config changes needed for successful Google authentication.

Made-with: Cursor
2026-03-01 21:40:58 +01:00
91a9521f3e Implement Firebase Google sign-in with enum-based auth contracts.
Refactor AuthService to use AuthProvider and User, add Firebase-backed auth wiring for login/manage flows, and fix app-level Google services configuration so Credential Manager sign-in works reliably.

Made-with: Cursor
2026-03-01 21:15:09 +01:00
90792c601c Recreate legacy login screen in Compose.
Port the old sign-in UI and behavior (gradient, branded social buttons, policy footer, and continue-anonymous dialog) and add Login contract/ViewModel stubs while keeping unauthorized Manage-to-Login navigation intact.

Made-with: Cursor
2026-03-01 19:34:29 +01:00
7c00163304 Refine Compose manage UI parity and button behavior.
Apply legacy-accurate manage header/CTA styling, add reusable button icon support with previews, and include related map/navigation polish updates in this working tree.

Made-with: Cursor
2026-03-01 19:02:13 +01:00
9885162c4e Add firebase project 2026-03-01 18:39:56 +01:00
a2cbb181d5 Migrate legacy localized strings and remove runtime hardcoded UI text.
This copies old locale resources into the 2026 app, reuses legacy string keys where possible, and moves user-facing runtime text to string resources with missing entries added for all supported locales.

Made-with: Cursor
2026-03-01 15:07:26 +01:00
1823d0bf1b Port manage/settings flows to Compose and wire settings persistence.
Add contract-driven state/action/event view models for manage and settings, migrate settings UI toward legacy preference rows (with anonymous stub behavior), and back SettingsServiceImpl with SharedPreferences for real toggle/city storage.

Made-with: Cursor
2026-03-01 15:00:34 +01:00
c155a3cc2e Expose per-setting SettingsService getters/setters and wire map offline visibility to GraphQL.
This moves offline filtering to the API query path so map data respects settings at source instead of client-side post-filtering.

Made-with: Cursor
2026-03-01 00:28:43 +01:00
920a832424 Implement legacy-style map markers with UI model mapping.
Replace default OSM pins with round value-based icons, add DTO-to-domain-to-UI marker mapping, and normalize no-value/offline styling while keeping ownership icon behavior stubbed for future auth integration.

Made-with: Cursor
2026-03-01 00:19:40 +01:00
02c33e5ad5 Update map marker mapping for locations query.
Switch MapMarkers handling from getMarkers to locations, and align mapper fields with the new Location payload while preserving MapItem coordinates and online status.

Made-with: Cursor
2026-02-28 23:09:09 +01:00
4caadd24b9 Set pre-release app version and append a git-based debug suffix.
Made-with: Cursor
2026-02-28 23:03:54 +01:00
10613a36f8 Align map sensor selector with legacy dropdown UI.
Restore the old map sensor control styling and interaction in Compose, and add previews for collapsed/expanded, search, and device panel states to speed up UI iteration.

Made-with: Cursor
2026-02-28 22:56:33 +01:00
18a652a789 Replace launcher icons with old project mipmap assets.
Remove current launcher XML/webp assets and copy the full mipmap icon set from the legacy repo so app icon matches the original branding.

Made-with: Cursor
2026-02-28 22:54:58 +01:00
81627d6b7c Add Apollo-level logging and Kotlin-driven map filter.
Pass the map marker online filter as a GraphQL variable from Kotlin so offline-inclusive behavior is controllable in code, and add a shared Apollo interceptor to log each request payload and response outcome for all operations.

Made-with: Cursor
2026-02-28 22:44:27 +01:00
5cfd32639b Add cursor rule 2026-02-28 22:25:44 +01:00
726e143405 Map: remove MapUiState, add search/my-location drawables and strings
Made-with: Cursor
2026-02-28 22:25:32 +01:00
c4626ca40c Refactor map screen panel state to nullable contracts.
This replaces visibility booleans and error state fields with nullable `searchPanelState`/`devicePanelState` and action-based error toasts for one-shot UI effects.

Made-with: Cursor
2026-02-28 22:24:44 +01:00
117caa9122 Add SDK service contracts for core infrastructure.
Introduce interface-only service APIs and feature models for auth, device, settings, notifications, connectivity, and telemetry to scaffold implementation without backend-specific naming.

Made-with: Cursor
2026-02-28 16:58:55 +01:00
6dedaf0e8b Add SDK map module and migrate map fetching to Apollo with Hilt wiring.
This includes the new sdk module, MapService + mapper implementation, Apollo provider module, Hilt app integration, and the project .gitignore update.

Made-with: Cursor
2026-02-28 16:58:22 +01:00
54092f184f Use the legacy app icon assets for the launcher.
Replace the default adaptive icon visuals with the old AirMQ logo and blue gradient background to match the original project branding.

Made-with: Cursor
2026-02-28 16:24:46 +01:00
9160edda33 Restore the legacy bottom navigation gradient styling.
Apply the old blue gradient treatment to the Compose bottom bar so it visually matches the previous project implementation.

Made-with: Cursor
2026-02-28 16:20:13 +01:00
efcd140966 Add map data flow and port legacy app theming.
This bundles the GraphQL-backed map scaffolding with the old AirMQ visual style by applying legacy colors, reusable button styles, and original bottom navigation icons for UI parity.

Made-with: Cursor
2026-02-28 15:52:55 +01:00
43c21a0cd5 Initial commit 2026-02-28 14:26:16 +01:00