md2link

Release Notes - Version 1.1.0

DraftMay 20, 2026

Release Notes - Version 1.1.0

Phạm vi: Commit 1fb1d579a3ab89e1 Tổng số commit: 12


1. Tính năng mới

1.1 Daily Engagement Notification

  • Bổ sung thông báo Daily Engagement dạng fullscreen (lock-screen style) nhằm kéo user quay lại app hằng ngày.
  • Đi kèm 8 ảnh teaser khác nhau cho nội dung thông báo.

1.2 App Shortcut & Uninstall Survey

  • Thêm shortcut "AI Photo Maker" trên launcher để user truy cập nhanh.
  • Tích hợp Uninstall Feedback Survey khi user gỡ app.

1.3 Màn hình chọn ảnh trong app (In-app Photo Picker)

  • Màn hình picker riêng thay cho system gallery.
  • Hỗ trợ: chọn album, lưới ảnh tùy chỉnh, yêu cầu permission có UI hướng dẫn riêng.

1.4 Dịch vụ Qwen - Image Editing

  • Tích hợp thêm Qwen làm AI service mới cho image editing, mở rộng nguồn tạo ảnh.

1.5 Lịch mới (Neon Calendar)

  • Component lịch mới phong cách neon dùng cho:
    • Chọn ngày sinh trong Couple Profile.
    • Thêm cột mốc (milestone) trong Timeline.

2. Cải tiến Generation Flow

2.1 Flow tạo ảnh đa dịch vụ

  • Cho phép mỗi style chọn AI service riêng (Face Combine, Image Combine, Qwen).
  • Cập nhật bộ style (couple_styles.json) với nhiều style/dịch vụ mới.
  • Logic điều phối generation tập trung, đồng nhất giữa các flow (Choose Picture, Future Baby, Generating).

2.2 UI Generating mới

  • Trải nghiệm mới khi đang tạo ảnh: hiệu ứng "scanning" trên ảnh + danh sách các phase rõ ràng để user thấy tiến trình.

3. UI/UX Updates

3.1 Refresh giao diện toàn app

  • Cập nhật design system: màu, typography, tokens.
  • Home tab mới: bottom tab bar, category section, profile reminder banner, banner pager mới.
  • Bộ icon tab mới: Create, Gallery, Profile, Story.

3.2 Cải tiến màn Future Baby & Home

  • Redesign Age Selector, Gender Selector, Face Slot.
  • Cập nhật Home Header, Home Loading, Style Browser (có loading state mới).

4. Thư viện & SDK

4.1 First Open SDK 4.3.0 + Ads SDK 9.0.4

  • Nâng cấp First Open SDK lên 4.3.0, Ads SDK lên 9.0.4.
  • Splash / Language / Onboarding chuyển sang SDK mới quản lý → đồng bộ với chuẩn Apero.

4.2 Rate App - thư viện mới

  • Chuyển sang lib Rate App mới (Apero Module Rate) thay cho implement cũ.

5. Cập nhật cấu hình

5.1 Ad IDs & Strings

  • Cập nhật bộ Ad IDs production.
  • Chuẩn hoá & dọn dẹp strings cho 10 ngôn ngữ: DE, ES, FR, HI, JA, KO, PT, TH, VI, ZH.

6. Mô tả UI các màn hình trong app

Lưu ý: 6.1 Splash / 6.2 Language (First Open) / 6.3 Onboarding do First Open SDK 4.3.0 render — không có Composable trong repo, chỉ có config XML (fo_config.xml, fo_config_color.xml, fo_config_ads.xml). Mockup mang tính tham khảo theo chuẩn template SDK.

6.1 Splash (SDK render)

  • Layout XML: activity_splash.xml.
  • Logo app fo_ic_logo_app.webp trung tâm, nền theo brand color.
  • SDK quản lý load Ad Splash (Resume / Splash Inter) trước khi navigate sang Language hoặc Home theo FirstOpenNextAction.
┌──────────────────────────────┐
│                              │
│                              │
│           ╭─────╮            │
│           │ LOGO│            │
│           ╰─────╯            │
│         AI Couple            │
│                              │
│       ▓▓▓▓▓▓░░░░░ loading    │
│                              │
│      (Ad Splash by SDK)      │
└──────────────────────────────┘

6.2 Language

2 màn Language khác nhau:

(a) Language (First Open) — SDK render

  • Layout do First Open SDK 4.3.0 quản lý, list ngôn ngữ + Native Ad theo config.
