Accessing Settings
Settings are available at the Settings screen (app/(tabs)/(more)/settings.tsx).
Theme System
The app supports automatic light and dark mode based on your device’s system preferences.Color Schemes
- Light Mode
- Dark Mode
- Background:
#FAF8F6(warm off-white) - Text:
#1B1B1B(near black) - Primary:
#1E5243(deep green) - Card:
#FFFFFF(white) - Icon:
#6D6D6D(medium gray) - Secondary:
#C2B280(gold/beige)
The theme automatically switches based on your device’s color scheme setting. The app uses the
useColorScheme() hook from React Native to detect system preferences.How Themes Work
Themes are implemented through:- Colors Configuration:
constants/Colors.tsdefines all color values - useColors Hook:
hooks/useColors.tsprovides theme-aware colors - Themed Components:
ThemedView,ThemedText, andThemedButtonautomatically adapt
Dark Mode Contrast Adjustment
Customize the brightness of Mushaf pages in dark mode to reduce eye strain.The contrast setting is stored in the
mushafContrast atom and persists across app sessions. Default value is 50% (0.5).Flip Sound
Enable or disable page flip sound effects when navigating between pages.Flip sound is disabled by default. The setting is stored in the
flipSound atom and persists across sessions.Riwaya Selection
Choose between different Quran recitation styles (Riwayat).Available Riwayat
The app supports:- Hafs ‘an ‘Asim (حفص): Most widely used Riwaya
- Warsh ‘an Nafi’ (ورش): Primarily used in North Africa
mushafRiwaya atom and affects:
- Mushaf page images loaded from
imagesMapHafsorimagesMapWarsh - Total number of pages (varies by Riwaya)
Notification Settings
Configure notifications for daily reading tracker completion.Daily Tracker Notification
Notification Frequency
Notification settings are stored in:
showTrackerNotification: Boolean for on/offhizbNotification: Number (0=disabled, 1=Hizb, 2=Juz)
Reset Settings
Reset all app settings and data to defaults.Confirm
A confirmation modal will appear asking “هل أنت متأكد من رغبتك في إعادة ضبط التطبيق؟” (Are you sure you want to reset the app?)
Persistence
All customization settings are automatically saved using:- Storage Engine: MMKV (fast, synchronous storage)
- State Management: Jotai atoms with
atomWithStorage - Storage Location:
utils/storage/createStorage.ts
- App restarts
- Device reboots
- App updates
Accessibility
All settings include proper accessibility labels and hints:- Toggle switches have
accessibilityStateindicating checked/unchecked - Buttons have descriptive
accessibilityLabelandaccessibilityHint - Segmented controls use
accessibilityRole="radiogroup"