choiminyeong b1a00233b0 TASK-036: push notification when a favorited repository gets a new push
Gitea's own notification feed doesn't fire for plain pushes (only
issue/PR activity), so this app now periodically checks each favorited
repository's most recent push time itself and posts a local
notification when it advances past what was last seen.

- FavoritePushDetector: pure comparison logic, never notifies on a
  repository's first sighting (only a real advance counts), avoiding a
  notification storm the first time this feature ever runs.
- GetLatestPushEpochMillisUseCase: extracts the same 'newest branch
  commit time' heuristic RepositoryListViewModel already uses for the
  repository list's own last-push row, as a shared, reusable use case.
- SharedPreferencesLastSeenPushStore: one long per favorited repo, not
  Room (docs/architecture.md reserves Room for offline caching).
- FavoritePushCheckWorker: 15-minute WorkManager periodic job,
  network-constrained, no-ops cleanly with no session or no favorites.
- POST_NOTIFICATIONS requested at runtime on API 33+; a denial
  degrades safely, the worker still runs and updates its baseline.

No deep link from the notification to the specific repository yet --
tapping it opens the app normally. End-to-end delivery (a real push
landing, 15 minutes elapsing) is unit-tested and the scheduling/
permission wiring is live-confirmed (prompt appeared, was granted, no
crash), but an actual notification firing hasn't been observed within
this same live-testing session.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-29 17:15:35 +09:00
2026-08-25 21:42:50 +09:00

UBGitea

Android client for the Ubisam Paju Gitea instance.

The repository currently contains the engineering harness that governs collaborative development by Codex and Claude. Product code will be bootstrapped through the tasks under tasks/.

Start here

  1. Read AGENTS.md.
  2. Read docs/product.md and docs/architecture.md.
  3. Select one task from tasks/.
  4. Assign one writer and one independent reviewer.
  5. Record build and test evidence before marking the task complete.

OAuth uses Authorization Code with PKCE and does not use a client secret.

Local checks

Open the repository root in Android Studio, or use JDK 17 with Android SDK 36 installed and run:

./gradlew assembleDebug
./gradlew testDebugUnitTest
./gradlew lintDebug

The application uses ID com.ubisam.ubgitea and supports Android 9 (API 28) and later. See ADR-001.

Description
No description provided
Readme 88 MiB
Languages
Kotlin 99.5%
PowerShell 0.5%