┌──────────────────────────────┐
│ Language               Next →│
├──────────────────────────────┤
│ ╔══════════════════════════╗ │
│ ║ English             ◉    ║ │
│ ╚══════════════════════════╝ │
│ ┌──────────────────────────┐ │
│ │ Tiếng Việt          ○    │ │
│ ├──────────────────────────┤ │
│ │ 日本語               ○    │ │
│ └──────────────────────────┘ │
│ ┌──────────────────────────┐ │
│ │      [Native Ad]         │ │
│ └──────────────────────────┘ │
└──────────────────────────────┘

(b) Language (Settings > Language) — LanguageScreen.kt in-app

  • Header: back button (trái) + title "LANGUAGE" uppercase, font SpaceGrotesk, canh giữa (không có Next button).
  • LazyColumn các card nativeName ngôn ngữ; card chọn có viền gradient hồng-tím + chữ hồng + icon check tròn gradient bên phải.
  • Không có cờ, không có Native Ad.
┌──────────────────────────────┐
│ ←        LANGUAGE            │
├──────────────────────────────┤
│ ┌──────────────────────────┐ │
│ │  English                 │ │
│ └──────────────────────────┘ │
│ ╔══════════════════════════╗ │
│ ║  Tiếng Việt          (✓) ║ │ ← border gradient + chữ hồng
│ ╚══════════════════════════╝ │
│ ┌──────────────────────────┐ │
│ │  日本語                   │ │
│ └──────────────────────────┘ │
│ ┌──────────────────────────┐ │
│ │  한국어                   │ │
│ └──────────────────────────┘ │
└──────────────────────────────┘

6.3 Onboarding (First Open)

  • 3 trang giới thiệu tính năng chính, ảnh minimal/illustration full-bleed.
  • Indicator dạng dot dưới cùng, nút Next/Get Started kiểu CTA neon.
  • Native Ad fullscreen có thể hiển thị giữa các bước theo config.
┌──────────────────────────┐
│                          │
│  ┌────────────────────┐  │
│  │                    │  │
│  │   [Hero Image]     │  │
│  │   couple illustr.  │  │
│  │                    │  │
│  └────────────────────┘  │
│                          │
│  Create magic with       │
│  your partner ✨         │
│                          │
│  Generate stunning AI    │
│  photos together         │
│                          │
│       ● ○ ○              │
│  ╔════════════════════╗  │
│  ║      Next  →       ║  │
│  ╚════════════════════╝  │
└──────────────────────────┘

6.4 Home (AI Studio tab)

  • Shell: App shell dùng HorizontalPager (swipe disabled) chứa 4 tab, chuyển tab bằng bottom tab bar.
  • Header:
    • Trái: 2 avatar cặp đôi (chỉ hiện khi đã set up profile) — avatar A border gradient sweep hồng, avatar B gradient tím→cyan. Tap mở Couple Profile.
    • Phải: icon Crown PRO (mở Paywall) + icon Settings (gear, mở Settings).
    • Không hiển thị tên cặp đôi trong header.
  • Banner Pager (Hero): Carousel side-peeking, item active scale 1.0, các item bên cạnh scale 0.8 + alpha 0.5 + blur 10px (API 31+). Auto-scroll 3s, pause khi user kéo. Dot indicator neon dưới banner.
  • Category Sections: Mỗi category là 1 section riêng theo style:
    • ROW layout: LazyRow các card 130×162 đồng đều, có label đè gradient ở đáy card.
    • GROUP layout: 1 hero card 190×238 bên trái + nhiều cột phụ (2 card 90×113 xếp dọc) scroll ngang.
    • Header section: title trái + link "See all" hồng bên phải.
  • Loading state: Shimmer skeleton thay cho spinner khi isLoading hoặc categories rỗng.
  • Profile Reminder Banner: Nằm ngay trên bottom tab bar (không phải đầu màn) — chỉ hiện khi showProfileReminder = true.
  • Bottom Tab Bar: 4 tab — AI Studio / Baby Gen / Our Story / Gallery (không có tab Profile). Tab active: icon + label hồng, font Bold.
  • Banner Ad: Pin dưới bottom tab bar, persist qua tất cả các tab.
