# cOS screenshot coverage

Branch `dev`, base `d0cf8d304611c29946cd778f8af6d7ac885065c3`, version `v1.2.0`.

**52 source screen widgets, 185 scenarios, 370 screenshots.**

Real Flutter widgets rendered with controlled in-memory fixtures. Flow maps describe visual sequences; backend transitions were not exercised.

## Limits

- Màn hình đăng nhập Microsoft và luồng backend thực tế cần phiên đăng nhập trực tiếp (live session).
- Nội dung WebView là dữ liệu giả lập; ảnh chụp chỉ phản ánh khung giao diện (chrome) do app làm chủ.
- Camera, microphone, sinh trắc học, quyền hệ điều hành, thông báo đẩy (push), luồng WebRTC và giải mã video cần test trên thiết bị thật.
- Các màn hình xem file/media cục bộ dùng renderer native của widget test khi xuất ảnh; bản web preview hiển thị thông báo thay thế.
- Hiệu ứng phủ mờ giả lập, font chữ fallback (Roboto) và việc ẩn thanh điều hướng/trạng thái hệ điều hành có thể khác biệt so với máy Android thật.
- Bộ ảnh chỉ bao quát các kịch bản giao diện đã chỉ định, không bao gồm toàn bộ mọi tổ hợp dữ liệu, quyền hạn, ngôn ngữ hay trợ năng.

## Screen inventory

| Widget | Source | States | PNGs |
|---|---|---|---|
| MobileSignInScreen | `lib/auth/mobile/mobile_sign_in_screen.dart` | authorizing | 2 |
| PasswordSignInScreen | `lib/auth/password/password_sign_in_screen.dart` | initial, filled, validation, busy, error | 10 |
| SignInPage | `lib/auth/sign_in_page.dart` | initial, agreed, agreement-required, developer, estate-picker | 10 |
| SigningInScreen | `lib/auth/signing_in_screen.dart` | loading | 2 |
| CallHistoryPage | `lib/features/calls/call_history_page.dart` | empty, loading, error, content | 8 |
| CallPage | `lib/features/calls/call_page.dart` | ringingOutgoing, ringingIncoming, connecting, connected, reconnecting, ended | 12 |
| AiworkTab | `lib/features/chat/aiwork/aiwork_tab.dart` | content, empty, error | 6 |
| ChatHomePage | `lib/features/chat/chat_home.dart` | content, loading, empty, error | 8 |
| ThreadPage | `lib/features/chat/chat_home.dart` | content, loading, empty, pending, failed, deleted, locked-message, reactions, agent-streaming, agent-error, markdown | 22 |
| GlobalSearchPage | `lib/features/chat/conversation_list/global_search_page.dart` | initial, content, empty, error | 8 |
| AttachmentViewerPage | `lib/features/chat/details/attachment_viewer_page.dart` | content | 2 |
| ConversationDetailsPage | `lib/features/chat/details/conversation_details_page.dart` | content, loading, error, scrolled | 8 |
| GroupSettingsPage | `lib/features/chat/details/group_settings_page.dart` | content, empty, welcome-editor, history-picker, visibility-picker | 10 |
| MemberListPage | `lib/features/chat/details/member_list_page.dart` | content, empty | 4 |
| MemberPickerPage | `lib/features/chat/details/member_picker_page.dart` | content, empty, error | 6 |
| NewConversationPage | `lib/features/chat/details/new_conversation_page.dart` | content, encrypted, agent | 6 |
| ParticipantPickerPage | `lib/features/chat/details/participant_picker_page.dart` | content, empty, error, group | 8 |
| GroupsInCommonPage | `lib/features/chat/details/peer_group_pages.dart` | content, empty | 4 |
| AddToGroupPage | `lib/features/chat/details/peer_group_pages.dart` | content, empty, error | 6 |
| SharedContentPage | `lib/features/chat/details/shared_content_page.dart` | empty, error, content, locked | 20 |
| ThreadListPage | `lib/features/chat/details/thread_list_page.dart` | empty, error, content | 6 |
| AgentReplyFullScreenPage | `lib/features/chat/thread/agent_reply_full_screen.dart` | content | 2 |
| FilePreviewPage | `lib/features/chat/thread/attachments/file_preview_page.dart` | content, error | 4 |
| ImageViewerPage | `lib/features/chat/thread/attachments/image_viewer_page.dart` | content, loading, error | 6 |
| VideoPlayerPage | `lib/features/chat/thread/attachments/video_player_page.dart` | content, loading, error | 6 |
| ConversationSearchPage | `lib/features/chat/thread/conversation_search_page.dart` | initial, empty, error | 6 |
| DiscussionPage | `lib/features/chat/thread/discussion/discussion_page.dart` | content, empty | 4 |
| EmbedDeepLinkPage | `lib/features/chat/thread/embed/embed_deep_link_page.dart` | content | 2 |
| ScreenPreviewPage | `lib/features/chat/thread/markdown/screen_preview_page.dart` | content | 2 |
| MessageInfoSheet | `lib/features/chat/thread/message_info_sheet.dart` | content, empty | 4 |
| PollCreateSheet | `lib/features/chat/thread/poll/poll_create_sheet.dart` | initial | 2 |
| StickerPickerSheet | `lib/features/chat/thread/sticker/sticker_picker_sheet.dart` | empty, loading | 4 |
| StickerStoreSheet | `lib/features/chat/thread/sticker/sticker_store_sheet.dart` | empty | 2 |
| AdminWebPage | `lib/features/settings/admin_section.dart` | users, roles, apps, feature-flags | 8 |
| AppearancePage | `lib/features/settings/appearance_page.dart` | content | 2 |
| SettingsAppsPage | `lib/features/settings/apps_section.dart` | empty, content | 4 |
| AvatarEditorPage | `lib/features/settings/avatar_editor.dart` | content | 2 |
| DataAndStoragePage | `lib/features/settings/data_and_storage_page.dart` | content, scrolled, auto-cellular, auto-wifi | 8 |
| DataUsagePage | `lib/features/settings/data_usage_page.dart` | empty | 2 |
| DebugLogPage | `lib/features/settings/debug_log_page.dart` | empty | 2 |
| EncryptionPage | `lib/features/settings/encryption_page.dart` | locked, unlocked, unenrolled, error, unlock-dialog, enroll-dialog | 12 |
| NotificationSettingsPage | `lib/features/settings/notifications/notification_settings_page.dart` | content, scrolled | 4 |
| NotificationSoundPage | `lib/features/settings/notifications/notification_sound_page.dart` | content | 2 |
| NotificationTypePage | `lib/features/settings/notifications/notification_type_page.dart` | content | 6 |
| PowerSavingPage | `lib/features/settings/power/power_saving_page.dart` | content, on | 4 |
| SessionsPage | `lib/features/settings/sessions_page.dart` | content, empty, loading, error, revoke-dialog | 10 |
| SettingsPage | `lib/features/settings/settings_page.dart` | content, scrolled, language-picker, sign-out-dialog | 8 |
| StickersEmojiPage | `lib/features/settings/stickers_emoji_page.dart` | content | 2 |
| StoragePage | `lib/features/settings/storage_page.dart` | empty, content | 4 |
| TokensPage | `lib/features/settings/tokens_page.dart` | content, empty, loading, error, create-dialog | 10 |
| ComingSoonPage | `lib/features/shell/coming_soon_page.dart` | content | 2 |
| MiniAppPage | `lib/miniapp/miniapp_page.dart` | content, maintenance, premiere | 6 |
