Skip to content

Releases: 4losrt/AnimeTVOne

v1.3.9 — 播放穩定度與續看強健性

Choose a tag to compare

@4losrt 4losrt released this 18 Oct 12:32

承 1.3.8 的播放正確性修訂,本版再收斂三個在最終複查中發現的問題:

  • 續看比對更可靠:同一集可能因為抓取 token 成功與否而有兩種 episode id;續看位置現在除了精確比對 id 也會用「集數」比對,避免明明有紀錄卻從頭播放。
  • 串流失敗自動重試有上限:改為每集最多靜默重試 2 次、換集才重置(原本在 STATE_READY 後重置,遇到「能 READY 但解碼失敗」的串流可能無限重試且不顯示錯誤)。
  • 不再卡 UI 寫入快取:抓到實際集數而上修快取時,約 2MB 的動畫清單存檔改到背景執行(與其他快取寫入一致),避免開啟詳細頁時的主執行緒卡頓。

單元測試 53/53 通過、lint 無誤。安裝:adb install -r AnimeTVOne-v1.3.9.apk

AnimeTVOne v1.3.8

Choose a tag to compare

@4losrt 4losrt released this 18 Oct 12:22

播放正確性修正(來源、歷史、集數、進度、每週表)。

  • 背景播放:按 Home 離開 App 會暫停播放並存檔,不再背景繼續出聲(實機以 audio output thread 狀態驗證:播放中 Standby=no,按 Home 後全部 Standby=yes)。
  • 集數標籤:animelist.json 的狀態是區間("1-12"、"13-24"、"1-12+OVA"、"連載中(41)"),舊版只取第一個數字,導致幾乎每部都顯示「全 1 集」。改為取狀態中最大數字,抓到實際集數列表後會上修被低估的集數,且舊版寫入的磁碟快取在讀取時自動修復(不必清資料)。實機每週表正確顯示「全 12 集」。
  • 播放歷史:同一部動畫、同一集只保留一筆。同一集可能有兩種 id 形態(有/無串流 token)而重複寫入;現在以集數去重、載入時折疊既有重複,並把集數寫進歷史資料。實機歷史頁 7 筆紀錄、每集各一筆。
  • 單集進度:輪詢與存檔都綁定在播放器真正載入的那一集,換集時時間軸會歸零、舊集進度會以自己的 id 存檔,各集進度不再互相污染。實機:第 13 集 01:13、第 14 集 02:44,互不影響;按下一集後位置回到 00:13;從歷史續看第 14 集正確回到 02:46。接近片尾的紀錄不會再從片尾重播。
  • 播放來源:Referer 改為與參考實作一致的 https://anime1.me/,播放錯誤會自動用新取的串流靜默重試一次,標題中沒有集數標記時不再把年份(如 2023)當成集數。
  • 每週新番表:以實際抓取的季度頁面寫入單元測試固定「週日為第一欄」的對應;實機每一欄數量與網站完全一致(週一 7、週二 6、週三 12、週四 8、週五 6)。

測試:54 個單元測試全部通過(新增集數狀態、快取修復、歷史去重、每週表欄位對應、集數解析)。

AnimeTVOne v1.3.7

Choose a tag to compare

@4losrt 4losrt released this 17 Oct 13:27

Player remote-control polish: stable D-pad focus graph, hidden-control seeking HUD with acceleration, timeline scrubbing, media-key seeking, episode picker navigation, and crash fix.

AnimeTVOne v1.3.5

Choose a tag to compare

@4losrt 4losrt released this 17 Oct 04:37

AnimeTVOne v1.3.5 — player polish

Small follow-up to v1.3.4 (the D-pad focus fix).

Player UX

  • The control bar stays on screen while the video is paused (or has ended).
    It now only auto-hides after 4 s of playback without input, so you can still
    read the position while paused. Any remote input still restarts the countdown.
  • Seek no longer shows a bogus 00:00 total when the duration is not known
    yet (an unknown duration is coerced to 0).

Episode picker

  • If the currently-playing episode can't be resolved yet (the list is still
    loading), focus now falls back to the list itself instead of going nowhere.