┌──────────────────────────────┐
│ (◔)(◔)            👑   ⚙     │  ← Header: 2 avatars  |  PRO + Settings
├──────────────────────────────┤
│                              │
│   ┌────────────────────┐     │
│ ░ │  [Hero Banner]     │ ░   │  ← side-peek: side cards scale 0.8 + blur
│ ░ │   ✨ neon glow ✨  │ ░   │
│   └────────────────────┘     │
│         ● ○ ○                │  ← neon dots indicator
├──────────────────────────────┤
│  Wedding              See all│
│ ┌────┐ ┌────┐ ┌────┐ ┌────┐  │  ← ROW: 130×162 cards
│ │ img│ │ img│ │ img│ │ img│ →│
│ │name│ │name│ │name│ │name│  │
│ └────┘ └────┘ └────┘ └────┘  │
├──────────────────────────────┤
│  Travel               See all│
│ ┌────────┐ ┌──┐ ┌──┐ ┌──┐    │  ← GROUP: hero 190×238 + cột 2 card
│ │        │ │S1│ │S3│ │S5│    │
│ │  Hero  │ ├──┤ ├──┤ ├──┤  → │
│ │190×238 │ │S2│ │S4│ │S6│    │
│ │  name  │ └──┘ └──┘ └──┘    │
│ └────────┘                   │
├──────────────────────────────┤
│ ⚠ Set up couple profile →    │  ← Profile Reminder (sát tab bar)
├──────────────────────────────┤
│  ✨        👶       💞      🖼│
│AI Studio BabyGen OurStory Gal│  ← 4 tab; active = hồng bold
├──────────────────────────────┤
│      [ Banner Ad ]           │  ← pin dưới tab bar, persist
└──────────────────────────────┘

6.5 Style Browser

  • Header: Back button (trái) + title (giữa). Nền gradient VoidBlack.
  • Tab Chips: Hàng chip category scroll ngang phía trên — chip active có gradient border neon.
  • Content: HorizontalPager hiển thị StyleGrid của category đang chọn, vuốt ngang để chuyển category.
  • Style Card: Thumbnail + badge "PRO" overlay (nếu là style premium).
  • Loading: shimmer card grid. Empty: message khi không có style.
┌──────────────────────────────┐
│ ←   Style Browser            │
├──────────────────────────────┤
│ ╔══════╗┌──────┐┌──────┐┌────│
│ ║Weddi.║│Travel││Casual││Date│ → chip tabs
│ ╚══════╝└──────┘└──────┘└────│
├──────────────────────────────┤
│ ┌────────┐ ┌────────┐        │
│ │  img   │ │  img   │ PRO    │
│ │  name  │ │  name  │        │
│ └────────┘ └────────┘        │
│ ┌────────┐ ┌────────┐        │
│ │  img   │ │  img   │        │
│ │  name  │ │  name  │        │
│ └────────┘ └────────┘        │
└──────────────────────────────┘

6.6 Choose Picture

  • Header: Chỉ có back button + title "CHOOSE PHOTOS" (uppercase), không có nút confirm.
  • Photo Slots: Tùy service yêu cầu 1 hay 2 ảnh:
    • 1 slot: 1 card lớn 140dp chiếm full width, hiện glyph + khi rỗng.
    • 2 slots: 2 card 90dp side-by-side label "YOU" (accent hồng) + "PARTNER" (accent tím). Slot đã có ảnh: thumbnail + icon edit ở góc trên-phải.
  • Embedded Cropper: Vùng crop ảnh lớn ngay trong màn (3:4) với viền màu accent theo slot active. Khi user kéo handle xong, auto-crop debounce.
  • Bottom area: Hint text + counter free-generation còn lại (nếu chưa Premium) + CTA "GENERATE" (gradient khi enabled, dark khi disabled).
  • Banner Ad: Dưới CTA.
┌──────────────────────────────┐
│ ←   CHOOSE PHOTOS            │
├──────────────────────────────┤
│  ┌─────────┐    ┌─────────┐  │
│  │  + YOU  │    │+PARTNER │  │ ← 2 slots (hoặc 1 slot full width)
│  │  ♡ pink │    │ ♡ purpl │  │
│  └─────────┘    └─────────┘  │
├──────────────────────────────┤
│  ╔═════════════════════════╗ │
│  ║                         ║ │
│  ║   [Embedded Cropper]    ║ │
│  ║   3:4, accent border    ║ │
│  ║                         ║ │
│  ╚═════════════════════════╝ │
├──────────────────────────────┤
│  Crop your photo • 3 left    │
│  ╔═════════════════════════╗ │
│  ║       GENERATE          ║ │
│  ╚═════════════════════════╝ │
│       [ Banner Ad ]          │
└──────────────────────────────┘

