igorwojda/android-showcase
52.5
Adequate · 22 September 2026
3.2k
lines of production code
Kotlin
primary language
7
measurements over time
What this system is
This is an Android showcase application built with Jetpack Compose, featuring a modular architecture that separates concerns into album, favourite, and settings domains. It implements a clean architecture with explicit use cases, repositories, and ViewModels, supported by a modernized Gradle build system using convention plugins. The app provides UI for browsing albums with local caching, managing favorites, and viewing open-source licenses, all underpinned by comprehensive unit and static analysis tests.
How it got here
2018 — Project initialization and build system migration
6 changes.
The period marks the initialization of the Android 2.0 showcase app, establishing its documentation, code of conduct, and modern architecture using Jetpack Compose and Koin. Concurrently, the project underwent a significant build system overhaul, migrating from a legacy Gradle configuration to convention plugins and type-safe accessors, while updating the Gradle wrapper and ProGuard settings.
2025 — Album feature implementation and architecture standardization
15 changes.
This period focused on implementing the album feature, including its domain, data, and presentation layers using Jetpack Compose and Room. Simultaneously, the codebase established standardized build logic, test utilities, and static analysis rules to support future development.
Features
Add settings and About Libraries screens to the app
The Settings feature now includes a Settings screen that displays an 'Open Source Licenses' option, and an About Libraries screen that uses the LibrariesContainer component to display third-party library information. This introduces new UI components, view models, and Koin modules for both screens, enabling users to view open source licenses directly within the app.
feature/settings/src/main/kotlin/com/igorwojda/showcase/feature/settings · high confidence
Add settings screen and about libraries UI strings
The settings feature now includes the necessary Android manifest and ProGuard configuration files, along with a new strings resource file. This adds the UI text for the main settings screen (title, about, open source licenses) and the about libraries screen (title, back navigation), enabling the display of these interface elements to the user.
feature/settings · high confidence
Added initial configuration files for album and favourite features
The album and favourite feature modules were initialized with essential configuration files. Each module now includes a ProGuard rules file for code shrinking and obfuscation, an AndroidManifest.xml file defining the module's manifest, and, for the album feature, a strings.xml file containing UI text resources such as search hints, titles, and content descriptions. These changes establish the foundational structure for these features within the application.
feature/album · high confidence
Album feature introduces local caching via Room database
The album feature now implements a data layer that caches album information locally using Room, allowing the app to retrieve album data from the database when the network is unavailable or after an error occurs. This is achieved by adding API response models, a Room database with DAOs, mappers for converting between API, Room, and domain models, and a repository implementation that falls back to the local cache. Additionally, Koin modules are added to wire the data and presentation layers, including ViewModels for the album list and detail screens.
feature/album/src/main/kotlin/com/igorwojda/showcase/feature/album/data · high confidence
Introduces base UI components and state management infrastructure
Adds a new set of reusable Compose UI components including \ErrorAnim\, \LoadingIndicator\, \LabeledAnimation\, \PlaceholderImage\, \TextTitleLarge\, \TextTitleMedium\, and \UnderConstructionAnim\. Additionally, introduces a base \BaseViewModel\ with state time-travel debugging, a generic \ApiResult\ sealed interface for handling network responses, and supporting resources like dimensions, colors, and string constants.
feature/base/src/main/kotlin/com/igorwojda/showcase/feature/base · high confidence
New build-logic convention plugins for Android modules
The build-logic module now includes a set of new Gradle convention plugins that standardize the configuration for Android application and library modules. These plugins automatically apply and configure essential tools and dependencies, including the AboutLibraries plugin (with duplicate merging enabled), KSP, Compose, and various utility plugins like Detekt, Spotless, and EasyLauncher. The changes ensure that all Android modules share a consistent baseline configuration for SDK versions, build features, and common dependencies.
build-logic · high confidence
New test utilities for coroutine and task scheduling
The library/test-utils module now includes JUnit 5 extensions to simplify testing asynchronous code. CoroutinesTestDispatcherExtension replaces the main coroutine dispatcher with a test dispatcher, while InstantTaskExecutorExtension forces synchronous execution of Architecture Components tasks. These utilities help developers write deterministic tests for background operations.
library, library/test-utils · high confidence
Project initialization and documentation scaffolding
The repository was initialized with essential project documentation and configuration files. This includes a comprehensive README detailing the Android 2.0 showcase app's architecture, tech stack, and usage; a DeveloperReadme covering known issues with tools like Detekt, Gradle, and Kotlin; a Code of Conduct; a Contributing guide; and configuration files for code quality (EditorConfig, Detekt, .gitignore) and automated dependency updates (renovate.json).
(repo-wide) · high confidence
Architecture
Migrated build configuration to Gradle convention plugins and type-safe project accessors
The project's build system has been restructured to use Gradle convention plugins, moving common build logic from \buildSrc\ into a dedicated \build-logic\ module. This introduces type-safe project accessors (e.g., \projects.feature.base\) and a centralized \libs.versions.toml\ catalog for dependency management. As a result, individual module \build.gradle.kts\ files are significantly simplified, and the root \build.gradle.kts\ now applies these convention plugins to all subprojects.
(dependencies) · high confidence
Behavioural changes
Album feature domain layer restructured with explicit use cases and repository interface
The album feature's domain layer has been reorganized to introduce a clear separation of concerns. A new \AlbumRepository\ interface defines the data access contract, while \GetAlbumListUseCase\ and \GetAlbumUseCase\ encapsulate the business logic for retrieving album data. This structure supports the album functionality by providing distinct entry points for listing and detailed views, leveraging Koin for dependency injection via the newly created \AlbumKoinModule\.
feature/album/src/main/kotlin/com/igorwojda/showcase/feature/album, feature/album/src/main/kotlin/com/igorwojda/showcase/feature/album/domain · high confidence
Album list and detail screens migrated to Jetpack Compose
The album list and album detail screens have been rewritten using Jetpack Compose, replacing the previous Fragment-based implementation. Users will now see a modern UI for browsing albums in a grid with a debounced search bar, and viewing album details including cover art, artist name, tags, and track lists. The implementation introduces new composables for the search bar, album grid, and album detail view, along with corresponding ViewModels and UI state models.
feature/album/src/main/kotlin/com/igorwojda/showcase/feature/album/presentation/screen · high confidence
Favourite feature restructured into layered Koin modules
The Favourite feature has been restructured to separate concerns into distinct Koin modules for data, domain, and presentation layers, each defined in its own file. The presentation layer now includes a Compose-based FavouriteScreen that displays an 'Under Construction' animation, reflecting the initial state of this feature.
feature/favourite/src/main/kotlin/com/igorwojda/showcase/feature/favourite · medium confidence
Migrate to Jetpack Compose and modernize app architecture
The app's main entry point has been replaced with a Compose-based \MainShowcaseActivity\ that utilizes a \NavHost\ for declarative navigation between screens, replacing the previous \MainActivity\ and XML-based layouts. A \BottomNavigationBar\ has been added to the main screen, providing navigation to Albums, Favorites, and Settings. The application now initializes Koin for dependency injection and configures OkHttp interceptors for network requests. Additionally, the app icon has been updated to support adaptive icons with monochrome variants, and the theme has been migrated to \Theme.Showcase\ with splash screen support.
app/src · high confidence
Removed buildSrc configuration files
The buildSrc module's Kotlin files defining application configuration, core versions, Gradle dependencies, library dependencies, and module dependencies have been deleted. This removes the centralized version and dependency management from the build script, likely as part of a broader migration to a different dependency management approach.
buildSrc · high confidence
Updated ProGuard configuration file references
The app's ProGuard configuration files were updated to reflect a shift in the build system: the proguard-rules.pro file now references build.gradle instead of build.gradle.kts, and the .gitignore file was removed from the app directory.
app · medium confidence
Test coverage
Added domain layer tests for album feature; Added static code analysis tests for Android, Clean Architecture, and general coding standards; Added tests for album data layer mappers and repository; Added unit tests for album feature ViewModels; Added unit tests for settings view models.
Dependencies
Updated Gradle wrapper to version 9.4.1
The Gradle wrapper has been upgraded from version 4.10.2 to 9.4.1. This update changes the distribution URL to the 'bin' variant instead of 'all', and adds network timeout and distribution validation settings to the wrapper configuration.
gradle · high confidence
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
How this codebase got here
This is the PUBLIC form of this artifact. Findings are listed in full, but the details of SECURITY findings — which rule fired, in which file, on which line, and how to fix it — are deliberately withheld, and any secret-scanner results are excluded entirely. Where detail is absent here it was REMOVED FOR PUBLICATION; it is not missing from the analysis. The complete artifact is available from the repository owner.
Score
- CAI 57 → 52 (-4.9)
- Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.
Lenses
- Code Health 100 → 100 (+0.2)
- Architecture 100 → 87 (-12.7)
- Maturity 58 → 59 (+1.3)
- Readiness 70 → 41 (-28.5)
- Security 50 → 80 (+29.5)
- Domain Modelling 55 → 51 (-4.4)
Resolved (35)
- Coverage not included — suite not readable by the collector
- Dependency hygiene not measured — dependency manifest found but not parsed for hygiene
- Duplicated block (10 lines × 2) (build-logic/src/main/kotlin/com/igorwojda/showcase/buildlogic/ApplicationConventionPlugin.kt)
- Duplicated block (28 lines × 2) (build-logic/src/main/kotlin/com/igorwojda/showcase/buildlogic/FeatureConventionPlugin.kt)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- …and 15 more
New (37)
- Dependency hygiene PARTLY measured — Maven/Gradle declarations read, no dependency graph resolved
- Documentation: no installation or build instructions (README.md)
- Documentation: no usage examples (README.md)
- Duplicated block (10 lines × 2) (build-logic/src/main/kotlin/com/igorwojda/showcase/buildlogic/ApplicationConventionPlugin.kt)
- Duplicated block (49 lines × 2) (build-logic/src/main/kotlin/com/igorwojda/showcase/buildlogic/FeatureConventionPlugin.kt)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- …and 17 more
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
igorwojda/android-showcase was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.
About this page
- The score is its most recent published measurement, taken on 22 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
- Measured at commit 28d17111ae00dadc38cc401d6636eff3222c701a — the exact code this score is about.
- Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
- Measured by watchdog.canine.dev using codehealth-analyzer preprod-821afab8930d.