Skip to content

feat: menu as an 8 / 4 / 4 grid with words; debug page Info Off by default (#174, #176, #177) - #178

Merged
compot-dev merged 6 commits into
v2from
feat/menu-grid-177
Oct 14, 2026
Merged

compot-dev merged 6 commits into
v2from
feat/menu-grid-177

Conversation

@compot-dev

Copy link
Copy Markdown
Collaborator

Replaces #175 (its commits are included).

Menu (#177)

[ 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 ]
[ Settings | WebUI  | Grid   | Slides ]
[ Exit     | Reset  | Debug  | UDP    ]

Debug page (#174): Info Off until switched on; the snapshot interval default stays 5 s.

README (EN/RU/ZH) menu section and LABORATORY's menu notes updated. Version 2.06.

Closes #174
Closes #176
Closes #177

@compot-dev

Copy link
Copy Markdown
Collaborator Author

/review

@qodo-free-for-open-source-projects

qodo-free-for-open-source-projects Bot commented Oct 14, 2026 •

Copy link
Copy Markdown

Code Review by Qodo

🐞 Bugs (0) 📘 Rule violations (0) 📎 Requirement gaps (1) 🎨 UX issues (0) 🔗 Cross-repo conflicts (0) 📜 Skill insights (0)

Grey Divider


Action required

1. Remote navigation stops at grey cells 📎 Requirement gap ≡ Correctness
Description
linkRemote sends slots 1–4 directly to the Settings and WebUI cells, while
setSingleViewItems(false) makes those cells disabled and unfocusable. In multi-view or UDP view,
pressing Down from those slots therefore cannot reach the lower rows, so the remote cannot navigate
through the full menu grid.
Code

android/app/src/main/java/com/openipc/decoder/MenuManager.java[R277-280]

+        setSingleViewItems(single);
+        linkRemote(camButtons,
+                new TextView[]{mSettingsBtn, mWebUiBtn, quadBtn, slidesBtn},
+                new TextView[]{exit, reset, statsBtn, udpBtn});
Evidence
The navigation links assign each slot's Down target using mid[i / 2], so slots 1–2 target Settings
and slots 3–4 target WebUI. The same change disables and removes focus from those cells outside
single view, leaving those remote paths with no reachable target.

Support remote menu navigation and dismissal
android/app/src/main/java/com/openipc/decoder/MenuManager.java[394-400]
android/app/src/main/java/com/openipc/decoder/MenuManager.java[407-418]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
Remote navigation maps slots 1–4 to the disabled Settings and WebUI cells, which prevents focus from moving into the lower menu rows in multi-view and UDP view.
## Fix Focus Areas
- android/app/src/main/java/com/openipc/decoder/MenuManager.java[394-400]
- android/app/src/main/java/com/openipc/decoder/MenuManager.java[407-418]
## Recommended Fix
Configure explicit directional focus links that bypass disabled Settings and WebUI cells, or make the navigation logic advance past disabled targets while keeping those cells visible, grey, and non-activatable.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools



Informational

2. Test notes give the wrong version for the new menu ✓ Resolved
Description
LABORATORY.md says the grid menu begins in 2.07 and earlier builds use Q, although this PR sets
versionName "2.06" and ships the grid menu in that release. On 2.06 builds, the grid-to-single
procedure points testers to Q instead of Grid, while the remote check still says the menu opens on
“slot, Q or U” and DPAD_DOWN reaches Exit rather than the Settings, WebUI, Grid or Slides cell
below the slot.
Code

LABORATORY.md[262]

+- Filling slots on the box: tap a menu button by its text rather than by coordinates (from 2.07 the menu is a grid: slots `1`–`8` on top, then `Settings WebUI Grid Slides`, then `Exit Reset Debug UDP`, #177): `uiautomator dump`, take the `bounds` of `text="N"`, `input tap` its centre; the URL dialog of a slot: **Settings** (single view only) → `TCP` / `UDP` / `Auto` / `Multicast` → `SAVE`.
Evidence
The changed build configuration names this release 2.06, while both changed laboratory instructions
place the grid menu in 2.07. The unchanged remote-check instruction at line 309 describes the old
menu row and downward navigation, confirming that its expected items do not match the grid menu
shipped in 2.06.

android/app/build.gradle[26-27]
LABORATORY.md[307-309]
LABORATORY.md[262-262]
LABORATORY.md[307-307]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
`LABORATORY.md` identifies 2.07 as the first grid-menu release even though this release is 2.06, and its remote-check instruction still describes the old `1..8 U D Q S` row.
## Fix Focus Areas
- LABORATORY.md[262-262]
- LABORATORY.md[307-309]
## Recommended Fix
Change both version references from 2.07 to 2.06 so the instructions select Grid on this release. Update line 309 to say the menu opens on the active slot, Grid or UDP, and that `DPAD_DOWN` from a slot reaches the word cell beneath it (Settings, WebUI, Grid or Slides).

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


3. Menu cells can run off a small screen ✓ Resolved
Description
wordCellWidth() sizes each of the grid’s four columns from the width of “Settings” at 18sp plus
20dp, but the grid has neither a display-width constraint nor the slot row’s former horizontal
scrolling. On a narrow landscape screen or with a large system font, the popup can extend beyond the
display and clip rightmost controls such as Slides/UDP and slots 7–8, leaving them unreachable by
touch.
Code

android/app/src/main/java/com/openipc/decoder/MenuManager.java[R182-186]

+        int cell = wordCellWidth();
+        int half = (cell + 1) / 2;
+        cell = half * 2;
+        LinearLayout camRow = gridRow(layout);
Evidence
wordCellWidth() measures text in COMPLEX_UNIT_SP, so its fixed cell width increases with font
scale without accounting for display width. gridRow and wordItem use that width for four cells
per wrap-content row, while the popup is positioned 12dp from the left with wrap-content width. The
previous slot row’s HorizontalScrollView was removed despite its comment that the row “may not fit a
narrow screen or a large font.”

android/app/src/main/java/com/openipc/decoder/MenuManager.java[356-388]
android/app/src/main/java/com/openipc/decoder/MenuManager.java[132-141]
android/app/src/main/java/com/openipc/decoder/MenuManager.java[179-207]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
The four-column menu grid uses font-scaled fixed cell widths without constraining the popup to the available display width or providing horizontal scrolling, so rightmost controls can be clipped on narrow screens or with large fonts.
## Fix Focus Areas
- android/app/src/main/java/com/openipc/decoder/MenuManager.java[179-207]
- android/app/src/main/java/com/openipc/decoder/MenuManager.java[356-388]
## Recommended Fix
Constrain the grid to the available screen width, accounting for the popup margin, by limiting each cell to the available width divided by four and allowing longer labels to ellipsize or shrink. Alternatively, wrap the entire grid in a HorizontalScrollView so oversized columns remain reachable while rows stay aligned.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


Grey Divider

Tip of the day
💡 Did you know, you can switch off images and animations for a plain-text comment

More tips ↗ | Customize Qodo ↗ | Qodo docs ↗

Grey Divider

Qodo Logo

Comment on lines +277 to +280
setSingleViewItems(single);
linkRemote(camButtons,
new TextView[]{mSettingsBtn, mWebUiBtn, quadBtn, slidesBtn},
new TextView[]{exit, reset, statsBtn, udpBtn});

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Action required

1. Remote navigation stops at grey cells 📎 Requirement gap ≡ Correctness

linkRemote sends slots 1–4 directly to the Settings and WebUI cells, while
setSingleViewItems(false) makes those cells disabled and unfocusable. In multi-view or UDP view,
pressing Down from those slots therefore cannot reach the lower rows, so the remote cannot navigate
through the full menu grid.
Agent Prompt
## Issue description
Remote navigation maps slots 1–4 to the disabled Settings and WebUI cells, which prevents focus from moving into the lower menu rows in multi-view and UDP view.

## Fix Focus Areas
- android/app/src/main/java/com/openipc/decoder/MenuManager.java[394-400]
- android/app/src/main/java/com/openipc/decoder/MenuManager.java[407-418]

## Recommended Fix
Configure explicit directional focus links that bypass disabled Settings and WebUI cells, or make the navigation logic advance past disabled targets while keeping those cells visible, grey, and non-activatable.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools

Comment thread LABORATORY.md Outdated
Comment thread android/app/src/main/java/com/openipc/decoder/MenuManager.java
… ellipsized), LABORATORY: the grid menu from 2.06, remote check for the grid
@compot-dev

Copy link
Copy Markdown
Collaborator Author

Qodo on 7119b1e:

  1. Remote stops at grey cells: not the case. A disabled cell's own nextFocusDown / nextFocusUp links are followed (Android's user-specified focus search walks the chain past unfocusable views). Checked on AG-216 in multi-view: Down from slot 3 → Reset (past the grey WebUI), Up from Reset → slot 3.
  2. LABORATORY versions: fixed in bc406f1. The grid menu is from 2.06, and the remote check describes the grid.
  3. Grid wider than a small screen: fixed in bc406f1. A cell is at most a quarter of the screen width minus the popup margins, and longer labels end in an ellipsis.

@qodo-free-for-open-source-projects

Copy link
Copy Markdown

Qodo on 7119b1e:

  1. Remote stops at grey cells: not the case. A disabled cell's own nextFocusDown / nextFocusUp links are followed (Android's user-specified focus search walks the chain past unfocusable views). Checked on AG-216 in multi-view: Down from slot 3 → Reset (past the grey WebUI), Up from Reset → slot 3.
  2. LABORATORY versions: fixed in bc406f1. The grid menu is from 2.06, and the remote check describes the grid.
  3. Grid wider than a small screen: fixed in bc406f1. A cell is at most a quarter of the screen width minus the popup margins, and longer labels end in an ellipsis.

Thanks for the follow-up. Your AG-216 validation addresses finding 1, and commit bc406f1 addresses findings 2 and 3:

  • finding 1: Android’s explicit focus links traverse the disabled Settings/WebUI cells as observed in multi-view.
  • finding 2: Laboratory instructions now correctly describe the grid menu in version 2.06.
  • finding 3: Cell widths are constrained to the available screen width and labels are ellipsized.

No further review action is needed from me based on this evidence.

@compot-dev
compot-dev merged commit d8f94cf into v2 Oct 14, 2026
4 checks passed
@compot-dev
compot-dev deleted the feat/menu-grid-177 branch October 14, 2026 21:13
compot-dev added a commit that referenced this pull request Oct 15, 2026
… ellipsized), LABORATORY: the grid menu from 2.06, remote check for the grid
compot-dev added a commit that referenced this pull request Oct 15, 2026
feat: menu as an 8 / 4 / 4 grid with words; debug page Info Off by default (#174, #176, #177)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

1 participant