Releases: stephenWanjala/Multiply
Releases · stephenWanjala/Multiply
Release Build #22
What's new
- Timed Mode for quizzes — beat the countdown on every question
- Animated timer ring, low-time alerts, and streak tracking
- Answers auto-advance and reveal the correct choice instantly
- New in-quiz settings sheet to toggle Timed Mode on or off
- Timed-out questions now show up separately in your recap
Full Changelog: v21...v22
Release Build #21
Multiply v21 — Release Notes
A big refresh focused on a cleaner, more consistent look across the entire game — plus a major build tooling upgrade and a tidier architecture underneath.
✨ What's new
A refreshed look and feel
Every screen has been rebuilt with a cleaner, more playful design system.
- Welcome screen — new hero card with an animated mascot, a dedicated high score banner, and a pulsating Play button that reacts to your latest stats.
- Game mode selection — replaced the heavy neumorphic cards with a bright hero header and a step-by-step mode → difficulty flow.
- How to Play — bullet lists are out; clear, icon-led step cards are in.
- Settings — reorganized into tidy sections with tile-based difficulty and theme pickers, plus cleaner audio toggles.
- Bubble Mode gameplay — a new HUD bar with stat chips, a redesigned spherical math bubble with a countdown progress ring, a simpler pause overlay, and a friendlier game-over dialog with animated score counting.
- Quiz Mode — polished question cards, new answer tiles with a satisfying selection stripe, a circular score indicator, and streamlined question-by-question recap rows.
Redesigned recap and celebrations
- New star rating system (up to 3 stars) based on your accuracy.
- Animated score counter and circular progress ring.
- Stat cards showing correct, wrong, and accuracy at a glance.
- Confetti effects when you do well. 🎉
- Haptic feedback on score milestones.
Typography and color refresh
- Comic Sans has been retired in favor of the Nunito font family across the whole app.
- New vibrant Material 3 color scheme with improved light and dark theme support.
- A new
MultiplyColorssemantic palette (success, warning, star, etc.) for consistent meaning across screens.
A proper design system
Introduced a reusable set of building blocks:
AnimatedFloatingSymbolsBackgroundMultiplyButton,MultiplyCard,MultiplyStaticCard,MultiplyDialog- A shared
Spacingsystem so everything lines up the way it should.
🔧 Under the hood
New architecture
- New
GamePreferencesRepositorycentralizes all high score and difficulty settings via DataStore. - Both
GameViewModel(Bubble Mode) andQuestionsViewModel(Quiz Mode) now use this repository. - Migrated from the older
onActionpattern to an MVI-styleonEvent+effects(Channel) approach — cleaner state handling and better separation of one-shot side effects. - Navigation renamed from
MutiplyNav→MultiplyNavand updated for the new event-based ViewModels. - Utility classes (
Particle,BitmapFromDrawable,RandomOffset) moved fromutlis→util.
Build tooling upgrade
- AGP 8.13.2 → 9.1.1
- Kotlin 2.3.0 → 2.3.20
- Gradle 9.2.1 → 9.4.1
- kotlinx.serialization → 3.4.0
- Koin BOM → 4.2.0-beta4
- Also bumped: Compose BOM, Material3, Navigation Compose, and other dependencies.
- Migrated to the new Android DSL:
compileSdk { version = release(37) },targetSdk 37,android.builtInKotlin,android.newDsl. - Dropped the standalone
kotlin-androidplugin (now built in viaandroid.builtInKotlin). - Added
foojay-resolver-conventionfor automatic JDK toolchain provisioning.
CI improvements
- The release workflow in
.github/workflows/build-signed-apk.ymlnow uses job-levelcontents: writepermissions instead of an explicitGITHUB_TOKEN.
Full Changelog: v19...v21
Release Build #19
build: Upgrade Compose BOM, Koin, and Material3 dependencies - Update `composeBom` to `2026.01.00`. - Upgrade `koin-bom` to `4.2.0-beta3`. - Update `material3` to `1.5.0-alpha12`.
Release Build #18
v18 design: Shrink application png assets
Release Build #17
refactor: Migrate from Hilt to Koin and optimize custom modifiers - Replace Dagger Hilt with Koin for dependency injection; updated `MultiplyApp` to initialize Koin and converted `AppModule` to use Koin DSL. - Update ViewModels (`GameViewModel`, `QuestionsViewModel`) to remove Hilt annotations and switch navigation injection to `koinViewModel`. - Refactor `neumorphicShadow` custom modifier to use the `Modifier.Node` API (via `ModifierNodeElement` and `DrawModifierNode`) instead of `composed` for improved performance. - Upgrade `kotlin` to `2.3.0` and `agp` to `8.13.2`. - Bump `composeBom` to `2025.12.01`, `material3` to `1.5.0-alpha11`, and `activityCompose` to `1.12.2`. - Add `com.github.skydoves.compose.stability.analyzer` plugin to build scripts.
Release Build #16
build: Upgrade Gradle to 9.2.1 and overhaul R8 optimizations - Upgrade Gradle Wrapper to `9.2.1` and update accompanying shell scripts. - Enable R8 full mode and optimized resource shrinking in `gradle.properties`. - Rewrite `proguard-rules.pro` to apply aggressive optimizations, strip `android.util.Log` calls, and remove Kotlin intrinsic null checks. - Update dependencies: `composeBom` to `2025.12.00`, `material3` to `1.5.0-alpha10`, `activityCompose` to `1.12.1`, and `kotlinxSerialization` to `3.3.3`. - Remove deprecated `release.sh` and `release-notes.md` files. - Update application assets, including launcher icons and mascot images.
Release Build #15
build: Upgrade dependencies and refine Kotlin compiler options - Bump `lifecycleRuntimeKtx` to `2.10.0` and `activityCompose` to `1.12.0`. - Update `composeBom` to `2025.11.01` and `material3` to `1.5.0-alpha09`. - Upgrade `datastorePreferences` to `1.2.0`. - Migrate `kotlinOptions` to the newer `kotlin.compilerOptions` block in `app/build.gradle.kts` using `JvmTarget`. - Add `-Xannotation-default-target=param-property` to free compiler args.
Release Build #14
feat(game): Implement predictive back gesture on GameMode screen - Replaced `BackHandler` with `PredictiveBackHandler` on the GameMode selection screen to support Android's predictive back gesture. - Added animations to the screen content (scaling, translation, and alpha) that react to the back gesture's progress. - Enabled the `enableOnBackInvokedCallback` attribute in `AndroidManifest.xml` for the main activity. - Updated various Gradle dependencies, including Android Gradle Plugin, Kotlin, Compose BOM, and Material3.
Release Build #13
v13 GameMode selection Screen To draw Edge to Edge
Release Build #12
feat(ci): Rename signed APK in workflow for consistent output naming - Added a step to rename the signed APK to `Multiply.apk` after signing. - Updated environment variable `SIGNED_APK` to reflect the new file path.