6.7 Select Photo (Photo Picker mới)

  • Header: Back button (trái) + title select_photo_title (giữa) + icon Camera trong card surface tối (phải) — tap mở camera chụp ảnh trực tiếp.
  • Album Tab Row: Hàng AlbumTabRow scroll ngang, đồng bộ với HorizontalPager bên dưới.
  • Content: HorizontalPager mỗi page là 1 PhotoGrid của album tương ứng — vuốt ngang để chuyển album.
  • Trạng thái permission: Khi chưa có quyền → PermissionRequestView overlay giữa màn với CTA xin quyền.
  • Trạng thái loading / empty: Spinner khi đang load, message khi album rỗng.
┌──────────────────────────────┐
│ ←   Select Photo      [📷]   │ ← back | title | Camera button
├──────────────────────────────┤
│ ╔════╗┌─────┐┌──────┐┌──────┐│
│ ║All ║│Camer││Screen││Saved │ → AlbumTabRow (sync pager)
│ ╚════╝└─────┘└──────┘└──────┘│
├──────────────────────────────┤
│  ┌──┐ ┌──┐ ┌──┐ ┌──┐         │
│  │📷│ │📷│ │📷│ │📷│         │
│  └──┘ └──┘ └──┘ └──┘         │
│  ┌──┐ ┌──┐ ┌──┐ ┌──┐         │  ← swipe ngang để đổi album
│  │📷│ │📷│ │📷│ │📷│         │
│  └──┘ └──┘ └──┘ └──┘         │
│  ┌──┐ ┌──┐ ┌──┐ ┌──┐         │
│  │📷│ │📷│ │📷│ │📷│         │
│  └──┘ └──┘ └──┘ └──┘         │
└──────────────────────────────┘

Permission state (overlay):
   ┌────────────────────┐
   │    🔒              │
   │  Allow access to   │
   │  your photos…      │
   │ ╔════════════════╗ │
   │ ║ Grant Access   ║ │
   │ ╚════════════════╝ │
   └────────────────────┘

6.8 Crop

  • Header (CropHeader): Back button (trái) + nút "Auto" (phải) — chỉ hiện khi detect được face.
  • Instruction: Text hint giữa header, đổi nội dung khi đã detect face ("Face detected" variant).
  • Cropper Box: Cropper lớn chính giữa (weight 1f), tỉ lệ 3:4, handle 20dp. Có placeholder cho các state: loading, analyzing, error, no image.
  • Bottom area: Counter free-generation (nếu chưa Premium) + CropBottomBar với nút "Continue".
  • Banner Ad: Dưới cùng.
┌──────────────────────────────┐
│ ←                  [Auto]    │ ← Auto chỉ hiện khi detect face
├──────────────────────────────┤
│       Crop your photo        │ ← hint (đổi khi face detected)
├──────────────────────────────┤
│                              │
│   ╔══════════════════════╗   │
│   ║                      ║   │
│   ║                      ║   │
│   ║   [Cropper 3:4]      ║   │
│   ║   handles 20dp       ║   │
│   ║                      ║   │
│   ╚══════════════════════╝   │
│                              │
├──────────────────────────────┤
│       2 free left            │
│  ╔═════════════════════════╗ │
│  ║       Continue          ║ │
│  ╚═════════════════════════╝ │
│       [ Banner Ad ]          │
└──────────────────────────────┘

6.9 Generating

  • Top: Nút X (close) ở góc trái trên — mở NeonCancelDialog.
  • ScanningImageRow: Hàng frame ảnh input với hiệu ứng scanning beam (số frame = số ảnh user upload, 1 hoặc 2).
  • Progress Display:
    • Số phần trăm lớn 44sp bold ở giữa.
    • Subtitle "please wait" 13sp.
    • NeonProgressBar cao 6dp, fill gradient neon.
  • Phase List (GenerationPhaseList): Danh sách phase với icon, nội dung thay đổi theo serviceType (FaceCombine / ImageCombine / Qwen).
  • Banner Ad: GeneratingBannerView dưới cùng.
  • Error overlay: NeonErrorDialog khi sinh ảnh lỗi.
┌──────────────────────────────┐
│ ✕                            │
│                              │
│   ┌────────┐   ┌────────┐    │
│   │▓scan▓  │   │▓scan▓  │    │ ← ScanningImageRow (1 hoặc 2 frame)
│   │        │   │        │    │
│   │ [You]  │   │[Partner│    │
│   │        │   │   ]    │    │
│   └────────┘   └────────┘    │
│                              │
│           65%                │ ← 44sp bold
│        please wait           │ ← 13sp
│  ▓▓▓▓▓▓▓▓▓▓░░░░░░░░░░░       │ ← NeonProgressBar 6dp
│                              │
│  ✓  Phase 1                  │
│  ✓  Phase 2                  │ ← GenerationPhaseList
│  ●  Phase 3                  │   (icon theo serviceType)
│  ○  Phase 4                  │
├──────────────────────────────┤
│      [ Banner Ad ]           │
└──────────────────────────────┘