Tests

  • The instrumented PlayerControlsFocusTest now also covers the 選集 picker:
    opening it focuses the current episode, and the D-pad moves between items.
    All D-pad focus-graph tests pass; 32/32 unit tests and lint pass.

Install: self-signed (debug key) APK for sideloading; installs over earlier builds.

AnimeTVOne v1.3.4

Choose a tag to compare

@4losrt 4losrt released this 17 Oct 04:14

AnimeTVOne v1.3.4 — Player remote/D-pad focus fix

Follow-up to v1.3.3 after on-device testing on a Fire TV Stick (Android 7.1).

The big one: remote navigation in the player was broken

The centred play/pause button has no vertically-overlapping neighbour, so
Compose's default directional focus search could never find anything above it.
In practice focus was stuck on play/pause: pressing UP/RIGHT did nothing and
the top bar (選集 / 速度 / 追番 / 比例 / 返回) was unreachable with a remote.

  • The entire player focus graph is now wired explicitly with FocusRequesters:
    • Up from play/pause → 選集; Down from any top-bar button → play/pause.
    • Left/Right walks the centre row: −10s ↔ play/pause ↔ +10s ↔ 下一集.
    • Up from −10s → 返回; the top bar walks left/right in order.
  • A container fallback sends any D-pad press to play/pause if the full-screen
    node itself ever holds focus.

