Actions
Bug #1090
closedRNA-244(Follow system appearance for dark mode, with a saved user override)
Start date:
10/05/2026
Due date:
% Done:
0%
Estimated time:
Description
The app always starts in light mode unless the user has already flipped the Dark Mode switch. It never reads the device color scheme, so someone who uses dark mode on their phone still gets a light app until they open Settings and toggle it themselves.
Detect the system appearance and use it by default. When the user picks light or dark explicitly, keep that choice and stop following the system until they switch back.
Current behavior
ThemeContext stores a single boolean, isDarkMode, in AsyncStorage under isDarkMode.
On launch, a missing value falls back to light mode. The OS setting is ignored.
Settings shows one Dark Mode switch wired to toggleTheme, which flips that boolean and writes it back.
Desired behavior
On first launch, with no saved preference, match the device color scheme (light or dark).
Listen for system appearance changes while the preference is “system,” and update the app immediately.
Let the user override from Settings with three choices: System, Light, and Dark.
Persist the override. After an explicit Light or Dark choice, later system changes must not change the app theme.
“System” clears the override and resumes following the device.
Existing isDarkMode consumers (useTheme()) keep working. Screens should not need a new API beyond the current boolean plus whatever exposes the selected preference.
Acceptance criteria
A fresh install on a dark-mode device opens in dark mode without visiting Settings.
A fresh install on a light-mode device opens in light mode.
Changing the device theme while the app preference is System updates the UI without a restart.
Choosing Light or Dark in Settings applies immediately, survives an app restart, and ignores later device theme changes.
Choosing System again follows the current device theme and future changes.
Users who already have isDarkMode saved keep that explicit choice after the update (treat the stored boolean as an override, not as “follow system”).
Updated by Mubashir Siraj 21 days ago
- Status changed from In Progress to Resolved
- Assignee changed from Mubashir Siraj to Talha Sajjad
Actions