6.10 Result

  • ResultTopBar: Back button (trái, trong surface card) + tên style (giữa) + spacer cân chỉnh (phải).
  • Image Display: Box giữa màn chứa ảnh kết quả, viền NeonPink (alpha 0.15), giữ nguyên aspect ratio. Watermark chữ ở góc dưới-phải (chỉ với non-premium).
  • Actions Bar: Tối đa 5 action (hiện theo context):
    • Save (ẩn nếu vào từ Gallery), Share (luôn có), Report (disable sau khi đã submit), Discard (chỉ với kết quả mới), Delete (chỉ khi vào từ Gallery).
    • Mỗi action = column: icon box + label.
  • Banner Ad: ResultBannerView dưới cùng.
  • Dialogs: AlertDialog xác nhận delete/discard, overlay spinner khi save, ReportBottomSheetFragment khi report.
┌──────────────────────────────┐
│ [←]    Sunset Romance        │ ← back trong surface | style name
├──────────────────────────────┤
│                              │
│   ┌──────────────────────┐   │
│   │  ╔════════════════╗  │   │
│   │  ║                ║  │   │
│   │  ║ [Result Image] ║  │   │ ← NeonPink border 0.15a
│   │  ║                ║  │   │
│   │  ║         logo🅰 │  │   │ ← watermark (non-premium)
│   │  ╚════════════════╝  │   │
│   └──────────────────────┘   │
│                              │
├──────────────────────────────┤
│   💾      ↗      ⚠     🗑    │ ← Save Share Report Discard/Delete
│  Save  Share Report Discard  │   (hiển thị tuỳ context)
├──────────────────────────────┤
│      [ Banner Ad ]           │
└──────────────────────────────┘

6.11 Future Baby (Baby Gen tab)

  • Header: Title "FUTURE BABY" canh trái (uppercase) — embedded trong Home tab, không có back button.
  • 2 Face Slot side-by-side: 150dp height, accent color riêng (1 slot girl tone / 1 slot boy tone). Slot rỗng = +, có ảnh = thumbnail + edit.
  • Gender Selector: SectionLabel + 2 button toggle (không phải 3 — không có Random).
  • Age Selector: SectionLabel + control dạng dropdown-like (chọn 1 độ tuổi).
  • BabyResultSection: Khi có kết quả hiển thị ảnh baby + actions.
  • Error text: Inline error (nếu có).
  • Free-generation counter + CTA Generate.
┌──────────────────────────────┐
│  FUTURE BABY                 │ ← title canh trái, no back
├──────────────────────────────┤
│  ┌──────────┐  ┌──────────┐  │
│  │   + Mom  │  │   + Dad  │  │ ← 2 slot 150dp side-by-side
│  │  (girl   │  │  (boy    │  │
│  │   tone)  │  │   tone)  │  │
│  └──────────┘  └──────────┘  │
├──────────────────────────────┤
│  Gender                      │
│  ┌────────┐  ┌────────┐      │ ← 2 button (không có Random)
│  │ 👦 Boy │  │ 👧 Girl│      │
│  └────────┘  └────────┘      │
├──────────────────────────────┤
│  Age                         │
│  ┌────────────────────────┐  │ ← dropdown-like
│  │  3 years         ▾     │  │
│  └────────────────────────┘  │
├──────────────────────────────┤
│       2 free left            │
│  ╔═════════════════════════╗ │
│  ║       Generate          ║ │
│  ╚═════════════════════════╝ │
└──────────────────────────────┘

6.12 Couple Profile

  • Header: Back button (chỉ hiện khi không phải first launch) + title set_up_your_duo canh giữa.
  • 2 GradientAvatarCircles side-by-side, cách nhau 40dp:
    • Avatar A: sweep gradient hồng/tím.
    • Avatar B: sweep gradient tím/cyan.
  • 2 NeonLabeledFields: Tên partner A + tên partner B (lần lượt).
  • NeonDateField: Ngày kỷ niệm (anniversary). Tap mở NeonCalendarDialog.
  • CoupleProfileContinueButton: "Continue" hoặc "Skip" tuỳ trạng thái fill.
