Skip to content

FrameTune Suite v1.1.78

Choose a tag to compare

@Spec-Pilot Spec-Pilot released this 13 Oct 15:23
adac769

FrameTune Suite v1.1.78

Official release of FrameTune TV and FrameTune Remote companion.

✨ What's Added in this Release (Latest Commit Details)

  • 📱 FrameTune Remote: Fix air mouse motion dynamics, auto-dismiss tv cursor, and gate under supporter labs (d2650ed)
    • Key components updated: TvCursorOverlay.kt, RemoteActionDispatcher.kt, MainActivity.kt, AirMouseFilter.kt, AirMouseManager.kt

📦 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:
      1. 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.
      2. 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/timer as an ad countdown, even when no ad was playing. When video playback began, the timer showed 00: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_MUTE matched :id/timer and called checkFastForwardAd() even when adTimeInfo was null, bypassing all ad time gating.
      3. 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:
      1. Strict Structural & Textual Ad Confirmation (extractAdTime & isAdContainerOrSibling):
        • Generic view IDs like :id/timer or :id/countDownTimer are rejected by default unless confirmed by explicit ad context:
          • Ancestral Ad Container: Parent/ancestors have IDs layout_ad_container, layout_ad_container_bottom, or ad_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 text Ad.
        • 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 like 01:33:23).
      2. Strict Gate in checkFastForwardAd():
        • Fast-forward acceleration at 4.0x is unconditionally rejected unless isAdTimeDetected == true.
        • Removed fallback checkFastForwardAd() calls when adTimeInfo == null across evaluateNode() and evaluateTextSignal().
        • Gated HOTSTAR_AD_MUTE rule execution strictly behind verified adTimeInfo != null.
      3. Instant Disappearance Stopping & Normal Playback Protection:
        • When ad bar reaches 00:00, or skip_ad_cta is clicked, or normal movie signals (in.startv.hotstar:id/tvHeader "Rated U/A 16+", seekbar seek_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.
    • 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 at 00:01 verified to return null and never accelerate.

🔨 Full Commit Log

  • d2650ed — feat(remote): fix air mouse motion dynamics, auto-dismiss tv cursor, and gate under supporter labs (Spec-Pilot, 2026-10-13)