| | |
| | | fullscreen_segments = [segment for segment in lane_segments if segment.get("type") == "fullscreen"] |
| | | require([segment.get("label") for segment in fullscreen_segments] == fullscreen_labels, "fullscreen segment reports must match fullscreen labels") |
| | | require(all(segment.get("fullscreenMarkerVisible") is True for segment in fullscreen_segments), "fullscreen segments must expose fullscreen marker") |
| | | require(all(segment.get("fullscreenMarkerKind") == "cornerBracket" for segment in fullscreen_segments), "fullscreen segments must use corner bracket marker") |
| | | require( |
| | | all(segment.get("fullscreenMarkerKind") in {"cornerBracket", "splitViewPair"} for segment in fullscreen_segments), |
| | | "fullscreen segments must use a known fullscreen marker" |
| | | ) |
| | | require(all(segment.get("windowBlockCount") == 0 for segment in fullscreen_segments), "fullscreen segments must not expose floating-window blocks") |
| | | non_fullscreen_segments = [segment for segment in lane_segments if segment.get("type") != "fullscreen"] |
| | | require(all(segment.get("fullscreenMarkerKind") == "none" for segment in non_fullscreen_segments), "non-fullscreen segments must not expose fullscreen marker") |
| | |
| | | marker_frame = segment.get("fullscreenMarkerFrame", {}) |
| | | app_frame = segment.get("appFrame", {}) |
| | | require(isinstance(marker_frame, dict), "fullscreen segments must expose marker frame") |
| | | require(isinstance(app_frame, dict), "fullscreen segments must expose centered App label frame") |
| | | marker_mid_y = marker_frame.get("y", 0) + marker_frame.get("height", 0) / 2 |
| | | app_mid_y = app_frame.get("y", 0) + app_frame.get("height", 0) / 2 |
| | | require(abs(marker_mid_y - app_mid_y) <= 2, "fullscreen App label must be vertically centered in marker") |
| | | if segment.get("fullscreenMarkerKind") == "splitViewPair": |
| | | label_frames = segment.get("splitViewLabelFrames", []) |
| | | require(len(label_frames) == 2, "Split View fullscreen segments must expose two app label frames") |
| | | require( |
| | | segment.get("splitViewAppNames") and len(segment.get("splitViewAppNames")) == 2, |
| | | "Split View fullscreen segments must expose two ordered app names" |
| | | ) |
| | | require( |
| | | label_frames[0].get("x", 0) + label_frames[0].get("width", 0) / 2 |
| | | < marker_frame.get("x", 0) + marker_frame.get("width", 0) / 2 |
| | | < label_frames[1].get("x", 0) + label_frames[1].get("width", 0) / 2, |
| | | "Split View app labels must occupy left and right marker halves" |
| | | ) |
| | | for label_frame in label_frames: |
| | | app_mid_y = label_frame.get("y", 0) + label_frame.get("height", 0) / 2 |
| | | require(abs(marker_mid_y - app_mid_y) <= 2, "Split View App labels must be vertically centered in marker") |
| | | else: |
| | | require(isinstance(app_frame, dict), "fullscreen segments must expose centered App label frame") |
| | | app_mid_y = app_frame.get("y", 0) + app_frame.get("height", 0) / 2 |
| | | require(abs(marker_mid_y - app_mid_y) <= 2, "fullscreen App label must be vertically centered in marker") |
| | | for segment in lane_segments: |
| | | if segment.get("isCurrent") is True: |
| | | require("current" in segment.get("visualStates", []), "current segment must expose current visual state") |