Other fixes

  • Controls no longer vanish while you navigate them. The 4-second auto-hide
    now restarts on any remote input (previously only on button clicks), so a
    slow D-pad trip to a button doesn't hide the bar first.
  • Resume position follows the episode actually playing when switching
    episodes from the in-player 選集 picker (was using the route's episode id).

Verified

  • New instrumented test PlayerControlsFocusTest drives the D-pad and asserts
    the whole focus graph (incl. the container fallback). Both tests pass on an
    Android 14 device; assembleRelease (R8) builds and runs; 32/32 unit tests
    and lint pass.

Install: self-signed (debug key) APK for sideloading; installs over earlier builds.

AnimeTVOne v1.3.3

Choose a tag to compare

@4losrt 4losrt released this 16 Oct 21:33

AnimeTVOne v1.3.3 — Player fixes & episode picker

Deep review of the player (PlayerScreen / PlayerViewModel / control logic).

Bugs fixed

  • History was never saved when leaving the player. The DisposableEffect
    captured the first composition's uiState (always null anime/episode), so
    the resume position was lost on exit. Now reads the latest values
    (rememberUpdatedState), so resume-on-reopen works.
  • Stale episode list when switching anime. The previous anime's episodes
    lingered, so "下一集" could operate on the wrong list (or vanish). The list is
    now cleared immediately when the anime changes.
  • Retry did not reload. A player error with the same stream URL could not be
    retried because the state never changed. A retryCount now forces a reload.
  • Scrubbing on an unknown duration (-1/0 until prepared) jumped to a
    nonsense position; scrubs are now ignored until the duration is known.

Playback experience

  • In-player episode picker ("選集" button): a full-screen list of episodes,
    focus lands on the currently playing one, DPAD scrolls, OK switches episode.
  • Playback speed and aspect ratio now persist across episodes (moved into the
    ViewModel state — previously local state that reset on every change).
  • Control bar auto-hide resets on interaction and never hides while the
    episode picker is open.
  • Back button priority: episode picker → control bar → leave the player.
  • Full-screen system-bar handling now uses WindowInsetsControllerCompat
    (works on API 25+; removed deprecated flags).
  • Quality badge is now the real stream quality when available, otherwise a
    neutral "高清" — no more fabricated "1080P" in player/home/detail.

Verified

  • 32/32 unit tests pass (3 new PlayerViewModel tests: prefs persistence, stale
    episodes, episode-list/retry).
  • assembleRelease (R8) BUILD SUCCESSFUL; lint clean.

Install: self-signed (debug key) APK for sideloading; installs over earlier builds.

AnimeTVOne v1.3.2

Choose a tag to compare

@4losrt 4losrt released this 16 Oct 21:01

AnimeTVOne v1.3.2 — Lint & API-level cleanup

Fixes

  • Removed showWhenLocked / turnScreenOn from AndroidManifest.xml (these attrs require API 27, while minSdk is API 25) and set equivalent screen flags programmatically on API 27+ to keep Fire TV API 25 compatibility.
  • Removes the lint warning and keeps behaviour stable on older Fire OS.

Verified

  • lint passes; assembleDebug + testDebugUnitTest BUILD SUCCESSFUL.
  • Device AFTMM (192.168.1.249) smoke + 200-event monkey test completed without crash.

Install: self-signed (debug key) APK for sideloading; installs over earlier builds (same signing key).

AnimeTVOne v1.3.1

Choose a tag to compare

@4losrt 4losrt released this 16 Oct 20:54

AnimeTVOne v1.3.1 — Player fixes

Hotfix following v1.3.0 focused on the player (interface, controls, full screen,
episode display, consecutive seek).

Operation logic

  • Remote Back now lowers the control bar first, then exits the player on the
    second press (BackHandler + immersive reflow).
  • Repeated ±10s fast-forward / rewind now compound correctly: consecutive
    presses accumulate 10s per press even while ExoPlayer's current position lags
    behind seekTo() (a short 2s anchor window).
  • +10s / -10s buttons and the DPad left/right keys share the same
    accumulator so they never desync.
  • Next/previous episode is ignored while a new episode is still loading,
    preventing overlapping reloads and race conditions.

Episode display

  • The player header now shows a real "第 N 集" label immediately from the
    episode id, instead of one blank line during the lazy episode/token fetch.
  • Stale previous-episode title is no longer shown while the new stream loads.
  • Header falls back to the episode number parsed from the id when the episode
    list has not arrived yet (and only shows an empty string when none is known).

Full screen

  • The player now hides all system bars (status/navigation/immersive-sticky) for a
    true full-screen picture on Fire/Android TV, restoring them on exit.
  • Screen-on is kept while the player is active.

UI

  • Seek slider (scrub) now resets the seek accumulator so a manual scrub cannot
    collide with a pending series of ±10s bumps.

Build

  • R8-minified release APK ~2.9 MB; release notes & install path kept in sync.

Install: self-signed (debug key) APK for direct sideloading. Installs over
earlier debug-signed builds (same signing key).

AnimeTVOne v1.3.0

Choose a tag to compare

@4losrt 4losrt released this 16 Oct 10:40

AnimeTVOne v1.3.0

A full UI redesign plus core data/caching fixes.

UI

  • New Disney+/Netflix-inspired look: near-black canvas, a single blue accent and bold typography.
  • Redesigned hero billboard, poster cards and side navigation.
  • Shared loading / error / empty / section-header components across every screen.
  • Fixed the detail screen layout where the play / watchlist buttons were pushed off-screen.

Fixes

  • Parse the real animelist.json wire format (id, title, status, year, season, fansub group) — this fixes the season filter chips and the season badges shown on posters.
  • Never persist offline fallback data to the cache.
  • Stop writing a multi-megabyte JSON into SharedPreferences.
  • Removed the fabricated rating (the star badge only shows when a real rating exists).
  • Fixed the weekly-schedule URL (duplicated 季); fall back to an existing season page instead of inventing a schedule.
  • Navigation tab / back-stack state now survives activity recreation.
  • Covers and history are read off the main thread; posters now show in the catalog list.

Build

  • Removed unused dependencies and KSP processors.
  • Enabled R8 shrinking for release: APK size ~30 MB → ~2.9 MB.

Install: self-signed (debug key) APK for direct sideloading on Fire TV / Android TV. Not Play-Store production-signed. Installs over earlier debug-signed builds (same signing key).

AnimeTVOne v1.2.1

Choose a tag to compare

@4losrt 4losrt released this 23 Sep 09:54

Improves TV side-menu readability with a custom Compose Foundation navigation rail. The menu no longer uses Material 3 surfaces. Debug-signed APK for direct installation; not Play Store production-signed.