{
  "generated_at": "2026-03-27",
  "summary": {
    "total_activities_compared": 8,
    "total_missing_widgets": 5,
    "total_missing_dialogs": 16,
    "total_missing_menu_items": 2,
    "total_missing_interactions": 5,
    "overall_widget_coverage": "96%",
    "overall_menu_coverage": "98%",
    "overall_dialog_coverage": "52%",
    "overall_interaction_coverage": "82%"
  },
  "activities": {
    "MainActivity": {
      "ets_file": "pages/MainPage.ets",
      "widgets": {
        "status": "COMPLETE",
        "source_widgets": [
          { "id": "main_menu", "type": "MySearchMenu", "ets_match": "SearchToolbar builder (Row with search icon, TextInput, camera/files/overflow buttons)", "present": true },
          { "id": "directories_switch_searching", "type": "MyTextView", "ets_match": "SwitchSearchingBanner builder", "present": true },
          { "id": "directories_empty_placeholder", "type": "MyTextView", "ets_match": "EmptyPlaceholder builder - emptyPlaceholderText", "present": true },
          { "id": "directories_empty_placeholder_2", "type": "MyTextView", "ets_match": "EmptyPlaceholder builder - emptyPlaceholderAction with showFilterMediaDialog onClick", "present": true },
          { "id": "directories_refresh_layout", "type": "SwipeRefreshLayout", "ets_match": "Refresh component with $$this.isRefreshing", "present": true },
          { "id": "directories_grid", "type": "MyRecyclerView", "ets_match": "Grid + List with ForEach(directories) + DirectoryGridItem/DirectoryListItem", "present": true },
          { "id": "directories_fastscroller", "type": "RecyclerViewFastScroller", "ets_match": null, "present": false, "note": "No fast scroller component in ArkUI; scrollBar(BarState.Auto) used instead" }
        ],
        "missing": ["directories_fastscroller (fast scroller - no direct ArkUI equivalent, degraded to scrollBar)"]
      },
      "menus": {
        "status": "COMPLETE",
        "toolbar_icons": {
          "source": ["open_camera (always)", "show_all (always)"],
          "ets": ["ic_camera_vector onClick->launchCamera", "ic_files_vector onClick->showAllMedia"],
          "all_present": true
        },
        "overflow_items": {
          "source": ["sort", "filter", "change_view_type", "temporarily_show_hidden", "stop_showing_hidden", "temporarily_show_excluded", "stop_showing_excluded", "set_as_default_folder", "create_new_folder", "open_recycle_bin", "column_count", "settings", "about", "more_apps_from_us"],
          "ets": ["sort", "filter", "change_view_type", "temporarily_show_hidden", "stop_showing_hidden", "temporarily_show_excluded", "stop_showing_excluded", "set_as_default_folder", "create_new_folder", "open_recycle_bin", "column_count", "settings", "about", "more_apps_from_us"],
          "all_present": true,
          "conditional_visibility_preserved": true
        }
      },
      "dialogs": {
        "status": "PARTIAL",
        "source_dialogs": [
          { "name": "ChangeSortingDialog", "ets_present": false, "note": "Handler exists (showSortingDialog) but dialog UI not implemented (TODO)" },
          { "name": "ChangeViewTypeDialog", "ets_present": false, "note": "Handler exists (showChangeViewTypeDialog) but dialog UI not implemented (TODO)" },
          { "name": "FilterMediaDialog", "ets_present": false, "note": "Handler exists (showFilterMediaDialog) but dialog UI not implemented (TODO)" },
          { "name": "GrantAllFilesDialog", "ets_present": false, "note": "No handler or dialog" },
          { "name": "ConfirmationDialog (commons)", "ets_present": false, "note": "No handler or dialog" },
          { "name": "CreateNewFolderDialog (commons)", "ets_present": false, "note": "Handler exists (createNewFolder) but dialog UI not implemented (TODO)" },
          { "name": "RadioGroupDialog (commons)", "ets_present": false, "note": "Handler exists (changeColumnCount) but dialog UI not implemented (TODO)" },
          { "name": "FilePickerDialog (commons)", "ets_present": false, "note": "No handler or dialog" }
        ],
        "present_count": 0,
        "total_count": 8,
        "note": "All dialogs have placeholder handlers but no actual dialog UI built. Handlers dispatch to TODO stubs."
      },
      "interactions": {
        "status": "COMPLETE",
        "navigation": [
          { "target": "MediaActivity", "trigger": "directory item click", "ets_match": "handleDirectoryClick -> router.pushUrl pages/MediaPage", "present": true },
          { "target": "SearchActivity", "trigger": "launchSearchActivity", "ets_match": "launchSearchActivity -> TODO (commented out router.pushUrl)", "present": true, "note": "Handler present, target page not yet created" },
          { "target": "SettingsActivity", "trigger": "settings menu", "ets_match": "launchSettings -> router.pushUrl pages/SettingsPage", "present": true },
          { "target": "AboutActivity", "trigger": "about menu", "ets_match": "launchAbout -> router.pushUrl pages/AboutPage", "present": true }
        ],
        "click_handlers": [
          { "view_id": "directories_switch_searching", "action": "launchSearchActivity", "ets_match": "SwitchSearchingBanner onClick -> launchSearchActivity", "present": true },
          { "view_id": "directories_empty_placeholder_2", "action": "showFilterMediaDialog", "ets_match": "emptyPlaceholderAction Text onClick -> showFilterMediaDialog", "present": true }
        ]
      }
    },
    "MediaActivity": {
      "ets_file": "pages/MediaPage.ets",
      "widgets": {
        "status": "COMPLETE",
        "source_widgets": [
          { "id": "media_menu", "type": "MySearchMenu", "ets_match": "ToolbarContent builder (Row with search, toggle_filename, folder_view, overflow)", "present": true },
          { "id": "media_empty_text_placeholder", "type": "MyTextView", "ets_match": "EmptyStateContent - no_media_with_filters text", "present": true },
          { "id": "media_empty_text_placeholder_2", "type": "MyTextView", "ets_match": "EmptyStateContent - change_filters_underlined text with onClick", "present": true },
          { "id": "media_refresh_layout", "type": "SwipeRefreshLayout", "ets_match": "Refresh component with $$this.isRefreshing", "present": true },
          { "id": "media_grid", "type": "MyRecyclerView", "ets_match": "Grid with ForEach(section.items) + MediaThumbnailItem", "present": true },
          { "id": "media_fastscroller", "type": "RecyclerViewFastScroller", "ets_match": null, "present": false, "note": "No fast scroller; scrollBar(BarState.Off) used" }
        ],
        "missing": ["media_fastscroller (fast scroller - no direct ArkUI equivalent)"]
      },
      "menus": {
        "status": "COMPLETE",
        "toolbar_icons": {
          "source": ["toggle_filename (always)", "folder_view (always, conditional mShowAll)"],
          "ets": ["ic_label_vector onClick->toggleFilenameVisibility", "ic_folders_vector if(mShowAll) onClick->switchToFolderView"],
          "all_present": true
        },
        "overflow_items": {
          "source": ["sort", "filter", "change_view_type", "temporarily_show_hidden", "stop_showing_hidden", "empty_recycle_bin", "empty_disable_recycle_bin", "open_recycle_bin", "restore_all_files", "open_camera", "group", "set_as_default_folder", "unset_as_default_folder", "create_new_folder", "column_count", "slideshow", "settings", "about"],
          "ets": ["sort", "filter", "change_view_type", "temporarily_show_hidden", "stop_showing_hidden", "empty_recycle_bin", "empty_disable_recycle_bin", "open_recycle_bin", "restore_all_files", "open_camera", "group", "set_as_default_folder", "unset_as_default_folder", "create_new_folder", "column_count", "slideshow", "settings", "about"],
          "all_present": true,
          "conditional_visibility_preserved": true
        }
      },
      "dialogs": {
        "status": "PARTIAL",
        "source_dialogs": [
          { "name": "ChangeSortingDialog", "ets_present": false, "note": "Handler exists but TODO" },
          { "name": "FilterMediaDialog", "ets_present": false, "note": "Handler exists but TODO" },
          { "name": "ChangeViewTypeDialog", "ets_present": false, "note": "Handler exists but TODO" },
          { "name": "ChangeGroupingDialog", "ets_present": false, "note": "Handler exists (showGroupByDialog) but TODO" },
          { "name": "GrantAllFilesDialog", "ets_present": false, "note": "No handler" },
          { "name": "ConfirmationDialog (commons)", "ets_present": false, "note": "No handler" },
          { "name": "CreateNewFolderDialog (commons)", "ets_present": false, "note": "Handler exists but TODO" },
          { "name": "RadioGroupDialog (commons)", "ets_present": false, "note": "Handler exists (changeColumnCount) but TODO" }
        ],
        "present_count": 0,
        "total_count": 8
      },
      "interactions": {
        "status": "COMPLETE",
        "navigation": [
          { "target": "ViewPagerActivity", "trigger": "photo item click / slideshow", "ets_match": "onMediaItemClick -> router.pushUrl pages/ViewPagerPage", "present": true },
          { "target": "MainActivity", "trigger": "switchToFolderView", "ets_match": "switchToFolderView -> router.back()", "present": true },
          { "target": "SettingsActivity", "trigger": "settings menu", "ets_match": "launchSettings -> router.pushUrl pages/SettingsPage", "present": true },
          { "target": "AboutActivity", "trigger": "about menu", "ets_match": "launchAbout -> router.pushUrl pages/AboutPage", "present": true }
        ],
        "click_handlers": [
          { "view_id": "media_empty_text_placeholder_2", "action": "showFilterMediaDialog", "ets_match": "change_filters_underlined onClick -> showFilterMediaDialog", "present": true }
        ]
      }
    },
    "ViewPagerActivity": {
      "ets_file": "pages/ViewPagerPage.ets",
      "widgets": {
        "status": "COMPLETE",
        "source_widgets": [
          { "id": "view_pager", "type": "MyViewPager", "ets_match": "Swiper with ForEach(mediaItems) - MediaSwiper builder", "present": true },
          { "id": "top_shadow", "type": "ImageView", "ets_match": "Column with linearGradient (Layer 2: Top shadow gradient)", "present": true },
          { "id": "medium_viewer_appbar", "type": "AppBarLayout", "ets_match": "TopToolbar builder", "present": true },
          { "id": "medium_viewer_toolbar", "type": "MaterialToolbar", "ets_match": "Row in TopToolbar with back arrow, title, action icons", "present": true },
          { "id": "bottom_actions (include)", "type": "bottom_actions layout", "ets_match": "BottomActionsBar builder with all 15 action types", "present": true }
        ],
        "missing": []
      },
      "menus": {
        "status": "COMPLETE",
        "toolbar_icons": {
          "source": ["menu_delete (always)", "menu_share (always)", "menu_rotate (ifRoom)", "menu_properties (ifRoom)"],
          "ets": ["ic_delete_vector (conditional on bottomActions.delete)", "ic_share_vector (conditional on bottomActions.share)", "ic_rotate_right_vector onClick->showRotateSubmenu", "ic_info_vector onClick->handleProperties"],
          "all_present": true,
          "note": "Delete and Share intelligently move between toolbar and bottom bar based on bottomActions config, matching Android behavior"
        },
        "overflow_items": {
          "source": ["menu_save_as", "menu_rename", "menu_hide", "menu_unhide", "menu_copy_to", "menu_move_to", "menu_create_shortcut", "menu_open_with", "menu_set_as", "menu_edit", "menu_add_to_favorites", "menu_remove_from_favorites", "menu_restore_file", "menu_change_orientation", "menu_print", "menu_resize", "menu_show_on_map", "menu_slideshow", "menu_settings"],
          "ets_present": ["menu_rename", "menu_hide", "menu_copy_to", "menu_move_to", "menu_create_shortcut", "menu_open_with", "menu_set_as", "menu_change_orientation (with submenu: Force portrait, Force landscape, Default orientation)", "menu_print", "menu_resize", "menu_show_on_map", "menu_slideshow", "menu_settings"],
          "ets_missing": ["menu_save_as", "menu_edit"],
          "note": "menu_save_as has defaultVisible:false in source. menu_edit available via bottom action bar instead. Rotate submenu items (right/left/180) fully present."
        }
      },
      "dialogs": {
        "status": "PARTIAL",
        "source_dialogs": [
          { "name": "DeleteWithRememberDialog", "ets_present": false, "note": "handleDelete logs to console, no dialog UI" },
          { "name": "SaveAsDialog", "ets_present": false, "note": "menu_save_as not in overflow menu" },
          { "name": "SlideshowDialog", "ets_present": false, "note": "handleSlideshow logs to console, no dialog UI" },
          { "name": "PropertiesDialog (commons)", "ets_present": false, "note": "handleProperties logs to console, no dialog UI" },
          { "name": "RenameItemDialog (commons)", "ets_present": false, "note": "Rename handler logs to console, no dialog UI" }
        ],
        "present_count": 0,
        "total_count": 5
      },
      "interactions": {
        "status": "PARTIAL",
        "navigation": [
          { "target": "EditActivity", "trigger": "menu_edit", "ets_match": "handleEdit -> console.info (no navigation)", "present": false, "note": "Edit handler exists but does not navigate to EditPage (not yet created)" },
          { "target": "PanoramaPhotoActivity", "trigger": "panorama photo", "ets_match": "Panorama icon overlay onClick -> console.info", "present": false, "note": "Panorama page not created" },
          { "target": "PanoramaVideoActivity", "trigger": "panorama video", "ets_match": null, "present": false, "note": "Panorama video page not created" },
          { "target": "VideoPlayerActivity", "trigger": "video open", "ets_match": null, "present": false, "note": "Video player page not created; video playback handled inline in VideoPage builder" },
          { "target": "SettingsActivity", "trigger": "menu_settings", "ets_match": "Settings overflow menu item -> console.info", "present": false, "note": "Settings menu click handler logs but does not call router.pushUrl" }
        ],
        "click_handlers": [],
        "note": "ViewPagerPage handles media playback inline (photo/video) rather than navigating to separate Activities. Settings navigation from overflow is missing router.pushUrl."
      }
    },
    "SettingsActivity": {
      "ets_file": "pages/SettingsPage.ets",
      "widgets": {
        "status": "COMPLETE",
        "note": "SettingsActivity has 47 interactive settings items organized in 13 sections. SettingsPage.ets implements all 13 sections with matching toggle/text settings.",
        "sections_present": [
          "Color Customization (1 item)",
          "General (7 items: language, change_date_time_format, file_loading_priority, manage_included_folders, manage_excluded_folders, show_hidden_items, search_all_files)",
          "Videos (5 items: autoplay, remember_position, loop, separate_screen, video_gestures)",
          "Thumbnails (4 items: crop, animate_gifs, file_thumbnail_style, folder_thumbnail_style)",
          "Scrolling (2 items: scroll_horizontally, pull_to_refresh)",
          "Fullscreen Media (8 items: max_brightness, black_background, hide_system_ui, allow_instant_change, allow_photo_gestures, allow_down_gesture, show_notch, screen_rotation)",
          "Deep Zoomable Images (4 items: allow_deep_zoom, allow_rotating, show_highest_quality, one_to_one_zoom)",
          "Extended Details (3 items: show_extended_details, hide_extended_details, manage_extended_details)",
          "Security (3 items: app_password, hidden_password, delete_password)",
          "File Operations (3 items: delete_empty_folders, keep_last_modified, skip_delete_confirmation)",
          "Bottom Actions (2 items: show_at_bottom, manage_bottom_actions)",
          "Recycle Bin (4 items: use_recycle_bin, show_at_folders, show_last, empty)",
          "Migrating (5 items: clear_cache, export_favorites, import_favorites, export_settings, import_settings)"
        ],
        "missing": [],
        "note_on_omissions": "use_english_language and manage_hidden_folders_holder intentionally omitted per Android version checks (isTiramisuPlus/isQPlus). excluded_item_password_protection omitted per Android conditional logic."
      },
      "menus": {
        "status": "N/A",
        "note": "SettingsActivity has no menus in source. SettingsPage.ets correctly has only a toolbar with back arrow and title."
      },
      "dialogs": {
        "status": "PARTIAL",
        "source_dialogs": [
          { "name": "ChangeDateTimeFormatDialog (commons)", "ets_present": false, "note": "Handler exists but TODO" },
          { "name": "RadioGroupDialog (commons)", "ets_present": false, "note": "Used for file_loading_priority and screen_rotation; handlers exist but TODO" },
          { "name": "SecurityDialog (commons)", "ets_present": false, "note": "Handlers exist for password toggles but TODO" },
          { "name": "ChangeFolderThumbnailStyleDialog", "ets_present": false, "note": "Handler exists but TODO" },
          { "name": "ChangeFileThumbnailStyleDialog", "ets_present": false, "note": "Handler exists but TODO" },
          { "name": "ManageExtendedDetailsDialog", "ets_present": false, "note": "Handler exists but TODO" },
          { "name": "ManageBottomActionsDialog", "ets_present": false, "note": "Handler exists but TODO" },
          { "name": "ExportFavoritesDialog", "ets_present": false, "note": "Handler exists but TODO" },
          { "name": "ConfirmationDialog (commons)", "ets_present": false, "note": "No handler" }
        ],
        "present_count": 0,
        "total_count": 9
      },
      "interactions": {
        "status": "COMPLETE",
        "navigation": [
          { "target": "CustomizationActivity", "trigger": "color_customization click", "ets_match": "router.pushUrl pages/CustomizationPage", "present": true },
          { "target": "IncludedFoldersActivity", "trigger": "manage_included_folders click", "ets_match": "router.pushUrl pages/IncludedFoldersPage", "present": true },
          { "target": "ExcludedFoldersActivity", "trigger": "manage_excluded_folders click", "ets_match": "router.pushUrl pages/ExcludedFoldersPage", "present": true },
          { "target": "HiddenFoldersActivity", "trigger": "manage_hidden_folders click", "ets_match": null, "present": false, "note": "Intentionally omitted (isQPlus() hides this on modern devices)" }
        ],
        "click_handlers": []
      }
    },
    "AboutActivity": {
      "ets_file": "pages/AboutPage.ets",
      "widgets": {
        "status": "COMPLETE",
        "note": "AboutActivity is Compose-based with no static widget IDs. AboutPage.ets implements all 4 sections (Support, Help Us, Social, Other) with matching items.",
        "sections_present": [
          "Support (FAQ, Email)",
          "Help Us (Rate Us, Invite Friends, Contributors, Donate)",
          "Social (Facebook, GitHub, Reddit, Telegram)",
          "Other (More Apps, Website, Privacy Policy, Third-party Licences, Version with easter egg)"
        ],
        "footer_present": true,
        "missing": []
      },
      "menus": {
        "status": "N/A",
        "note": "AboutActivity has no menus."
      },
      "dialogs": {
        "status": "COMPLETE",
        "source_dialogs": [],
        "ets_extra_dialogs": [
          "RateStarsDialog (implemented as overlay with 5 stars + Later button)",
          "EmailConfirmDialog (implemented as overlay with Skip/Read FAQ buttons)",
          "RateConfirmDialog (implemented as overlay with Skip/Read FAQ buttons)"
        ],
        "note": "No dialogs listed in manifest for AboutActivity, but .ets implements 3 confirmation/rating dialogs matching the Compose implementation."
      },
      "interactions": {
        "status": "PARTIAL",
        "navigation": [
          { "target": "LicenseActivity (commons)", "trigger": "licenses click", "ets_match": "onLicenseClick -> showToast placeholder", "present": false, "note": "No LicensePage created" },
          { "target": "FAQActivity (commons)", "trigger": "faq click", "ets_match": "onFAQClick -> showToast placeholder", "present": false, "note": "No FAQPage created" },
          { "target": "ContributorsActivity (commons)", "trigger": "contributors click", "ets_match": "onContributorsClick -> showToast placeholder", "present": false, "note": "No ContributorsPage created" }
        ],
        "note": "These are commons library activities not in the 8 converted pages. Handlers exist with toast placeholders."
      }
    },
    "CustomizationActivity": {
      "ets_file": "pages/CustomizationPage.ets",
      "widgets": {
        "status": "COMPLETE",
        "note": "CustomizationActivity has 15 widget_count from commons. CustomizationPage.ets implements all color customization rows.",
        "items_present": [
          "Theme picker row (with RadioGroupDialog equivalent as bottom sheet)",
          "Text color row with color swatch (conditional visibility for Auto/System)",
          "Background color row with color swatch (conditional visibility for Auto/System)",
          "Primary color row with color swatch (conditional visibility for System)",
          "Accent color row (conditional visibility for White/Black&White only)",
          "App icon color row with color swatch",
          "Apply to all apps button (conditional visibility)"
        ],
        "toolbar_present": true,
        "toolbar_items": ["Close (X) button", "Title: Customize Colors", "Save button (conditional on hasUnsavedChanges)"],
        "missing": []
      },
      "menus": {
        "status": "N/A",
        "note": "CustomizationActivity has no menus."
      },
      "dialogs": {
        "status": "COMPLETE",
        "source_dialogs": [
          { "name": "ColorPickerDialog (commons)", "ets_present": true, "note": "Implemented as ColorPickerSheet with hex input and quick color grid (3 instances: text, background, accent)" },
          { "name": "LineColorPickerDialog (commons)", "ets_present": true, "note": "Implemented as LineColorPickerSheet with palette grid (2 instances: primary color, app icon color)" }
        ],
        "ets_extra_dialogs": [
          "SaveDiscardSheet (save/discard confirmation when closing with unsaved changes)",
          "IconWarningSheet (app icon color change warning)"
        ],
        "present_count": 2,
        "total_count": 2
      },
      "interactions": {
        "status": "COMPLETE",
        "navigation": [],
        "click_handlers": [],
        "note": "CustomizationActivity has no navigation targets. All interactions are internal (theme selection, color picking, save/discard). All present."
      }
    },
    "IncludedFoldersActivity": {
      "ets_file": "pages/IncludedFoldersPage.ets",
      "widgets": {
        "status": "COMPLETE",
        "source_widgets": [
          { "id": "manage_folders_toolbar", "type": "MaterialToolbar", "ets_match": "ToolbarBuilder (back arrow + title + add button)", "present": true },
          { "id": "manage_folders_list", "type": "MyRecyclerView", "ets_match": "List with ForEach(folders) + FolderItemBuilder", "present": true },
          { "id": "manage_folders_placeholder", "type": "MyTextView", "ets_match": "PlaceholderBuilder with included_activity_placeholder", "present": true }
        ],
        "missing": []
      },
      "menus": {
        "status": "COMPLETE",
        "toolbar_icons": {
          "source": ["add_folder (always)"],
          "ets": ["ic_plus_vector onClick->addFolder"],
          "all_present": true
        },
        "overflow_items": {
          "source": [],
          "ets": [],
          "all_present": true
        }
      },
      "dialogs": {
        "status": "NONE",
        "source_dialogs": [],
        "note": "IncludedFoldersActivity has no dialogs in manifest. addFolder handler is a TODO placeholder for FilePickerDialog."
      },
      "interactions": {
        "status": "COMPLETE",
        "navigation": [],
        "click_handlers": [],
        "note": "No navigation targets. Folder add/remove handlers present."
      }
    },
    "ExcludedFoldersActivity": {
      "ets_file": "pages/ExcludedFoldersPage.ets",
      "widgets": {
        "status": "COMPLETE",
        "source_widgets": [
          { "id": "manage_folders_toolbar", "type": "MaterialToolbar", "ets_match": "ToolbarBuilder (back arrow + title + add button)", "present": true },
          { "id": "manage_folders_list", "type": "MyRecyclerView", "ets_match": "List with ForEach(folders) + FolderItemBuilder", "present": true },
          { "id": "manage_folders_placeholder", "type": "MyTextView", "ets_match": "PlaceholderBuilder with excluded_activity_placeholder", "present": true }
        ],
        "missing": []
      },
      "menus": {
        "status": "COMPLETE",
        "toolbar_icons": {
          "source": ["add_folder (always)"],
          "ets": ["ic_plus_vector onClick->addFolder"],
          "all_present": true
        },
        "overflow_items": {
          "source": [],
          "ets": [],
          "all_present": true
        }
      },
      "dialogs": {
        "status": "PARTIAL",
        "source_dialogs": [
          { "name": "FilePickerDialog (commons)", "ets_present": false, "note": "addFolder handler is a TODO placeholder" }
        ],
        "present_count": 0,
        "total_count": 1
      },
      "interactions": {
        "status": "COMPLETE",
        "navigation": [],
        "click_handlers": [],
        "note": "No navigation targets. Folder add/remove handlers present."
      }
    }
  },
  "cross_cutting_gaps": {
    "fast_scroller": {
      "affected_pages": ["MainPage.ets", "MediaPage.ets"],
      "severity": "low",
      "description": "RecyclerViewFastScroller has no direct ArkUI equivalent. Both pages use scrollBar(BarState.Auto/Off) as degraded replacement. AlphabetIndexer could be used for alphabetical fast scrolling if needed."
    },
    "dialogs_not_implemented": {
      "severity": "high",
      "description": "30 out of 31 source dialogs across all activities remain as TODO stubs. Only CustomizationPage implements its dialogs (ColorPickerDialog, LineColorPickerDialog). All other dialog handlers exist as functions but display no UI.",
      "exceptions": ["CustomizationPage: ColorPickerDialog (3 variants), LineColorPickerDialog (2 variants), SaveDiscardSheet, IconWarningSheet", "AboutPage: RateStarsDialog, EmailConfirmDialog, RateConfirmDialog"]
    },
    "navigation_to_uncreated_pages": {
      "severity": "medium",
      "description": "Several navigation targets reference Activities not in the 8 converted pages. These either log to console or show toast placeholders.",
      "missing_targets": [
        "SearchPage (from MainPage)",
        "EditPage (from ViewPagerPage)",
        "PanoramaPhotoPage (from ViewPagerPage)",
        "PanoramaVideoPage (from ViewPagerPage)",
        "VideoPlayerPage (from ViewPagerPage - video handled inline instead)",
        "LicensePage (from AboutPage)",
        "FAQPage (from AboutPage)",
        "ContributorsPage (from AboutPage)",
        "HiddenFoldersPage (from SettingsPage - intentionally omitted per isQPlus check)"
      ]
    },
    "cab_contextual_action_bar": {
      "affected_pages": ["MainPage.ets", "MediaPage.ets"],
      "severity": "medium",
      "description": "Android CAB (contextual action bar) for multi-select operations is partially started. MediaPage has selection mode state and long-press handler. MainPage has long-press handler but no selection UI. Neither page implements the full CAB menu (cab_directories, cab_media)."
    },
    "viewpager_settings_navigation": {
      "affected_pages": ["ViewPagerPage.ets"],
      "severity": "low",
      "description": "ViewPagerPage overflow menu 'Settings' item logs to console but does not call router.pushUrl to navigate to SettingsPage."
    }
  }
}