┌──────────────────────────────┐
│ ←      Set up your duo       │
├──────────────────────────────┤
│                              │
│      ╭───╮       ╭───╮       │
│     ╱  +  ╲     ╱  +  ╲      │ ← GradientAvatarCircle A | B
│      ╲___╱       ╲___╱       │   (sweep gradient pink/purple/cyan)
│                              │
├──────────────────────────────┤
│  Your name                   │
│  ┌────────────────────────┐  │
│  │  Alex                  │  │
│  └────────────────────────┘  │
│  Partner's name              │
│  ┌────────────────────────┐  │
│  │  Mia                   │  │
│  └────────────────────────┘  │
│  Anniversary                 │
│  ┌────────────────────────┐  │
│  │  📅  Mar 5, 2024       │  │ ← tap → NeonCalendarDialog
│  └────────────────────────┘  │
├──────────────────────────────┤
│  ╔═════════════════════════╗ │
│  ║       Continue          ║ │
│  ╚═════════════════════════╝ │
└──────────────────────────────┘

NeonCalendarDialog:
   ┌─────────────────────┐
   │  ‹   May 2026   ›   │
   ├─────────────────────┤
   │ Mo Tu We Th Fr Sa Su│
   │           1  2  3  4│
   │  5  6  7  8  9 10 11│
   │ 12 13 14 ╔══╗ 17 18 │
   │ 19 20 21 ║15║ 24 25 │
   │ 26 27 28 ╚══╝ 31    │
   ├─────────────────────┤
   │   Cancel    Confirm │
   └─────────────────────┘

6.13 Timeline (Our Story tab)

  • Header: Title "OUR STORY" canh trái, uppercase 18sp bold (không có back button — embedded trong Home tab).
  • Timeline: LazyColumn các TimelineNode — đường gradient dọc bên trái, dot màu cho từng event. Mỗi node là card hiện title + date + caption + icon thùng rác (xoá).
  • Empty state: EmptyTimeline message khi chưa có event.
  • FAB: Góc dưới-phải, tròn 56dp, nền NeonGradient, icon +, có bounce animation + soft glow khi press.
  • Dialogs: AddMilestoneSheet (modal bottom sheet thêm event) + AlertDialog xác nhận delete.
┌──────────────────────────────┐
│  OUR STORY                   │ ← title canh trái, uppercase
├──────────────────────────────┤
│  ●─┐                         │
│    │ ┌──────────────────┐    │
│    │ │ First Date    🗑 │    │
│    │ │ Feb 14, 2024     │    │
│    │ │ Our first date…  │    │
│    │ └──────────────────┘    │
│  ●─┤                         │
│    │ ┌──────────────────┐    │
│    │ │ Engagement    🗑 │    │
│    │ │ Dec 24, 2024     │    │
│    │ └──────────────────┘    │
│  ●─┤                         │
│    │ ┌──────────────────┐    │
│    │ │ Anniversary   🗑 │    │
│    │ │ Feb 14, 2026     │    │
│    │ └──────────────────┘    │
│  ●                           │
│                              │
│                       ┌────┐ │ ← FAB 56dp, glow
│                       │ +  │ │
│                       └────┘ │
└──────────────────────────────┘

AddMilestoneSheet (bottom modal):
   ┌──────────────────────┐
   │       ──             │
   │  Add Milestone       │
   ├──────────────────────┤
   │  Title               │
   │  ┌────────────────┐  │
   │  │                │  │
   │  └────────────────┘  │
   │  Date                │
   │  ┌────────────────┐  │
   │  │ 📅 Pick date   │  │ ← mở NeonCalendarDialog
   │  └────────────────┘  │
   │  Caption (optional)  │
   │  ┌────────────────┐  │
   │  │                │  │
   │  └────────────────┘  │
   │  ╔════════════════╗  │
   │  ║      Save      ║  │
   │  ╚════════════════╝  │
   └──────────────────────┘
  • Header (động): Có 2 mode:
    • Normal: title "GALLERY" (uppercase).
    • Selection mode (sau khi long-press): nút close + số item đã chọn + icon delete (đỏ) bên phải.
  • Content: GalleryGrid lưới ảnh thumbnail. Long-press → selection mode.
  • Empty state: Message + CTA "Create Now" khi gallery rỗng.
  • FAB: Góc dưới-phải (chỉ hiện khi có item và không ở selection mode), NeonPink, icon + → mở Style Browser.
