Repository navigation
FrameTune Suite v1.1.82
FrameTune Suite v1.1.82
Official release of FrameTune TV and FrameTune Remote companion.
✨ What's Added in this Release (Latest Commit Details)
-
⚡ Performance & Stability: Resolve D-pad navigation hijacking and enhance sidebar rail traversal (
7e2e726)- Prevent isFocusInSidebar false positives caused by Hotstar Home tab retaining permanent isSelected=true
- Remove virtual touch taps (dispatchGesture) that forced Android TV Leanback into touch mode and broke focus states
- Prioritize focusable tabs on DPAD_LEFT when transitioning from content cards into sidebar rail
- Add fallback ACTION_CLICK and focusSearch traversals for sidebar tabs and content cards
- Enable emulator TCP loopback detection (10.0.2.2:5555) with per-candidate handshake verification in LocalAdbBridge
- Clean up connect_emulators.bat port bridging to enable adb tcpip 5555 without redundant port forward
-
⚡ Performance & Stability: Harden player seeking, wake player gestures, and local ADB bridge (
6ce058b)- Key components updated:
LocalAdbBridge.kt,MediaSessionTransportController.kt,RemoteActionDispatcher.kt
- Key components updated:
-
📱 FrameTune Remote: Move Video stats into upcoming features under supporter tier (
edc3ad8)- Key components updated:
MainActivity.kt,activity_main.xml,dialog_stream_stats.xml,TvStatusTierTest.kt
- Key components updated:
-
📱 FrameTune Remote: Support optional score parameter in TRIGGER_HOTSTAR_AD_SHIELD action (
a08f65c)- Key components updated:
RemoteActionDispatcher.kt
- Key components updated:
-
🛡️ Turbo Stream & Network Shield: Add completed Hotstar ad shield, wallpaper, and live score HUD implementation plan (
5400df6) -
📱 FrameTune Remote: Implement live cricket scorecard HUD overlay, settings toggles, and remote dispatcher (
bbb8c45)- Key components updated:
HotstarHandler.kt,HotstarScorecardOverlayView.kt,HotstarWallpaperController.kt,RemoteActionDispatcher.kt,RemoteControlServer.kt
- Key components updated:
-
✨ System & Enhancements: Implement on-device LiveCricketScore model and parser (
d3edb13)- Key components updated:
HotstarScorecardParser.kt,HotstarScorecardParserTest.kt
- Key components updated:
-
✨ System & Enhancements: Synchronize wallpaper presentation with AudioMuteController (
daebb21)- Key components updated:
FrameTuneCore.kt,HotstarHandler.kt,HotstarHandlerTest.kt
- Key components updated:
-
✨ System & Enhancements: Implement universal HotstarWallpaperController supporting API 21+ and Fire TV (
ecfc957)- Key components updated:
HotstarWallpaperController.kt,LiveCricketScore.kt,HotstarWallpaperControllerTest.kt
- Key components updated:
-
✨ System & Enhancements: Integrate multi-signal ad detection into HotstarHandler node pipeline (
2178fc3)- Key components updated:
HotstarHandler.kt,HotstarHandlerTest.kt
- Key components updated:
-
✨ System & Enhancements: Implement multi-signal ad detection engine with confidence scoring (
aa8acd9)- Key components updated:
HotstarAdDetectionEngine.kt,HotstarAdDetectionEngineTest.kt
- Key components updated:
📦 Included APKs
FrameTune-TV.apk— Install on Android TV, Google TV, and Fire TV devices.FrameTune-Remote.apk— Install on Android smartphones and tablets.
📋 Detailed Architecture & Phase Notes
[Phase 117] - 2026-10-10
-
JioHotstar Ad Time Bar Detection Dependency & False-Positive 1.75m Video Jump Elimination (
:app& Docs):-
The Requirement & Issue Solved:
- False Skipping & 1.75m Video Fast-Forward Elimination: When playing videos on JioHotstar without ads, FrameTune TV previously displayed "skipping ad" and accelerated playback at 4.0x speed, jumping the video to ~1.75 minutes (105 seconds) before stopping.
-
Root Cause: In Hotstar's Leanback TV player, the normal playback elapsed timer shares the view ID
:id/timer. Previously,extractAdTime()treated any view containing:id/timeras an ad countdown, even when no ad was playing. When video playback began, the timer showed00:01, which was erroneously parsed as a 1-second ad countdown. Fast-forwarding (4.0x) engaged while player controls were visible (~25s real time = 105s / 1.75 min of video), repeatedly accelerating until the player OSD auto-dismissed. Additionally,HOTSTAR_AD_MUTEmatched:id/timerand calledcheckFastForwardAd()even whenadTimeInfowas null, bypassing all ad time gating. -
Ad Time Bar Strict Dependency: Entire ad fast-forwarding function is now strictly and exclusively dependent on an authentic ad time bar showing in the video. It engages 4.0x only when an authentic ad time bar is confirmed on screen, and stops immediately (restoring 1.0x normal speed) the exact moment the ad bar disappears or reaches
00:00.
-
Implementation Details:
-
Strict Structural & Textual Ad Confirmation (
extractAdTime&isAdContainerOrSibling):- Generic view IDs like
:id/timeror:id/countDownTimerare rejected by default unless confirmed by explicit ad context:-
Ancestral Ad Container: Parent/ancestors have IDs
layout_ad_container,layout_ad_container_bottom, orad_container. -
Ad Sibling Nodes: Sibling views in the same layout hierarchy contain
ad_header,ad_sub_header,skip_ad_cta,go_ads_free,ad_timer, or textAd.
-
Ancestral Ad Container: Parent/ancestors have IDs
- Explicit ad timer IDs (
ad_timer,tv_ad_timer,ad_time_remaining,ads_remaining_time,ad_countdown) require countdown times$\le 180\text{s}$ . - Text-level ad countdowns require explicit whole-word ad markers (
\bAd\b,\bSponsored\b,\bends in\b,\bstarts in\b) and a valid countdown time (rejecting false matches from "Adventure", "Content Advisory", "Add to Watchlist", or movie durations like01:33:23).
- Generic view IDs like
-
Strict Gate in
checkFastForwardAd():- Fast-forward acceleration at 4.0x is unconditionally rejected unless
isAdTimeDetected == true. - Removed fallback
checkFastForwardAd()calls whenadTimeInfo == nullacrossevaluateNode()andevaluateTextSignal(). - Gated
HOTSTAR_AD_MUTErule execution strictly behind verifiedadTimeInfo != null.
- Fast-forward acceleration at 4.0x is unconditionally rejected unless
-
Instant Disappearance Stopping & Normal Playback Protection:
- When ad bar reaches
00:00, orskip_ad_ctais clicked, or normal movie signals (in.startv.hotstar:id/tvHeader"Rated U/A 16+", seekbarseek_time_stamp) appear, FrameTune restores 1.0x speed with zero latency. - Watchdog timeout reduced to 1200ms–1400ms to guarantee rapid restoration if an ad bar abruptly departs.
- When ad bar reaches
-
Strict Structural & Textual Ad Confirmation (
-
Verification:
- Full test suite passed:
com.frametune.tv.hotstar.HotstarHandlerTest(all 7 tests passed) and full:app:testDebugUnitTest(27 tasks executed, 0 errors). Normal movie playback at00:01verified to returnnulland never accelerate.
- Full test suite passed:
-
The Requirement & Issue Solved:
🔨 Full Commit Log
7e2e726— fix(hotstar): resolve D-pad navigation hijacking and enhance sidebar rail traversal (Spec-Pilot, 2026-10-16)6ce058b— fix(tv): harden player seeking, wake player gestures, and local ADB bridge (Spec-Pilot, 2026-10-16)edc3ad8— feat(remote): move Video stats into upcoming features under supporter tier (Spec-Pilot, 2026-10-16)a08f65c— feat(remote): support optional score parameter in TRIGGER_HOTSTAR_AD_SHIELD action (Spec-Pilot, 2026-10-15)5400df6— docs: add completed Hotstar ad shield, wallpaper, and live score HUD implementation plan (Spec-Pilot, 2026-10-15)bbb8c45— feat(hotstar): implement live cricket scorecard HUD overlay, settings toggles, and remote dispatcher (Spec-Pilot, 2026-10-15)d3edb13— feat(hotstar): implement on-device LiveCricketScore model and parser (Spec-Pilot, 2026-10-15)daebb21— feat(hotstar): synchronize wallpaper presentation with AudioMuteController (Spec-Pilot, 2026-10-15)ecfc957— feat(hotstar): implement universal HotstarWallpaperController supporting API 21+ and Fire TV (Spec-Pilot, 2026-10-15)2178fc3— feat(hotstar): integrate multi-signal ad detection into HotstarHandler node pipeline (Spec-Pilot, 2026-10-15)aa8acd9— feat(hotstar): implement multi-signal ad detection engine with confidence scoring (Spec-Pilot, 2026-10-15)