diff --git a/tests/check-convergence-dock-invariant.sh b/tests/check-convergence-dock-invariant.sh index 94a5c653..53fdbf58 100644 --- a/tests/check-convergence-dock-invariant.sh +++ b/tests/check-convergence-dock-invariant.sh @@ -17,6 +17,13 @@ action_content="$repo_root/components/mobileshell/qml/actiondrawer/private/Conte action_landscape="$repo_root/components/mobileshell/qml/actiondrawer/private/LandscapeContentContainer.qml" quick_settings="$repo_root/components/mobileshell/qml/actiondrawer/private/QuickSettings.qml" quick_settings_panel="$repo_root/components/mobileshell/qml/actiondrawer/private/QuickSettingsPanel.qml" +base_item="$repo_root/components/mobileshell/qml/components/BaseItem.qml" +notification_popup_manager="$repo_root/components/mobileshell/qml/popups/notifications/NotificationPopupManager.qml" +notification_popup="$repo_root/components/mobileshell/qml/popups/notifications/NotificationPopup.qml" +notification_popup_item="$repo_root/components/mobileshell/qml/widgets/notifications/NotificationPopupItem.qml" +notification_card="$repo_root/components/mobileshell/qml/widgets/notifications/NotificationCard.qml" +notification_drawer="$repo_root/components/mobileshell/qml/actiondrawer/private/NotificationDrawer.qml" +notifications_widget="$repo_root/components/mobileshell/qml/widgets/notifications/NotificationsWidget.qml" require_line() { local file="$1" @@ -65,6 +72,11 @@ require_line "$folio_main" "readonly property real popupBottomY: parent.height" require_line "$folio_main" "- MobileShell.Constants.convergenceWorkspaceFrameThickness" require_line "$folio_main" "readonly property real popupHeight: Math.max(0, popupBottomY - popupTopY)" require_line "$folio_main" "? popupTopY + animationY" +require_line "$folio_main" "id: drawerSurface" +require_line "$folio_main" "readonly property real bodyWidth: Math.max(0, powerPanel.x + powerPanel.width - overlayDrawer.x)" +require_line "$folio_main" "readonly property real cornerRadius: Math.min(MobileShell.Constants.convergenceWorkspaceFrameRadius" +require_line "$folio_main" "PathArc { x: drawerSurface.bodyWidth; y: drawerSurfacePath.cornerRadius; radiusX: drawerSurfacePath.cornerRadius; radiusY: drawerSurfacePath.cornerRadius; direction: PathArc.Counterclockwise }" +require_line "$folio_main" "PathArc { x: drawerSurface.bodyWidth + drawerSurfacePath.cornerRadius; y: drawerSurface.height; radiusX: drawerSurfacePath.cornerRadius; radiusY: drawerSurfacePath.cornerRadius; direction: PathArc.Counterclockwise }" require_line "$folio_home" "height: ShellSettings.Settings.convergenceModeEnabled ? MobileShell.Constants.convergenceDockHeight : Kirigami.Units.gridUnit * 6" require_line "$folio_home" "&& !ShellSettings.Settings.convergenceModeEnabled" require_line "$folio_backend" "Q_PROPERTY(bool overviewActive READ overviewActive NOTIFY overviewActiveChanged)" @@ -92,16 +104,32 @@ if ! awk ' exit 1 fi -require_line "$action_content" "readonly property real convergenceSurfaceTopInset: MobileShell.Constants.topPanelHeight" +require_line "$action_content" "readonly property real convergenceSurfaceTopInset: MobileShell.Constants.topPanelHeight + convergenceFrameThickness" require_line "$action_content" "readonly property real convergenceSurfaceBottomInset: MobileShell.Constants.convergenceDockHeight + convergenceFrameThickness" require_line "$action_content" "readonly property real convergenceSurfaceSideInset: 0" +require_line "$action_content" "visible: actionDrawer.intendedToBeVisible" require_line "$action_content" "topMargin: isConvergence ? root.convergenceSurfaceTopInset : 0" require_line "$action_content" "leftMargin: actionDrawer.mode == MobileShell.ActionDrawer.Portrait ? 0 : (isConvergence ? root.convergenceSurfaceSideInset" require_line "$action_content" "maximumHeight: isConvergence ? root.convergenceSurfaceHeight * 0.6 : -1" -require_line "$action_landscape" "readonly property real convergenceSurfaceTopInset: MobileShell.Constants.topPanelHeight" +if grep -Fq "visible: !isConvergence" "$action_content"; then + echo "NotificationDrawer must remain visible in convergence so the action drawer shows notification history" >&2 + exit 1 +fi +if grep -Fq "visible: actionDrawer.intendedToBeVisible && !root.isConvergence" "$action_content"; then + echo "Clear-all notification toolbar must remain visible in convergence" >&2 + exit 1 +fi + +require_line "$action_landscape" "readonly property real convergenceSurfaceTopInset: MobileShell.Constants.topPanelHeight + convergenceFrameThickness" require_line "$action_landscape" "readonly property real convergenceSurfaceBottomInset: MobileShell.Constants.convergenceDockHeight + convergenceFrameThickness" require_line "$action_landscape" "readonly property real convergenceSurfaceSideInset: 0" +require_line "$action_landscape" "import QtQuick.Shapes 1.8" +require_line "$action_landscape" "id: actionDrawerSurface" +require_line "$action_landscape" "x: quickSettingsPanel.x - cornerRadius" +require_line "$action_landscape" "readonly property real bodyWidth: quickSettingsPanel.width" +require_line "$action_landscape" "PathArc { x: actionDrawerSurfacePath.cornerRadius; y: actionDrawerSurfacePath.cornerRadius; radiusX: actionDrawerSurfacePath.cornerRadius; radiusY: actionDrawerSurfacePath.cornerRadius; direction: PathArc.Clockwise }" +require_line "$action_landscape" "PathArc { x: 0; y: actionDrawerSurface.height; radiusX: actionDrawerSurfacePath.cornerRadius; radiusY: actionDrawerSurfacePath.cornerRadius; direction: PathArc.Clockwise }" require_line "$action_landscape" "anchors.topMargin: isConvergence ? restingTopMargin" require_line "$action_landscape" "anchors.rightMargin: isConvergence ? root.convergenceSurfaceSideInset : 0" require_line "$action_landscape" "fullScreenHeight: quickSettingsPanel.availableHeight" @@ -109,15 +137,52 @@ require_line "$action_landscape" "fullScreenHeight: quickSettingsPanel.available require_line "$quick_settings_panel" "readonly property bool isConvergence: ShellSettings.Settings.convergenceModeEnabled" require_line "$quick_settings_panel" "readonly property real panelPadding: isConvergence ? Kirigami.Units.smallSpacing : Kirigami.Units.smallSpacing * 4" require_line "$quick_settings_panel" "anchors.margins: root.isConvergence ? 0 : Kirigami.Units.largeSpacing" +require_line "$quick_settings_panel" "visible: !root.isConvergence" require_line "$quick_settings_panel" "panelType: root.isConvergence ? MobileShell.PanelBackground.PanelType.Flat : MobileShell.PanelBackground.PanelType.Base" require_line "$quick_settings_panel" "radius: root.isConvergence ? 0 : Kirigami.Units.cornerRadius" +require_line "$base_item" "implicitHeight: topPadding + bottomPadding + (contentItem ? contentItem.implicitHeight : 0)" +require_line "$base_item" "implicitWidth: leftPadding + rightPadding + (contentItem ? contentItem.implicitWidth : 0)" + require_line "$quick_settings" "id: convergenceFlow" require_line "$quick_settings" "visible: root.isConvergence" require_line "$quick_settings" "visible: !root.isConvergence" require_line "$quick_settings" "active: !root.isConvergence && swipeView.count > 1 ? true: false" -frame_arc_count="$(grep -F "PathArc {" "$folio_main" | wc -l)" +if grep -Fq "id: convergenceNotificationHistory" "$quick_settings"; then + echo "Convergence notification history must not consume quick-settings stack height" >&2 + exit 1 +fi + +if grep -Fq "NotificationHistoryPopup" "$quick_settings"; then + echo "Notification history must use the in-drawer NotificationDrawer, not a separate popup" >&2 + exit 1 +fi + +require_line "$notification_popup_manager" "readonly property real convergencePopupMargin: MobileShell.Constants.convergenceWorkspaceFrameThickness + Kirigami.Units.largeSpacing" +require_line "$notification_popup_manager" "readonly property real convergencePopupBottomInset: MobileShell.Constants.convergenceDockHeight + MobileShell.Constants.convergenceWorkspaceFrameThickness + Kirigami.Units.largeSpacing" +require_line "$notification_popup_manager" "let regionY = (currentPopup ? currentPopup.effectiveOpenOffset : Screen.height - notificationPopupManager.convergencePopupBottomInset - popupHeight)" +require_line "$notification_popup_manager" "convergenceBottomInset: notificationPopupManager.convergencePopupBottomInset" +require_line "$notification_popup_manager" "? (notificationPopupManager.width - width - notificationPopupManager.convergencePopupMargin)" +require_line "$notification_popup" "property real convergenceBottomInset: openOffset" +require_line "$notification_popup" "? (Screen.height - convergenceBottomInset - popupHeight)" +require_line "$notification_popup_item" "icon.name: \"window-close\"" +require_line "$notification_popup_item" "text: i18n(\"Dismiss\")" +require_line "$notification_card" "if (!contentItem) {" +require_line "$notification_drawer" "emptyText: ShellSettings.Settings.convergenceModeEnabled ? i18n(\"No notifications\") : \"\"" +require_line "$notifications_widget" "property string emptyText: \"\"" + +if grep -Fq "notificationItem.close();" "$notification_popup_item"; then + echo "Popup dismissals must expire the popup instead of closing notification history" >&2 + exit 1 +fi + +if grep -Fq "contentParent.children.push(contentItem);" "$notification_card"; then + echo "NotificationCard content is already parented by assignment; do not push it into children again" >&2 + exit 1 +fi + +frame_arc_count="$(grep -F "PathArc { x: workspaceFrame." "$folio_main" | wc -l)" if [[ "$frame_arc_count" -ne 4 ]]; then echo "Expected the workspace frame cutout to have four rounded inner corners; found $frame_arc_count arcs" >&2 exit 1