Normal mode:
┌──────────────────────────────┐
│  GALLERY                     │
├──────────────────────────────┤
│ ┌──────┐ ┌──────┐ ┌──────┐   │
│ │ img  │ │ img  │ │ img  │   │
│ └──────┘ └──────┘ └──────┘   │
│ ┌──────┐ ┌──────┐ ┌──────┐   │
│ │ img  │ │ img  │ │ img  │   │
│ └──────┘ └──────┘ └──────┘   │
│ ┌──────┐ ┌──────┐            │
│ │ img  │ │ img  │            │
│ └──────┘ └──────┘            │
│                              │
│                       ┌────┐ │
│                       │ +  │ │ ← FAB
│                       └────┘ │
└──────────────────────────────┘

Selection mode:
┌──────────────────────────────┐
│ ✕   3 selected           🗑  │
├──────────────────────────────┤
│ ╔══════╗ ┌──────┐ ╔══════╗   │
│ ║ img✓ ║ │ img  │ ║ img✓ ║   │
│ ╚══════╝ └──────┘ ╚══════╝   │
│ ┌──────┐ ╔══════╗ ┌──────┐   │
│ │ img  │ ║ img✓ ║ │ img  │   │
│ └──────┘ ╚══════╝ └──────┘   │
└──────────────────────────────┘

6.15 Saved Result (sau khi save thành công)

  • Top: Emoji 🎉 48sp + success title 26sp bold + subtitle 14sp.
  • Image: Ảnh kết quả ở giữa, crop fit, viền NeonPink 1.5dp, chiếm flex weight.
  • Actions:
    • Full-width button "Share" (NeonPink gradient).
    • Row 2 button outlined dưới: "Gallery" (CyberAqua border) + "Create Another" (grey border).
  • Bottom padding 32dp.
┌──────────────────────────────┐
│             🎉               │ ← 48sp
│      Saved Successfully      │ ← 26sp bold
│   You can find it in Gallery │ ← 14sp
├──────────────────────────────┤
│                              │
│    ┌────────────────────┐    │
│    │  [Result Image]    │    │ ← NeonPink border 1.5dp
│    │                    │    │
│    └────────────────────┘    │
│                              │
├──────────────────────────────┤
│  ╔═════════════════════════╗ │
│  ║        ↗  Share         ║ │ ← NeonPink gradient
│  ╚═════════════════════════╝ │
│  ┌──────────┐  ┌──────────┐  │
│  │ Gallery  │  │ Create   │  │ ← outlined
│  │  (cyan)  │  │ Another  │  │
│  └──────────┘  └──────────┘  │
└──────────────────────────────┘

6.16 Settings

  • SettingsHeader: Back button + title "SETTINGS" uppercase.
  • ProfileCard: Card đầu — 2 avatar gradient chồng nhau + tên cặp đôi + badge PRO (nếu Premium). Tap → Couple Profile.
  • SettingsCard sections:
    1. Language (hiện ngôn ngữ hiện tại) + Notifications (toggle switch).
    2. Rate / Share / Terms of Service / Privacy Policy — đều có chevron >.
    3. Version footer (text nhỏ).
  • Card có nền SurfaceDark, border 1dp.
  • Rate dùng popup của Apero Module Rate (5 sao + comment).
┌──────────────────────────────┐
│ ←       SETTINGS             │
├──────────────────────────────┤
│ ┌──────────────────────────┐ │
│ │ (◔)(◔)  Alex & Mia   PRO │ │ ← ProfileCard
│ │         Tap to edit  >   │ │
│ └──────────────────────────┘ │
├──────────────────────────────┤
│ ┌──────────────────────────┐ │
│ │ 🌐  Language       EN  > │ │
│ │ 🔔  Notifications    ⬤── │ │ ← toggle
│ └──────────────────────────┘ │
├──────────────────────────────┤
│ ┌──────────────────────────┐ │
│ │ ⭐  Rate App           > │ │
│ │ ↗   Share App          > │ │
│ │ 📄  Terms of Service   > │ │
│ │ 🔒  Privacy Policy     > │ │
│ └──────────────────────────┘ │
│                              │
│         Version 1.1.0        │
└──────────────────────────────┘

Rate Popup (Apero Module Rate):
   ┌────────────────────┐
   │  Rate AI Couple    │
   │                    │
   │  ☆  ☆  ☆  ☆  ☆     │
   │                    │
   │ ╔════════════════╗ │
   │ ║   Submit       ║ │
   │ ╚════════════════╝ │
   │       Later        │
   └────────────────────┘

