- Haptic feedback: optional vibration on every button tap; toggled in Settings (
AppPreference.HAPTIC_FEEDBACK,HapticFeedback.kt) - Compact mode: result display area compresses automatically on small or landscape screens; layout breakpoints defined in
result_pad.xmlfor sw360dp, sw400dp, sw480dp
- Migrated all
TextAppearancestyles fromTextAppearance.MaterialComponents.*toTextAppearance.Material3.*parents - Re-pointed all custom theme attrs (
operatorBtnColor,numPadPrimary,textPrimary, etc.) to M3 semantic tokens so Dynamic Colors works automatically - Added
MaterialDynamicThemestyle — activatesDynamicColors.applyToActivityIfAvailable()on Android 12+ to colour the UI from the device wallpaper - Added
DYNAMICtoAccentThemeenum; Dynamic swatch appears in the colour picker only on API 31+ devices - Centralised accent theme application in
BaseActivity—HistoryActivityandAboutActivitynow correctly inherit the selected accent theme - Replaced Open Sans with Google Sans across all
TextAppearancestyles
- DynamicColors broken on API 27+ devices:
values-v27/themes.xmlandvalues-night-v27/themes.xmlwere not updated during the Material You migration — custom attrs (textPrimary,textSecondary,border,operatorBtnColor, etc.) were pointing to static colour resources instead of M3 semantic tokens, so Dynamic Colors had no effect on the vast majority of active devices
- Replaced static mipmap launcher icon with
ic_splash_animated.xml— anAnimatedVectorDrawablecontaining the four calculator symbols (+, −, ×, =); on API 31+ they cascade-pulse with a 150 ms stagger; the first frame is fully rendered so the compat layer displays correctly on Android 7+ - Icon uses
@color/splashIcon(dark in light mode, white in dark mode) against@color/background— no forced brand colour that clashes with accent themes
button_corner_radiusraised0dp→16dp— all buttons now have M3 medium-shape rounded corners- Added
3dpmargins to each button and4dpouter padding to numpad container — creates visible gaps between buttons - Operator buttons (÷, ×, +, −) switched to
NumPad.Secondarystyle — accent-colour fill with white text, clearly distinct from number keys - Removed flat border dividers between number and operator columns
- Each settings section (General, User Interface, App) wrapped in a
MaterialCardViewwith12dpcorner radius andcolorSurfaceContainerHighbackground - Internal row dividers use
?attr/colorOutlineVariant - Added Haptic Feedback toggle row with vibrate icon
- Items (Join Beta, Open Source, Privacy Policy, Terms of Use) regrouped into a single
MaterialCardViewmatching the settings page pattern — 72dp rows with two-line title/subtitle layout (Body1/Body2) andcolorOutlineVariantdividers between items - All
MaterialCardViewcorner radii bumped from0dpto12dp
- Upgraded Gradle wrapper 8.13 → 9.4.1 (required by AGP 9.2)
- Upgraded AGP 8.11.1 → 9.2.0 → 9.2.1
- Upgraded Kotlin 2.1.20 → 2.3.21 (now managed via
android.kotlin.version, KGP classpath removed) - Upgraded KSP to independent versioning: 2.3.8
- Upgraded Hilt 2.57 → 2.59.2 (required for AGP 9 — drops
BaseExtensiondependency) - Upgraded Firebase perf-plugin 2.0.0 → 2.0.2 (fixes AGP 9 Transform API removal)
- Migrated from
kotlinOptions { jvmTarget }tokotlin { jvmToolchain(17) } - Bumped
compileSdk35 → 36
- Bumped
targetSdkVersion35 → 36 - Added
android:enableOnBackInvokedCallback="true"toAndroidManifest.xmlto enable predictive back gesture animations (all activities already useOnBackPressedCallback)
- Enabled
minifyEnabled trueandshrinkResources truein the release build type - Added ProGuard keep rules for: BigMath, custom XML-inflated views, enums, Firebase Crashlytics stack traces, TapTargetView, Play Review API
- Enabled source file and line number attributes so Crashlytics stack traces remain readable after obfuscation
- Release APK size reduced ~68%: 14.85 MB → 4.72 MB (~10 MB saved)
- Theme crash on Android 16: Migrated all
BaseThemevariants fromTheme.MaterialComponents(M2) toTheme.Material3.DayNight.NoActionBar—MaterialToolbarinmaterial:1.12.0requirescolorSurfaceContainerwhich M2 does not define, causing anInflateExceptionon API 36 - Release build crash (Firebase Perf): Disabled Firebase Perf bytecode instrumentation (
instrumentationEnabled = false) — the AGP 9.x transform was corrupting the themedContextpassed intoMaterialToolbar's constructor; runtime data collection (network, custom traces, app start) is unaffected - ProGuard stripping: Added keep rules for
MainActivity.changeAngleType(referenced by name inmain_menu.xml) and About fragments (instantiated viaNavigation'sClass.forName)
- Added padding and
maxLinesconstraint to NumPad button styles (res/values/themes.xml)
androidx.core:core-ktx1.16.0 → 1.18.0androidx.lifecycle(viewmodel + livedata) 2.9.2 → 2.10.0firebase-bom34.0.0 → 34.13.0play-services-ads24.5.0 → 24.8.0google-servicesplugin 4.4.3 → 4.4.4firebase-crashlytics-gradle3.0.5 → 3.0.7
- Added Fastlane configuration for version bumping and release management
- Added GitHub Copilot environment setup workflow (
copilot-setup-steps.yml) - Refined CI workflow triggers, removed redundant dependency downloads
- Added
CLAUDE.mdwith agent guidance for the project - Removed volatile
.idea/files from version control (added to.gitignore)
- Calculation History: Complete history management system - view, clear, and reuse your previous calculations
- Theme Customization: Multiple app themes including system default, light, and dark modes
- Accent Colors: Choose from 6 different accent colors (Blue, Green, Purple, Pink, Red, Grey) to personalize your experience
- Smart Calculation: Auto-complete equations for faster input
- Memory Functions: Store and recall values with memory buttons (MS/MR)
- Android 14 Support: Updated target SDK to Android 14 for better compatibility
- Themed Icons: Added support for Android's themed icon system
- Enhanced Performance: Updated core libraries for improved calculation speed
- Better Settings: Organized settings with number separators, precision control, and auto-delete history options
- Multi-language Support: Available in English, German, Spanish, French, Portuguese, and Hindi
- Updated all library dependencies for security and performance
- Improved error handling for invalid expressions and edge cases
- Enhanced UI responsiveness across different screen sizes