From b2f094379789456ccfb18c9b110b28f8070fdb58 Mon Sep 17 00:00:00 2001 From: Sicherhaven Date: Fri, 10 Apr 2026 14:59:56 +0530 Subject: [PATCH] docs: add v2.0.1 release notes to CHANGELOG MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Documents image upload pipeline, OneDrive integration, full personal info profile form, demo→coming-soon label sweep, and Android build version fix (versionCode/versionName now sourced from pubspec). Co-Authored-By: Claude Sonnet 4.6 --- CHANGELOG.md | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index f547725..7ddba73 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,41 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). --- +## [2.0.1] - 2026-04-10 + +Version 2.0 — public release milestone. Full backend integration, real image upload pipeline, complete personal profile system, and production Android build infrastructure. + +### Added +- **Real image upload pipeline** (`lib/core/api/api_client.dart`): `uploadFile()` method uses `http.MultipartRequest` with explicit MIME type detection from file extension. Supports JPEG, PNG, WebP, MP4, MOV. Files upload to Node.js `/api/v1/upload/file` → OneDrive via Microsoft Graph API, returning a shareable anonymous link. +- **Contribute image upload to OneDrive** (`lib/features/gamification/services/gamification_service.dart`): `submitContribution()` now uploads all selected images before submitting the event form. Uploaded file metadata (including OneDrive share URL) is passed as `media` array in the contribution payload — replacing the broken device-path-as-string approach. +- **Upload endpoint constant** (`lib/core/api/api_endpoints.dart`): `ApiEndpoints.uploadFile` pointing to `$_nodeBase/v1/upload/file`. +- **Full personal info form in Edit Profile sheet** (`lib/screens/profile_screen.dart`): + - First Name, Last Name fields + - Email (read-only, locked from direct edit) + - Phone number field + - District picker with 183-day change cooldown — shows next-change date when locked + - Place, Pincode, State, Country fields + - All fields loaded from SharedPreferences cache and API on open; saved via `PATCH /api/user/update-profile/` + +### Changed +- **App version** displayed in Settings → About updated to `2.0.1(b)` (`lib/screens/settings_screen.dart`). +- **All "(demo)" labels replaced with "(coming soon)"** across the app: + - `settings_screen.dart`: Help button snackbar, Edit Profile snackbar, Privacy Policy subtitle + - `booking_screen.dart`: Tickets booked, Scanner, Chat, Call snackbars + - `tickets_booked_screen.dart`: Scanner, Chat/WhatsApp, Call snackbars + - `calendar_screen.dart`: Notifications snackbar +- **`pubspec.yaml` version bumped** to `2.0.1+21` (version name `2.0.1`, build code `21`). + +### Fixed +- **Android build version override** (`android/app/build.gradle.kts`): Removed hardcoded `versionCode = 17` and `versionName = "1.6.1(p)"` — both now read from `flutter.versionCode` / `flutter.versionName` (sourced from `pubspec.yaml`). This was causing Play Store rejections ("version code 17 already used") on every release build. +- **`http_parser` dependency added** (`pubspec.yaml`): Required for explicit `MediaType` MIME typing in `MultipartRequest`. Without it, file uploads defaulted to `application/octet-stream` and were rejected by the Node.js multer middleware. + +### Infrastructure +- **Production AAB built and signed** with `upload-keystore-new.jks` — build 20, version name `2.0` — submitted to Google Play Console. +- **`build.gradle.kts` signing config** reads `KEYSTORE_PASSWORD`, `KEY_ALIAS`, `KEY_PASSWORD` from `gradle.properties` or environment variables (no secrets in source). + +--- + ## [1.6.1] - 2026-04-04 Phase 4 — animation polish and final feature gaps. Flutter app reaches full feature parity with Consumer Web App v1.4.9.