6.17 Paywall

  • Top Half (50% chiều cao): Hero image full width, crop.
  • Close Button: Góc trên-phải (36dp circle, nền semi-transparent, border).
  • Bottom Half (overlay gradient transparent → VoidBlack):
    • Title "UNLOCK PRO" 32sp bold.
    • Subtitle 15sp.
    • 2 PriceCards (Weekly + Yearly) — layout ngang: tên gói + chu kỳ trái, giá + per-month phải. Card chọn = NeonGradient border + tinted background.
    • Badge "BEST VALUE" đính trên card Yearly.
    • Benefits section: 4 dòng dấu ✓.
    • Continue button: NeonGradient, có pulsing scale animation.
    • "Cancel anytime" text nhỏ.
    • Row link Terms · Privacy ở giữa.
  • Lưu ý: chỉ có 2 gói (Weekly + Yearly), không có Monthly.
┌──────────────────────────────┐
│ ┌──────────────────────────┐ │
│ │                       ✕  │ │
│ │     [Hero Image]         │ │ ← 50% chiều cao
│ │       crop                │ │
│ │                          │ │
│ └──────────────────────────┘ │
│  ░░░░░ gradient overlay ░░░  │
├──────────────────────────────┤
│         UNLOCK PRO           │ ← 32sp bold
│   Create unlimited magic     │ ← 15sp
│                              │
│  ┌──────────────────────┐    │
│  │ Weekly      $4.99/wk │    │
│  └──────────────────────┘    │
│ ┏━━━━━━━━━━━━━━━━━━━━━━┓BEST│
│ ┃ Yearly      $29.99/yr┃VALUE│ ← gradient border
│ ┃             ~$2.50/mo┃    │
│ ┗━━━━━━━━━━━━━━━━━━━━━━┛    │
│                              │
│  ✓  Unlimited generations    │
│  ✓  No ads                   │
│  ✓  HD download              │
│  ✓  Exclusive styles         │
│                              │
│  ╔═════════════════════════╗ │
│  ║       Continue          ║ │ ← pulsing animation
│  ╚═════════════════════════╝ │
│       Cancel anytime         │
│       Terms · Privacy        │
└──────────────────────────────┘

6.18 Daily Engagement Fullscreen Notification

  • Layout: Activity fullscreen kiểu lock-screen (XML layout activity_daily_engagement_fullscreen).
  • Time Display: Giờ / phút / ngày hiển thị ở các góc kiểu lock-screen.
  • Hero Image: Ảnh teaser lớn ở giữa (1 trong 8 ảnh daily_engagement_lock_img_*.webp).
  • Text: Title + body bên dưới hero.
  • Close Button: Icon X góc trên-phải → dismiss notification + finish activity.
  • Tap anywhere else: Launch SplashActivity (mở app).
┌──────────────────────────────┐
│  20:45                    ✕  │ ← time | close
│  Mon, 19 May                 │
│                              │
│   ┌────────────────────┐     │
│   │                    │     │
│   │  [Hero Teaser]     │     │ ← 1/8 webp
│   │  daily_engagement  │     │
│   │  _lock_img_N.webp  │     │
│   │                    │     │
│   └────────────────────┘     │
│                              │
│   Your daily couple          │
│   moment is ready ✨         │
│   Tap to create now          │
│                              │
│ ─────────────────────────    │
│  Tap anywhere → SplashActivity│
└──────────────────────────────┘

Tổng kết PO quan tâm

Hạng mục Số lượng / Mô tả
Tính năng mới 5 (Daily Notification, Shortcut+Uninstall, Photo Picker, Qwen, Calendar)
AI service mới Qwen Editing
SDK upgrade First Open 4.3.0, Ads 9.0.4, Rate (Apero Module Rate mới)
Ngôn ngữ rà soát text 10 (DE, ES, FR, HI, JA, KO, PT, TH, VI, ZH)
UI redesign Home, Future Baby, Style Browser, Generating, Calendar

Lưu ý cho PO / QA

  • Cần QA full flow First-Open (Splash → Language → Onboarding) sau khi nâng SDK 4.3.0 trên tất cả locale đã rà soát strings.
  • Cần verify Daily Engagement Notification hoạt động đúng schedule và có tracking event đầy đủ.
  • Cần kiểm tra Uninstall Survey trigger đúng khi user gỡ app.
  • Cần verify Ad IDs production trước khi release.

Unresolved questions

  • Có cần viết changelog public (Play Console release notes) song song không?
  • Daily Engagement Notification đã có analytics event tracking chưa?
  • Qwen service đã có quota / fallback khi fail chưa?