TigerDuck

org.ntust.app.tigerduck.fdroid
by Zapstore _@zapstore.dev

Republished from GitHub / F-Droid by the Zapstore main account.

First release: Aug 23, 2026, 6 total releases.

Most recent release: Sep 22, 2026.

Repo

Appears in 0 app stacks.

0 sats / 0 zaps received in the past year.

Sats Received

Underlying data available via MCP: app_zaps, app_releases.

Zap Count

Underlying data available via MCP: app_zaps, app_releases.

Releases

  • Sep 22, 2026 2.2.0-fdroid
    v2.2.0 修復了即時更新對於 NowBar、小米系列超級島以及其他品牌手機的即時更新顯示問題,新增了校園信箱功能,以及修復了其他問題。 v2.2.0 Fix Live Updates display on Samsung NowBar, Xiaomi series HyperIsland and other devices, added campus email feature, and fixed other bugs. 注意 / Notes: - 從 v1.x 升級會重新進入首次使用引導介面,讓使用者知悉新條款與設定新功能,但是會維持登入狀態。 User upgrading from v1.x will go through the setup wizard again, with logged in state being kept. This is to let user acknowledge new service terms as well as configure new features. - 不同安裝渠道 (APK, F-Droid, Play Store) 由於 Sign Key 不同,將無法互相更新。 Different distribution channels (APK / F-Droid / Play Store) use different signing keys and cannot upgrade across each other. - 由於 F-Droid 應用程式商店規定不能使用 Firebase 相關服務,F-Droid 版本將無法獲得即時公告推送通知。
    More…
    Due to Firebase related services not being usable in apps published on F-Droid, the F-Droid flavor will not receive push notifications for Announcements. - 由於 F-Droid 應用程式商店規定不能使用 GMS 套件,F-Droid 版本將不支援 Wear OS。 Due to GMS package not being usable in apps published on F-Droid, the F-Droid flavor will not have Wear OS support. --- ## 🔖 版本 / Version - **手機:`versionCode` 26 → 27, `versionName` 2.1.0 → 2.2.0** **Phone: `versionCode` 26 → 27, `versionName` 2.1.0 → 2.2.0** - **手錶:`versionCode` 10026 → 10027, `versionName` 2.1.0 → 2.2.0** **Watch: `versionCode` 10026 → 10027, `versionName` 2.1.0 → 2.2.0** ## 🔁 比較 / Diff - **完整變更紀錄:** https://github.com/tigerduck-app/tigerduck-app-android/compare/v2.1.0...v2.2.0 **Full changelog:** https://github.com/tigerduck-app/tigerduck-app-android/compare/v2.1.0...v2.2.0
  • Sep 14, 2026 2.1.0-fdroid
    v2.1.0 針對 TigerSync 頁面重新設計,使其與 Apple 平台使用體驗一致,順帶修復了一些 bug。 v2.1.0 Re-designed the TigerSync settings page, so it matches the user experience with Apple platform app. 注意 / Notes: - 從 v1.x 升級會重新進入首次使用引導介面,讓使用者知悉新條款與設定新功能,但是會維持登入狀態。 User upgrading from v1.x will go through the setup wizard again, with logged in state being kept. This is to let user acknowledge new service terms as well as configure new features. - 不同安裝渠道 (APK, F-Droid, Play Store) 由於 Sign Key 不同,將無法互相更新。 Different distribution channels (APK / F-Droid / Play Store) use different signing keys and cannot upgrade across each other. - 由於 F-Droid 應用程式商店規定不能使用 Firebase 相關服務,F-Droid 版本將無法獲得即時公告推送通知。
    More…
    Due to Firebase related services not being usable in apps published on F-Droid, the F-Droid flavor will not receive push notifications for Announcements. - 由於 F-Droid 應用程式商店規定不能使用 GMS 套件,F-Droid 版本將不支援 Wear OS。 Due to GMS package not being usable in apps published on F-Droid, the F-Droid flavor will not have Wear OS support. --- ## 🔖 版本 / Version - **手機:`versionCode` 25 → 26, `versionName` 2.0.2 → 2.1.0** **Phone: `versionCode` 25 → 26, `versionName` 2.0.2 → 2.1.0** - **手錶:`versionCode` 10025 → 10026, `versionName` 2.0.2 → 2.1.0** **Watch: `versionCode` 10025 → 10026, `versionName` 2.0.2 → 2.1.0** ## 🔁 比較 / Diff - **完整變更紀錄:** https://github.com/tigerduck-app/tigerduck-app-android/compare/v2.0.2...v2.1.0 **Full changelog:** https://github.com/tigerduck-app/tigerduck-app-android/compare/v2.0.2...v2.1.0
  • Sep 10, 2026 2.0.2-fdroid
    v2.0.2 修正了一些 bug,包含課表時間修正、TigerSync 相關詞彙、Widget 顯示成其他版面或錯誤畫面的問題、翻譯優化以及行事曆顯示優化。 v2.0.2 fixed some bugs, including class table time correction, TigerSync related terms, the problem of widget displaying other layouts or error screens, translation optimization and calendar display optimization. 注意 / Notes: - 從 v1.x 升級會重新進入首次使用引導介面,讓使用者知悉新條款與設定新功能,但是會維持登入狀態。 User upgrading from v1.x will go through the setup wizard again, with logged in state being kept. This is to let user acknowledge new service terms as well as configure new features. - 不同安裝渠道 (APK, F-Droid, Play Store) 由於 Sign Key 不同,將無法互相更新。 Different distribution channels (APK / F-Droid / Play Store) use different signing keys and cannot upgrade across each other. - 由於 F-Droid 應用程式商店規定不能使用 Firebase 相關服務,F-Droid 版本將無法獲得即時公告推送通知。
    More…
    Due to Firebase related services not being usable in apps published on F-Droid, the F-Droid flavor will not receive push notifications for Announcements. - 由於 F-Droid 應用程式商店規定不能使用 GMS 套件,F-Droid 版本將不支援 Wear OS。 Due to GMS package not being usable in apps published on F-Droid, the F-Droid flavor will not have Wear OS support. --- ## 🔖 版本 / Version - **手機:`versionCode` 24 → 25, `versionName` 2.0.1 → 2.0.2** **Phone: `versionCode` 24 → 25, `versionName` 2.0.1 → 2.0.2** - **手錶:`versionCode` 10024 → 10025, `versionName` 2.0.1 → 2.0.2** **Watch: `versionCode` 10024 → 10025, `versionName` 2.0.1 → 2.0.2** ## 🔁 比較 / Diff - **完整變更紀錄:** https://github.com/tigerduck-app/tigerduck-app-android/compare/v2.0.1...v2.0.2 **Full changelog:** https://github.com/tigerduck-app/tigerduck-app-android/compare/v2.0.1...v2.0.2
  • Sep 9, 2026 2.0.1-fdroid
    v2.0.1 僅用於 Version Code 迭代,已修正之前 Android Wear Version Code 與手機 APP 相衝導致無法上架 Play Store 的問題。 v2.0.1 is only used for iterating. This fixes the collision of phone and Android Wear app version code that caused the issue of getting those apps on Play Store. 注意 / Notes: - 從 v1.x 升級會重新進入首次使用引導介面,讓使用者知悉新條款與設定新功能,但是會維持登入狀態。 User upgrading from v1.x will go through the setup wizard again, with logged in state being kept. This is to let user acknowledge new service terms as well as configure new features. - 不同安裝渠道 (APK, F-Droid, Play Store) 由於 Sign Key 不同,將無法互相更新。 Different distribution channels (APK / F-Droid / Play Store) use different signing keys and cannot upgrade across each other. - 由於 F-Droid 應用程式商店規定不能使用 Firebase 相關服務,F-Droid 版本將無法獲得即時公告推送通知。
    More…
    Due to Firebase related services not being usable in apps published on F-Droid, the F-Droid flavor will not receive push notifications for Announcements. - 由於 F-Droid 應用程式商店規定不能使用 GMS 套件,F-Droid 版本將不支援 Wear OS。 Due to GMS package not being usable in apps published on F-Droid, the F-Droid flavor will not have Wear OS support. --- ## 🔖 版本 / Version - **手機:`versionCode` 23 → 24, `versionName` 2.0.0 → 2.0.1** **Phone: `versionCode` 23 → 24, `versionName` 2.0.0 → 2.0.1** - **手錶:`versionCode` 23 → 10024, `versionName` 2.0.0 → 2.0.1** **Watch: `versionCode` 23 → 10024, `versionName` 2.0.0 → 2.0.1** ## 🔁 比較 / Diff - **完整變更紀錄:** https://github.com/tigerduck-app/tigerduck-app-android/compare/v2.0.0...v2.0.1 **Full changelog:** https://github.com/tigerduck-app/tigerduck-app-android/compare/v2.0.0...v2.0.1
  • Aug 30, 2026 1.4.4-fdroid
    v1.4.4 是一個熱修正版本 — 修正了 1.4.3 開啟即閃退的問題,以及在開學前通知要上課的問題。 v1.4.4 is a hotfix release — fixed the launch crash in 1.4.3 and class notification before the semester even started. 注意 / Notes: - 從 v1.4.3 升級不會清除任何快取,也不需要重新登入。 Upgrading from v1.4.3 clears no caches and requires no re-login. - 在 2026-09-07 開學之前,「即將上課」通知、Live Update 與「今日 / 下一堂課」Widget 會維持靜默或空白 — 這是預期行為。課表畫面本身與「週課表」Widget 不受影響,仍然完整顯示。 Before 開學 on 2026-09-07 the 即將上課 notification, the Live Update and the Today / Next Class widgets stay silent or empty — this is intended. The class table screen itself and the Week widget are unaffected and keep rendering in full. - 不同安裝渠道 (APK, F-Droid, Play Store) 由於 Sign Key 不同,將無法互相更新。
    More…
    Different distribution channels (APK / F-Droid / Play Store) use different signing keys and cannot upgrade across each other. - 由於 F-Droid 應用程式商店規定不能使用 Firebase 相關服務,F-Droid 版本將無法獲得即時公告推送通知。 Due to Firebase related services not being usable in apps published on F-Droid, the F-Droid flavor will not receive push notifications for Announcements. - 由於 F-Droid 應用程式商店規定不能使用 GMS 套件,F-Droid 版本將不支援 Wear OS。 Due to GMS package not being usable in apps published on F-Droid, the F-Droid flavor will not have Wear OS support. --- ## 🔖 版本 / Version - **手機:`versionCode` 21 → 22, `versionName` 1.4.3 → 1.4.4** **Phone: `versionCode` 21 → 22, `versionName` 1.4.3 → 1.4.4** - **手錶:`versionCode` 21 → 22, `versionName` 1.4.3 → 1.4.4** **Watch: `versionCode` 21 → 22, `versionName` 1.4.3 → 1.4.4** ## 🔁 比較 / Diff - **完整變更紀錄:** https://github.com/tigerduck-app/tigerduck-app-android/compare/v1.4.3...v1.4.4 **Full changelog:** https://github.com/tigerduck-app/tigerduck-app-android/compare/v1.4.3...v1.4.4
  • Aug 23, 2026 1.4.3-fdroid
    v1.4.3 是一個熱修版本 — 核心是支援 NTUST 早於行事曆開放的 115-1 學期。過去「現在是哪個學期」是由西元月份推算的,2026-08-20 學校已開放 115-1 時,App 仍停留在 114-2:學期選擇器選不到 115-1,而選課系統的 選課清單 頁面本身沒有任何學期標記,導致 115-1 的選課被歸到 114-2、兩個學期的課擠在同一張課表上。此版本改為以固定學期 (115-1) 為基準,並向校方公開的 querycourse 端點解析學期清單與「選課開放中」的學期,讓每個介面都對齊同一個學期。版本同時修正了一個升級時序問題 — `DataMigration` 只在 `AppState` 建構時執行,但 `BackgroundSyncWorker` 會在使用者開啟 App 前就先跑,導致清快取的遷移步驟可能刪掉剛同步好的正確資料。 v1.4.3 is a hotfix release — centred on supporting the 115-1 term NTUST opened ahead of the calendar. "Which term is it now?" used to be a gregorian-month heuristic, so on 2026-08-20 the app still said 114-2 while the school had already opened 115-1: the picker never offered 115-1, and because the 選課清單 page carries no term marker anywhere in its HTML, 115-1 enrolments were filed under 114-2 and both terms rendered into a single grid. This release pins the current term (115-1) and resolves the published term list — plus the term 選課 is actually open for — from the public `querycourse` endpoint, so every surface agrees on one term. It also fixes an upgrade-ordering bug: `DataMigration` only ran from `AppState`'s init, but `BackgroundSyncWorker` can fire before the user ever opens the app, so a cache-clearing migration step could delete data a sync had just correctly rebuilt. 注意 / Notes: - 從 v1.4.2 或更早升級的使用者:首次開啟後課表快取會被清除並立即從網路重新同步;手動新增的課程不受影響,也無需重新登入。 Users upgrading from v1.4.2 or earlier: the cached course list is dropped and re-synced from network on first launch; manually added courses are untouched and no re-login is required. - 不同安裝渠道 (APK, F-Droid, Play Store) 由於 Sign Key 不同,將無法互相更新。 Different distribution channels (APK / F-Droid / Play Store) use different signing keys and cannot upgrade across each other. - 由於 F-Droid 應用程式商店規定不能使用 Firebase 相關服務,F-Droid 版本將無法獲得即時公告推送通知。
    More…
    Due to Firebase related services not being usable in apps published on F-Droid, the F-Droid flavor will not receive push notifications for Announcements. - 由於 F-Droid 應用程式商店規定不能使用 GMS 套件,F-Droid 版本將不支援 Wear OS。 Due to GMS package not being usable in apps published on F-Droid, the F-Droid flavor will not have Wear OS support. --- ## 🐛 修正 / Fixes ### 📅 115-1 學期支援 / 115-1 Term Support - **以固定學期取代月份推算** — `AppConstants.CurrentTerm` 釘住 115-1 並定義 2026-09-07 至 2026-12-25 (台北時間) 的學期區間;今日課程、Widget、Wear 錶面、快取檔名全部改讀同一個來源。原本的月份推算保留為 `SemesterCodes.heuristic()`,日後解除釘選只需改一行;日期區間採 fail-closed **Pinned current term replaces the month heuristic** — `AppConstants.CurrentTerm` pins 115-1 with a 2026-09-07 → 2026-12-25 (Taipei) window; today's courses, the widget, the Wear tile and cache keys now all read the same source. The old heuristic survives as `SemesterCodes.heuristic()`, so lifting the pin is a one-line change, and the date window fails closed. - **新增 `SemesterCatalog`:向校方 `querycourse` 端點解析學期清單** — 使用官方課程查詢網站自己在用的公開端點;其 `LoginEnable` 旗標標示「選課系統正在運作中的那一個學期」,正是先前抓取時缺少的歸屬資訊。以 TTL 節流為每小時一次請求,端點無法連線時所有讀取端都退回釘住的學期 **New `SemesterCatalog` resolves the term list from NTUST's `querycourse` endpoint** — The same public endpoint the official course-query site uses for its own menu. Its `LoginEnable` flag marks the single term 選課 is operating on — exactly the attribution the scrape was missing. TTL-throttled to one request an hour; every reader falls back to the pinned term when the endpoint is unreachable. - **選課清單依「選課開放中的學期」歸屬,而非「進行中的學期」** — 這兩者可以差上好幾週;已套用於 `ClassTableViewModel`、`HomeViewModel` 與 `BackgroundSyncWorker` **選課 enrolments are gated and filed by the open term, not the term in session** — Those are different terms for weeks at a time. Applied in `ClassTableViewModel`, `HomeViewModel` and `BackgroundSyncWorker`. - **學期選擇器改為顯示校方公布的學期清單** — 從固定「往回推四個學期」改為 `StateFlow`,校方新公布的學期在清單抵達的同一個 session 內即可選取;未曾手動選過學期時會跟著最新學期走 (且不寫入偏好設定,避免凍結在安裝當下的學期),選過則維持使用者的選擇 **Semester picker now offers the terms NTUST publishes** — A `StateFlow` instead of a fixed "walk back four terms", so a newly published term becomes selectable in the same session the catalogue lands. An untouched picker follows the newest term (deliberately not persisted, so it keeps tracking rather than freezing on whichever term was newest at install); an explicit pick is always respected. - **資料遷移 2 → 3:清除錯誤學期的課程快取** — 在選課系統已提供 115-1 期間寫入的 `courses_<semester>.json` 會混入兩個學期的課,且不會自行重寫;此步驟只刪除 `cacheDir` 內可重建的遠端快取,`filesDir` 的手動課程完全不動 **DataMigration step 2 → 3 drops mis-filed course caches** — `courses_<semester>.json` written while 選課 was already serving 115-1 holds a mix of both terms and nothing rewrites it on upgrade. Cache-dir only: manual courses live in `filesDir`, are already per-semester, and have no remote source to rebuild from. - **學期外隱藏「今日」相關介面** — 首頁時間軸與課表的今日輪播僅在學期進行中顯示,否則會是空的、或捲到一個沒有課的日子 **"Today"-scoped surfaces hidden outside the term** — Home's time slider and the class table's today carousel render only while the term is in session; outside it they would sit empty or scrub a day with no classes. - **1151 課名縮寫** — `name-abbr` 更新至上游 tip,新增 216 筆 1151 課名,使新學期課程顯示正確縮寫而非退回完整標題 **1151 course-name abbreviations** — `name-abbr` bumped to upstream tip (216 new 1151 course names), so the new term's courses render with proper short names instead of falling back to full titles. ### 🚨 升級時序修正 / Upgrade Ordering Fix - **`DataMigration` 改由 `Application.onCreate` 執行** — 過去只在 `AppState` 的 init 執行,而 `AppState` 由 `MainActivity` 建構;但 `BackgroundSyncWorker` 以 `enqueueUniquePeriodicWork` 註冊,WorkManager 會跨版本升級保留並重新排程。升級後的第一次執行可能在沒有 Activity 的情況下同步並寫入正確的 `courses_1151.json`,接著使用者開啟 App 才跑 `migrate2to3` — 剛好刪掉那份正確的快取。`BootReceiver` 也是同一條路徑 **`DataMigration` now runs from `Application.onCreate`** — It previously ran only from `AppState`'s init, and `AppState` is constructed by `MainActivity`. But `BackgroundSyncWorker` is registered with `enqueueUniquePeriodicWork`, and WorkManager persists and reschedules that request across a package upgrade — so on the upgrade launch it could sync with no Activity, write a correct `courses_1151.json`, and then have the pending `migrate2to3` delete exactly that file when the user opened the app. `BootReceiver` reaches the cache the same way. - **遷移結果快取為 `@Singleton`** — `TigerDuckApp.onCreate` 先跑遷移,再掛上 DataCache listener 與保底的 `wearBridge.publish()`;`AppState` 改讀已快取的結果來決定是否顯示重設提示,不再自行建立實例 **Migration verdict cached on an injectable `@Singleton`** — `TigerDuckApp.onCreate` runs it first, ahead of the DataCache listener and the safety-net `wearBridge.publish()`; `AppState` reads the cached outcome for the reset prompt instead of constructing its own instance. - **對齊 iOS 的同款修正** (`tigerduck-app` 47dabe4, be3b3fc) **Mirrors the iOS fix** (`tigerduck-app` 47dabe4, be3b3fc), which hoisted the same cache-clearing migration ahead of its first sync. ### 🏠 首頁 / Home - **首頁排序改以 section id 判定** — 渲染清單會依學期過濾,索引不再對應儲存的版面順序,拖曳兩端改用 id 解析;新增區塊的對話框仍看得到完整清單,不會重複加入 **Home reorder is now id-based** — The rendered list is filtered, so its indices no longer match the stored layout; the drag handler resolves both ends by section id. The add-section dialog still sees the full list, so a hidden section can't be added twice. ## 🛠️ 內部 / Internal - **`DataCache.currentSemesterCode()` 改讀 `AppConstants.CurrentTerm.CODE`** — 移除重複的月份推算,避免與 `CourseService` 兩邊漂移把「今天的課」寫進沒人讀的學期 **`DataCache.currentSemesterCode()` reads `AppConstants.CurrentTerm.CODE`** — Removes the duplicated month heuristic so it cannot drift from `CourseService` and file "today's" courses under a semester nothing else reads. - **`:app` 加上 `unitTests.isReturnDefaultValues`** — 與 `:shared` 一致;先前任何觸及 `android.util.Log` 的 JVM 單元測試都會拋 "not mocked",遷移與快取邏輯只能靠移除 logging 才測得到 **`:app` gains `unitTests.isReturnDefaultValues`** — Matching `:shared`; previously any JVM unit test reaching a real `android.util.Log` call threw "not mocked", so migration and cache code could only be covered by stripping its logging. - **新增測試** — `CurrentTermTest`、`SemesterCatalogTest`、`SemesterCodesTest`、`DataMigrationCourseCacheTest` **New tests** — `CurrentTermTest`, `SemesterCatalogTest`, `SemesterCodesTest`, `DataMigrationCourseCacheTest`. - **F-Droid metadata 更新至 1.4.3-fdroid / versionCode 21** **F-Droid metadata bumped to 1.4.3-fdroid / versionCode 21.** - **`localization` 與 `name-abbr` submodule pin 更新以通過 CI 的 Submodules up to date 檢查** **`localization` and `name-abbr` submodule pins refreshed to satisfy the CI "Submodules up to date" gate.** ## 🔖 版本 / Version - **手機:`versionCode` 20 → 21, `versionName` 1.4.2 → 1.4.3** **Phone: `versionCode` 20 → 21, `versionName` 1.4.2 → 1.4.3** - **手錶:`versionCode` 20 → 21, `versionName` 1.4.2 → 1.4.3** **Watch: `versionCode` 20 → 21, `versionName` 1.4.2 → 1.4.3** ## 🔁 比較 / Diff - **完整變更紀錄:** https://github.com/tigerduck-app/tigerduck-app-android/compare/v1.4.2...v1.4.3 **Full changelog:** https://github.com/tigerduck-app/tigerduck-app-android/compare/v1.4.2...v1.4.3