Skip to content
This repository was archived by the owner on Jun 3, 2026. It is now read-only.

Known Issues

Aarsh edited this page May 24, 2026 · 1 revision

Known Issues

Open rough edges in the main branch at the time of writing (v3.8-beta.8). Each one is independently small — they accumulate because nothing has been urgent enough to dedicate a release to.

Priority is roughly highest-impact-first.


1. play-services-auth (and a few other deps) bypass the version catalog

app/build.gradle.kts hard-codes coordinates like:

implementation("com.google.android.material:material:1.14.0-alpha08")
implementation("androidx.core:core-ktx:1.12.0")
implementation("androidx.work:work-runtime-ktx:2.9.0")
// …

The version catalog (gradle/libs.versions.toml) only knows about a handful of these. Tidiness fix: move all implementation(...) declarations into libs.versions.toml and reference them via libs.xxx. Doesn't change behaviour, just consolidates version pinning into one file so dependencyUpdates reports are complete.


2. Web OAuth Client ID is hardcoded in MainActivity

private val WEB_CLIENT_ID = "663138385072-bke7f5oflsl2cg0e5maks0ef3n6o113u.apps.googleusercontent.com"

The Google Services plugin generates R.string.default_web_client_id from google-services.json. Switching to that string resource means you only have to update google-services.json to repoint at a new Firebase project.

.setServerClientId(getString(R.string.default_web_client_id))

3. confirmMarkInactive / confirmDeleteSubscription in SubscriptionActionHelper are dead code

The helper defines swipe-left → pause and another delete path, but setupSwipeActions only wires onSwipeRight → confirmMarkAsPaid. The pause and delete methods are unreachable.

Two options:

  • Delete them — straight removal, simpler helper.
  • Wire them up — left-swipe → pause sheet, long-press → delete sheet (or similar).

The analytics signal (subscription_status_change event) will confirm "dead" if it stays at zero across a release window — see Analytics & Audit for the audit recipe.


4. bottom_sheet_about.xml has a stale hardcoded version preview

The XML default text is Version 3.8-beta.3 (46). It gets overwritten at runtime by AboutBottomSheet.kt with the actual packageInfo.versionName + versionCode, so it's never user-visible — but the XML preview in Studio (and any reviewer reading the XML) sees the old text. Replace with a generic tools:text="Version 1.0 (1)" so the staleness is obvious.


5. play_services_auth cert hashes shipped in google-services.json include some that are no longer in active use

The current file has 5 different SHA-1 fingerprints for com.hora.varisankya (debug keystores from multiple machines + upload + Play app-signing). Some of those keystores may have been retired. Worth pruning during the next Firebase Console pass to keep the OAuth allow-list lean.


6. bottom_sheet_payment.xml no longer has a tools: preview hint for the hidden empty-history state

The empty state has android:visibility="gone" but no tools:visibility="visible", so the Studio preview never shows it. Adding tools:visibility="visible" to the no_history_container helps when iterating on the empty-state layout.


7. Notification taps that open the app don't log a manual analytics event

SubscriptionNotificationWorker.sendNotification creates a tap intent that just opens MainActivity with FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_CLEAR_TASK. Firebase Analytics' built-in notification_open event only fires for FCM messages, not for manually-posted ones. If you want to measure tap-through, add an Analytics.notificationTap() call inside MainActivity.onNewIntent keyed off a custom intent extra.


8. No CI

There's no GitHub Actions or other CI configured. Every release is built by hand. Adding a simple build-and-lint workflow on PRs would catch trivial breakage early. Secrets would need to come from Actions secrets (don't try to use Bitwarden CLI from CI).


9. nul file in the repo working tree

A stray nul file (about 120 bytes of garbled path text) appears in the repo on Windows shells where a > nul redirect was run via bash instead of cmd.exe — bash treats nul as a filename and creates it. It's untracked and gitignored-by-convention (it's not in .gitignore because it shouldn't exist). Just delete it: rm nul.


10. .idea/ is partly committed

Most of .idea/ is tracked. Only shelf/, workspace.xml, and caches/libraries/modules/navEditor/assetWizardSettings/deploymentTargetSelector.xml are gitignored. The committed parts (code style, run configurations) make sense to share; the rest can create occasional churn in git status. If it gets annoying, expand .idea/.gitignore.


Priority cleanup

If you want to walk through these in order of "actually likely to bite you":

  1. #1 (version catalog) and #2 (hardcoded Web Client ID) — both tiny refactors that improve future-changeability.
  2. #3 — once the analytics audit confirms dead, delete cleanly.
  3. #5 — fingerprint hygiene during the next Firebase Console pass.
  4. #7 — only matters if notification tap-through becomes a metric you care about.
  5. #4, #6 — cosmetic, Studio-preview only.
  6. #8 — quality-of-life; not urgent.
  7. #9, #10 — annoying, never breaks anything.

Clone this wiki locally