Methods
(static) applyFallbackFontScale() → {void}
- Type:
- void
(static) init() → {void}
┌────────────────────────────────────────────────────────────────────────────┐ │ FOCUS-INDICATOR LAYOUT CONTRACT: read before building/changing an item │ │ component (the itemComponentName) for any RowList. │ │ │ │ The focus indicator pins to the poster slot (rowItemSize) only when │ │ rowHeights is set TALLER than the slot. Without rowHeights, it wraps the │ │ item component's full bounding box, including a title below the poster, so │ │ the border extends past the image and swallows the title. Set │ │ rowHeights = rowItemSize height + a title area, fill the slot with the │ │ poster from its origin, and put the title in the rowHeights area below. │ │ Canonical: JRRowItem + HomeRows. │ │ Full explanation + evidence: docs/architecture/list-grid-item-layout.md │ └────────────────────────────────────────────────────────────────────────────┘
- Type:
- void
(static) onKeyEvent(key, press) → {boolean}
| Name | Type | Description |
|---|---|---|
key | string | |
press | boolean |
- Type:
- boolean
(static) onProgramProgressContentChanged() → {void}
Fires when m.top.content is assigned or reassigned by a subclass. Rebinds the textureManagerState observer to the new content root so the tick timer tracks visibility transitions for the current data set.
- Type:
- void
(static) onProgramProgressTick() → {void}
Walks the texture manager's loaded row range and rewrites playedPercentage on every Program child to its current broadcast-elapsed percentage. JRRowItem's bridge observer forwards these writes to any currently-mounted poster cells, refreshing visible bars without triggering a cell re-render. Non-Program items are skipped.
Iteration is scoped to loadedRowRange [bufferStart..bufferEnd], the vertical range maintained by textureManager.bs, so large datasets (SearchRow, FavoritesRows) don't pay the cost of walking hundreds of offscreen items every minute on the render thread. Offscreen rows whose percentage goes stale during scroll-away will update at the next tick after re-entering the buffer range (up to ~60s stale window, accepted trade-off).
Also detects expired broadcasts (now >= PlayStart + PlayDuration) within the same buffer range and raises the programsExpired field. Subclasses that can refetch (HomeRows, ExtrasRowList) observe that field and trigger a fresh load. Expiry detection is scoped to the buffer range rather than the full content tree because Live TV rows in HomeRows/ExtrasRowList are always in the vertical buffer in practice; full-scan expiry on every tick would be unnecessary work for zero real-world benefit.
Hard-guards rather than full-scan fallback when loadedRowRange is missing or invalid: the tick only runs while textureManagerState = "active", which the state machine guarantees implies loadedRowRange is populated. A missing field surfaces an ordering regression loudly rather than masking it.
- Type:
- void
(static) onProgramProgressVisibilityChanged(msg) → {void}
| Name | Type | Description |
|---|---|---|
msg | object |
- Type:
- void
(static) startProgramProgressTicking() → {void}
- Type:
- void
(static) stopProgramProgressTicking(releaseTimeropt) → {void}
| Name | Type | Attributes | Default | Description |
|---|---|---|---|---|
releaseTimer | boolean | <optional> | false |
- Type:
- void
(static) syncProgramProgressTicking(state) → {void}
Starts or stops the 60s Program progress tick based on the visibility state broadcast by the texture manager. Idempotent; safe on every state change. State arrives as dynamic because textureManagerState is unset (invalid) on freshly-created content roots: initTextureManager only assigns "init" after the subclass first populates the content tree.
| Name | Type | Description |
|---|---|---|
state | dynamic |
- Type:
- void