Change Log
[0.2.4-canary]
Added
File download with platform-native behavior: images save to gallery, documents use SAF on Android, share sheet on iOS
DownloadToast component with open and share actions after download
expo-media-library and expo-intent-launcher dependencies
Centralized logger module replacing direct console calls
Centralized MESSAGES constants for UI strings
TypeScript type definitions for mail data structures (MailDetail, MailListPage)
unwrapResponsehelper in api-client to reduce boilerplategetFileCategoryutility for content type classificationAccessibility labels and roles across interactive elements (login, mail list, headers, search, compose)
Photo library save permission for iOS (NSPhotoLibraryAddUsageDescription)
WRITE_EXTERNAL_STORAGE permission for Android
Changed
HTMLRenderer refactored into modular structure (types, constants, html-utils extracted)
NetworkContext UI components (NoNetworkScreen, NetworkErrorOverlay) extracted into dedicated files
anytypes replaced with proper TypeScript types across api-client, useMail, DetailsModal, MailInfoCard, SelectionBar, SwipeableButton, MailContentAPI helper methods now use
Record<string, unknown>instead ofanyfor body parameters.gitignore updated with broader firebase admin SDK pattern
Android versionCode bumped to 3, buildNumber updated to 3.2.4
Fixed
Null safety for mail date formatting in DetailsModal and MailInfoCard
Null safety for sender name length check in MailInfoCard
Removed
Inline styles and dead comments from NetworkContext
Redundant comments across multiple files
estimatedItemSize prop from FlashList in outbox and trash screens
[0.2.2-canary]
Added
Skeleton loading for mail detail screen with route params for instant header display
WebView caching support for faster repeat views on mail content
Fade-in animation for mail content when loading completes
Notification refetch debouncing (500ms) to prevent rapid API calls
Changed
QueryClient configuration optimized with staleTime (5min), gcTime (10min), retry (1)
ThemeContext now uses useMemo for context value to prevent unnecessary re-renders
HTMLRenderer setTimeout calls reduced from 5 to 2 for faster height stabilization
FlashList estimatedItemSize added to home screen for better performance
Fixed
Skeleton loading infinite loop issue with proper onReady callback handling
Brief blank screen when cached mail data loads
Hardcoded localhost URL in send mail screen - now uses AUTH_CONFIG.SMTP_URL
Search keyExtractor using array index - now uses unique uid
Removed
Unused dependencies: react-native-markdown-display, react-native-netinfo
Unused useTheme hooks from MailHeader and MailContent components
[0.2.1-canary]
Added
Optimistic delete for mail items - deleted emails are instantly removed from the list
Loading indicator at the bottom of mail lists when fetching more data (pagination)
Notification permission request on first app launch
SMTP support for sending emails
Mail content HTML renderer with theme support
Selectable mail items with multi-select functionality
Network connection error and timeout handler
New settings screen
Dark mode support across all screens
Search functionality with search bar
Changed
Selection mode now only shows checkbox when item is selected, avatar remains visible for unselected items
Improved checkbox sizing to match avatar dimensions
Mail content text color now properly updates when app theme changes
Updated mail author title display
Improved dark mode colors
Enhanced theme consistency across the app
Fixed
Loading indicator visibility on mail list pagination
Mail content text color not changing with theme
iOS build issues
Theme switching fixes
Search bar padding
Keyboard avoiding behavior
[0.2.0]
Added
Initial release
IMAP email integration with METU servers
Inbox, Outbox, and Trash mail folders
Pull-to-refresh on mail lists
Infinite scroll pagination
Push notifications for new emails
Dark/Light theme support
User authentication with METU credentials
Last updated