- Simplify navigation animations (slide-only, 220ms, FastOutSlowInEasing)
- Add soft refresh to prevent shimmer when returning from Settings
- Move language restoration to Application class for reliable persistence
- Fix theme parent to AppCompat.DayNight for proper locale support
- Delay refresh 250ms to complete navigation animation smoothly
Introduces a new Settings screen with language picker, contact/feedback button,
and logout functionality. All UI strings now use centralized string resources
with translations for English, Chinese, Spanish, Hindi, Arabic, Portuguese,
Bengali, Russian, Japanese, French, German, Korean, Italian, Turkish,
Vietnamese, Polish, Ukrainian, Dutch, Thai, and Indonesian.
Uses AppCompatDelegate for runtime locale switching without app restart.
Also adds CLAUDE.md for Claude Code guidance.
Introduced ShimmerEffect composables to display a skeleton loading UI while emails are loading. Refactored MaskedEmailCard to disable shared element transitions during scrolling for smoother performance. Updated MaskedEmailListScreen to use the shimmer effect instead of a generic loading indicator.
- Use lazy initialization for EncryptedSharedPreferences
- Defer MasterKey and crypto setup until first actual use
- Prevents ParameterizedType reflection errors during Hilt injection
- Bump version to 1.2
Refactored TokenStorage to lazily initialize EncryptedSharedPreferences, improving initialization safety. Removed unused variables and imports from MaskedEmailCard and CreateMaskedEmailScreen. Simplified error display logic in MaskedEmailDetailScreen. Updated MaskedEmailListScreen to use AutoMirrored Logout icon for better RTL support.
- Fix ParameterizedType casting error in release builds
- Add ProGuard rules for Google Tink (security-crypto dependency)
- Add dontwarn rules for Tink optional dependencies
- Bump version to 1.1
- Update README with changelog
Introduces GitHub issue and PR templates, contributing and security documentation. Adds Android 12+ splash screen support, updates theming and status color handling, and improves MaskedEmail card/detail UI with shared transitions and accessibility. Updates dependencies for Compose and Material3, and enhances README with detailed setup and contribution instructions.
Refactored JmapApi to ensure session is initialized before API calls, reducing potential errors. Updated LoginViewModel to remove all whitespace from tokens before login. MaskedEmailDetailViewModel now consistently resets isUpdating flag on data load and error, improving UI state accuracy. Added ProGuard rules to suppress warnings for Google Error Prone annotations.
Enabled onBackInvokedCallback and updated targetApi to 34 in AndroidManifest.xml. Set default value for 'state' to MaskedEmailState.ENABLED in MaskedEmailDto to ensure a default state is always provided.
Expanded .gitignore to exclude Gradle, Android, and IDE files. Added several .idea configuration files and the gradle-wrapper.jar to support project setup and development environment consistency. Updated app/build.gradle.kts and JmapModels.kt for build and API model changes.