CLAUDE.md
feature/apps/CLAUDE.mdCLAUDE.md
Quality
58/100
Scores the file, not the repository.Length
442 words
5 headings · 2 code blocksRepository
17k
— · pushed 5 days agoLast changed
3 days ago
First indexed 3 days ago.1# Apps Feature23Installed-apps manager. Lists apps installed through GHS, launches them, checks updates. Android-only in nav (bottom-nav hidden on Desktop).45## Structure67```8feature/apps/9├── domain/repository/AppsRepository.kt10├── data/ AppsRepositoryImpl + di11└── presentation/12 ├── AppsViewModel / State / Action / Event / Root13 ├── components/ app item cards, update badges, LinkAppBottomSheet, AdvancedAppSettingsBottomSheet, ApkInspectSheet, import banner14 ├── import/ # ExternalImportRoot/ViewModel — Obtainium import/export + manual-link15 └── starred/ # StarredPickerRoot/ViewModel — APK-shipping subset of user's GitHub stars16```1718## Key interface1920```kotlin21interface AppsRepository {22 suspend fun getApps(): Flow<List<InstalledApp>>23 suspend fun openApp(installedApp: InstalledApp, onCantLaunchApp: () -> Unit = {})24 suspend fun getLatestRelease(owner, repo, includePreReleases = false, sourceHost: String? = null): GithubRelease?25 suspend fun fetchRepoInfo(owner, repo, sourceHost: String? = null): GithubRepoInfo?26 suspend fun linkAppToRepo(..., sourceHost: String? = null)27 /* exportApps / exportObtainium / importApps */28}29```3031## Navigation3233`GithubStoreGraph.AppsScreen`, `ExternalImportScreen`, `StarredPickerScreen`.3435## Notes3637- Uses `InstalledAppsRepository` + `SyncInstalledAppsUseCase`. `openApp` via `AppLauncher`. `PackageMonitor` + `Installer` (Android). Data layer injects `ForgejoClientRegistry`; non-null `sourceHost` on `getLatestRelease` / `fetchRepoInfo` / `linkAppToRepo` routes to the Forgejo client (else default GitHub-direct path).38- **`sourceHost` propagation:** `InstalledApp.sourceHost` persisted on link; `AppsAction.OpenAppDetails` / `OpenRepoDetails` + `AppsEvent.NavigateToRepo` carry `sourceHost`; `AppsRoot.onNavigateToRepo` is `(repoId, sourceHost, owner, repo) -> Unit` and routes to `GithubStoreGraph.DetailsScreen(sourceHost = …)`.39- **Multi-source backend match:** `RepoSuggestion` candidates may come from GitHub *or* a Forgejo host; the link sheet displays the source host chip per row so the user picks the right forge variant.40- Sort + search: `AppSortRule` enum (UpdatesFirst default, AlphabeticalAZ, RecentlyAdded, RecentlyUpdated). Persisted in DataStore. Inline search filters appName / packageName.41- Per-app actions: Ignore-updates (silence badge), Skip-this-release (per-tag, auto-clear on next release), Advanced filter (regex on asset names + monorepo fallback), Pin variant (token-set + glob fingerprint), Inspect APK (decoded manifest sheet).42- Link sheet (`LinkAppBottomSheet`) sorts installed apps by `InstallerCategory` (`core/domain`): SIDE_STORE (F-Droid / Obtainium / Aurora / Droid-ify / GHS itself) → SIDELOADED → VENDOR_STORE (Samsung / Huawei / Xiaomi / Oppo / vivo / Honor / Amazon) → PLAY_STORE → SYSTEM_UPDATE. `DeviceApp.installerPackageName` (via `PackageManager.getInstallSourceInfo` / pre-30 fallback) + `isUpdatedSystemApp` (via `FLAG_UPDATED_SYSTEM_APP`) feed the classifier. Each row shows a tonal source chip — F-Droid / Obtainium surfaces first; Samsung Authentication Framework and friends drop to the bottom.43- Auto-update on resume: `OnLifecycleResume` fires `autoCheckForUpdatesIfNeeded` (30-min cooldown) — catches drift after external install while GHS background-killed.44- External import (`import/`): Obtainium JSON import/export with pre-import summary buckets (imported / already-tracked / non-GitHub-skipped); manual-link-only path. **Skip-on-slow-scan:** after `~5s` `state.isSkipAvailable` flips true → user can fire `OnSkipLongScan` to abort the in-flight backend lookup and move on without waiting for the remaining candidates.45- Starred picker (`starred/`): scans signed-in user's GitHub stars, surfaces APK-shipping repos. Resumes mid-scan on rate-limit.46
Also in kurikomi-labs/komi-store
Diff this repo’s formatsOne repository carrying more than one format is the comparison this product exists for: does anyone actually write different content in each file, or is one a copy of the other?
| Repository | Format | Stack | Covers | Score | Changed |
|---|---|---|---|---|---|
| kurikomi-labs/komi-storefeature/dev-profile/CLAUDE.md · 17k | CLAUDE.md | arch | 40/100 | 3 days ago | |
| kurikomi-labs/komi-storefeature/favourites/CLAUDE.md · 17k | CLAUDE.md | arch | 40/100 | 3 days ago | |
| kurikomi-labs/komi-storefeature/home/CLAUDE.md · 17k | CLAUDE.md | arch | 54/100 | 3 days ago | |
| kurikomi-labs/komi-storefeature/profile/CLAUDE.md · 17k | CLAUDE.md | arch | 54/100 | 3 days ago | |
| kurikomi-labs/komi-storefeature/tweaks/CLAUDE.md · 17k | CLAUDE.md | archmonorepo | 54/100 | 3 days ago | |
| kurikomi-labs/komi-storefeature/recently-viewed/CLAUDE.md · 17k | CLAUDE.md | arch | 35/100 | 3 days ago | |
| kurikomi-labs/komi-storefeature/search/CLAUDE.md · 17k | CLAUDE.md | arch | 54/100 | 3 days ago | |
| kurikomi-labs/komi-storefeature/starred/CLAUDE.md · 17k | CLAUDE.md | arch | 54/100 | 3 days ago | |
| kurikomi-labs/komi-storeAGENTS.md · 17k | AGENTS.md | buildlint-formatstylearch+1 | 97/100 | 3 days ago | |
| kurikomi-labs/komi-storeCLAUDE.md · 17k | CLAUDE.md | buildstylearchgit | 78/100 | 3 days ago | |
| kurikomi-labs/komi-storefeature/auth/CLAUDE.md · 17k | CLAUDE.md | archsecurity | 58/100 | 3 days ago | |
| kurikomi-labs/komi-storefeature/details/CLAUDE.md · 17k | CLAUDE.md | arch | 53/100 | 3 days ago |
Diff against feature/dev-profile/CLAUDE.md Diff against feature/favourites/CLAUDE.md Diff against feature/home/CLAUDE.md Diff against feature/profile/CLAUDE.md Diff against feature/tweaks/CLAUDE.md Diff against feature/recently-viewed/CLAUDE.md Diff against feature/search/CLAUDE.md Diff against feature/starred/CLAUDE.md Diff against AGENTS.md Diff against CLAUDE.md Diff against feature/auth/CLAUDE.md Diff against feature/details/CLAUDE.md
Similar configs
Same format, overlapping stack, ranked by quality.
| Repository | Format | Stack | Covers | Score | Changed |
|---|---|---|---|---|---|
| Adit-Jain-srm/NightmareNetCLAUDE.md · 45 | CLAUDE.md | buildtestlint-formatstyle+6 | 100/100 | 3 days ago | |
| nimbalyst/nimbalystpackages/android/CLAUDE.md · 1.4k | CLAUDE.md | setupbuildstylearch+2 | 100/100 | 3 days ago | |
| stacklok/toolhiveCLAUDE.md · 2.0k | CLAUDE.md | buildteststylearch+4 | 100/100 | 3 days ago | |
| dotCMS/corecore-web/CLAUDE.md · 949 | CLAUDE.md | teststylearchtesting-strategy+3 | 100/100 | 3 days ago | |
| microsoft/playwrightCLAUDE.md · 94k | CLAUDE.md | buildtestlint-formatstyle+7 | 100/100 | 3 days ago | |
| filamentphp/filamentCLAUDE.md · 32k | CLAUDE.md | buildtestlint-formatstyle+7 | 100/100 | 3 days ago | |
| livewire/livewireCLAUDE.md · 24k | CLAUDE.md | setupbuildteststyle+4 | 100/100 | 3 days ago | |
| bagisto/bagistoCLAUDE.md · 28k | CLAUDE.md | setupbuildteststyle+5 | 100/100 | 3 days ago |
