Skip to content

Releases: Spec-Pilot/FrameTune-Releases

FrameTune Suite v1.1.82

Choose a tag to compare

@Spec-Pilot Spec-Pilot released this 16 Oct 09:48
adac769

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
  • 📱 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
  • 📱 FrameTune Remote: Support optional score parameter in TRIGGER_HOTSTAR_AD_SHIELD action (a08f65c)

    • Key components updated: RemoteActionDispatcher.kt
  • 🛡️ 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
  • ✨ System & Enhancements: Implement on-device LiveCricketScore model and parser (d3edb13)

    • Key components updated: HotstarScorecardParser.kt, HotstarScorecardParserTest.kt
  • ✨ System & Enhancements: Synchronize wallpaper presentation with AudioMuteController (daebb21)

    • Key components updated: FrameTuneCore.kt, HotstarHandler.kt, HotstarHandlerTest.kt
  • ✨ System & Enhancements: Implement universal HotstarWallpaperController supporting API 21+ and Fire TV (ecfc957)

    • Key components updated: HotstarWallpaperController.kt, LiveCricketScore.kt, HotstarWallpaperControllerTest.kt
  • ✨ System & Enhancements: Integrate multi-signal ad detection into HotstarHandler node pipeline (2178fc3)

    • Key components updated: HotstarHandler.kt, HotstarHandlerTest.kt
  • ✨ System & Enhancements: Implement multi-signal ad detection engine with confidence scoring (aa8acd9)

    • Key components updated: HotstarAdDetectionEngine.kt, HotstarAdDetectionEngineTest.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

  • 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)

FrameTune Suite v1.1.81

Choose a tag to compare

@Spec-Pilot Spec-Pilot released this 14 Oct 18:09
adac769

FrameTune Suite v1.1.81

Official release of FrameTune TV and FrameTune Remote companion.

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

  • ⚡ Performance & Stability: Resolve live sports ad buffering and home screen dpad center launch (bf60506)
    • Detect live sports streams in HotstarHandler and suppress trick-play speed acceleration to prevent ExoPlayer live-edge buffer starvation
    • Bypass DNS sinkhole NXDOMAIN for Hotstar DAI ad servers during live sports or when ad skipping is disabled to prevent infinite buffering
    • Fix DPAD_CENTER in RemoteActionDispatcher to activate anonymous clickable card containers and virtual tap before scroll parent traversal
    • Support emulator host endpoints in LocalAdbBridge

📦 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

  • bf60506 — fix(hotstar): resolve live sports ad buffering and home screen dpad center launch (Spec-Pilot, 2026-10-14)

FrameTune Suite v1.1.80

Choose a tag to compare

@Spec-Pilot Spec-Pilot released this 14 Oct 10:18
adac769

FrameTune Suite v1.1.80

Official release of FrameTune TV and FrameTune Remote companion.

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

  • 📱 FrameTune Remote: Enable direct air mouse motion tracking and universal tv compatibility (dbd6993)
    • Map angular rates directly with adaptive tilt compensation in AirMouseManager
    • Implement multi-sensor fallback cascade (gyro -> rotation vector -> accelerometer)
    • Add smooth radial deadzone and dynamic non-linear acceleration curve in AirMouseFilter
    • Set Bluetooth HID SDP Subclass to 0 for TV Linux uhid driver compatibility
    • Add BLUETOOTH_SCAN and legacy location permissions covering Android 8 through 16
    • Immediately activate motion tracking upon selecting Air Mouse mode without holding
    • Convert center pad to primary tap-to-click / hold-to-drag surface
    • Add recenter and setDown methods to TvCursorOverlay
    • Resolve phantom double-clicks and add scroll/drag support in RemoteActionDispatcher

📦 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

  • dbd6993 — feat(remote): enable direct air mouse motion tracking and universal tv compatibility (Spec-Pilot, 2026-10-14)

FrameTune Suite v1.1.79

Choose a tag to compare

@Spec-Pilot Spec-Pilot released this 14 Oct 05:08
adac769

FrameTune Suite v1.1.79

Official release of FrameTune TV and FrameTune Remote companion.

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

  • 📱 FrameTune Remote: Stabilize air mouse gyro thread and resolve touchpad gestures & freeze (ccbef70)
    • Move AirMouseManager sensor sampling to dedicated HandlerThread at 100 Hz
    • Prioritize Sensor.TYPE_GYROSCOPE direct angular velocity to eliminate gimbal lock
    • Decouple cursor movement and pointer click from consecutiveFailures gating
    • Gate in-flight Wi-Fi cursor HTTP requests to prevent connection exhaustion
    • Fix touchpad double-tap slop computation and add drag-lock and two-finger scroll
    • Prevent parent ScrollView interception during active touchpad move gestures

📦 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

  • ccbef70 — fix(remote): stabilize air mouse gyro thread and resolve touchpad gestures & freeze (Spec-Pilot, 2026-10-14)

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)

FrameTune Suite v1.1.77

Choose a tag to compare

@Spec-Pilot Spec-Pilot released this 13 Oct 12:13
adac769

FrameTune Suite v1.1.77

Official release of FrameTune TV and FrameTune Remote companion.

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

  • 📱 FrameTune Remote: Add full pointer suite and finalize touchpad, air mouse, and haptics plan (212cc66)

    • Key components updated: PointerFullSuiteTest.kt
  • 📱 FrameTune Remote: Add Air Mouse mode tab, Hold-to-Aim trigger, and tactile mouse click bars (0f05477)

    • Key components updated: MainActivity.kt, activity_main.xml
  • 📱 FrameTune Remote: Add configurable haptic feedback engine with native Android vibration effects (9fda0da)

    • Key components updated: MainActivity.kt, HapticEngine.kt, AuthStore.kt, HapticEngineTest.kt
  • 📱 FrameTune Remote: Create AirMouseFilter and AirMouseManager with deadzone and smoothing (5b6b2e7)

    • Key components updated: AirMouseFilter.kt, AirMouseManager.kt, AirMouseFilterTest.kt
  • 📱 FrameTune Remote: Enforce Bluetooth-first priority routing for touchpad and cursor mode (22db8f4)

    • Key components updated: MainActivity.kt, PointerTransportRouter.kt, PointerTransportRouterTest.kt
  • 📱 FrameTune Remote: Implement mouse movement, click, drag, and wheel dispatch (10462b2)

    • Key components updated: BluetoothHidRemoteManager.kt, BluetoothMouseDispatchTest.kt
  • 📱 FrameTune Remote: Add USB HID Mouse descriptor and report builder (Report ID 3) (cbe57af)

    • Key components updated: HidConsts.kt, BluetoothMouseReportTest.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

  • 212cc66 — test(pointer): add full pointer suite and finalize touchpad, air mouse, and haptics plan (Spec-Pilot, 2026-10-13)
  • 0f05477 — feat(ui): add Air Mouse mode tab, Hold-to-Aim trigger, and tactile mouse click bars (Spec-Pilot, 2026-10-13)
  • 9fda0da — feat(haptics): add configurable haptic feedback engine with native Android vibration effects (Spec-Pilot, 2026-10-13)
  • 5b6b2e7 — feat(sensor): create AirMouseFilter and AirMouseManager with deadzone and smoothing (Spec-Pilot, 2026-10-13)
  • 22db8f4 — feat(pointer): enforce Bluetooth-first priority routing for touchpad and cursor mode (Spec-Pilot, 2026-10-13)
  • 10462b2 — feat(bluetooth): implement mouse movement, click, drag, and wheel dispatch (Spec-Pilot, 2026-10-13)
  • cbe57af — feat(bluetooth): add USB HID Mouse descriptor and report builder (Report ID 3) (Spec-Pilot, 2026-10-13)

FrameTune Suite v1.1.76

Choose a tag to compare

@Spec-Pilot Spec-Pilot released this 13 Oct 11:10
adac769

FrameTune Suite v1.1.76

Official release of FrameTune TV and FrameTune Remote companion.

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

  • 📱 FrameTune Remote: Resolve Hotstar search bar focus navigation and activate keyboard (BUG-005) (43abe89)
    • Key components updated: RemoteActionDispatcher.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

  • 43abe89 — fix(tv): resolve Hotstar search bar focus navigation and activate keyboard (BUG-005) (Spec-Pilot, 2026-10-13)

FrameTune Suite v1.1.75

Choose a tag to compare

@Spec-Pilot Spec-Pilot released this 13 Oct 07:10
adac769

FrameTune Suite v1.1.75

Official release of FrameTune TV and FrameTune Remote companion.

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

  • 📱 FrameTune Remote: Add bluetooth hid live typing keyboard, embedded dpad navigator, and fix tv navigation reliability (91244a2)
    • Key components updated: MainActivity.kt, BluetoothHidRemoteManager.kt, HidConsts.kt, dialog_remote_keyboard.xml, BluetoothActionRoutingTest.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

  • 91244a2 — feat(remote): add bluetooth hid live typing keyboard, embedded dpad navigator, and fix tv navigation reliability (Spec-Pilot, 2026-10-13)

FrameTune Suite v1.1.74

Choose a tag to compare

@Spec-Pilot Spec-Pilot released this 13 Oct 05:19
adac769

FrameTune Suite v1.1.74

Official release of FrameTune TV and FrameTune Remote companion.

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

  • 🏠 TV Home Launcher: Resolve turbo stream and dns shield disarm and state synchronization (323044a)

    • Fix AppSettings.isDiagnosticLoggingActive default value from true to false
    • Unify active state evaluation in RemoteActionDispatcher to avoid asymmetric toggle lock
    • Synchronously disarm VPN service, macro, and recording in RemoteActionDispatcher, RemoteTrigger, and AutoAdSkipMacro
    • Resolve Android 8+ foreground service crash in FrameTuneDnsVpnService on stop
    • Align QuickSettingsModal and HomeLauncherActivity UI indicators with active DNS filter settings
    • Add TurboStreamAndDnsDisarmTest unit tests for regression prevention
  • 📱 FrameTune Remote: Simplify 4K logo masking to single adaptive toggle and update UI docs (40fc980)

    • Streamline remote 4K logo control into single full-width btnToggleCinemaMatte button
    • Remove redundant height adjustment steppers, mode switch, and pause dismiss buttons
    • Clean up obsolete bindings and listeners in MainActivity.kt
    • Bump remote versionCode to 10172 (v1.1.72)
    • Thoroughly document all 14 decks, 12 modals, and master button mapping in docs/remote_ui.md

📦 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

  • 323044a — fix(core): resolve turbo stream and dns shield disarm and state synchronization (Spec-Pilot, 2026-10-13)
  • 40fc980 — feat(remote): simplify 4K logo masking to single adaptive toggle and update UI docs (Spec-Pilot, 2026-10-13)

FrameTune Suite v1.1.73

Choose a tag to compare

@Spec-Pilot Spec-Pilot released this 13 Oct 01:51
adac769

FrameTune Suite v1.1.73

Official release of FrameTune TV and FrameTune Remote companion.

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

  • 📱 FrameTune Remote: Auto-sync license key from remote to TV and dismiss TV paywall upon activation (7f4f776)
    • Key components updated: ProPaywallModal.kt, RemoteActionDispatcher.kt, RemoteControlServer.kt, MainActivity.kt, AuthStore.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

  • 7f4f776 — feat(pro): auto-sync license key from remote to TV and dismiss TV paywall upon activation (Spec-Pilot, 2026-10-13)