From 05e2af23dd80cfd9df27f528ef98c9f13ca41509 Mon Sep 17 00:00:00 2001 From: Linus Rath <139418639+rathlinus@users.noreply.github.com> Date: Tue, 21 Jul 2026 20:17:41 +0200 Subject: [PATCH] fix: add unread indicator dot to email list and unified inbox rows #27 The only unread cues were a font-weight bump and a grey-to-white shift on the sender name, which barely render on some device fonts and are nearly invisible in the dark theme. Mirror the webmail's dedicated indicator (email-list-item.tsx): an 8px circle in the theme's existing unread color, vertically centered in the row's start gutter, shown in both the mailbox list and the unified inbox. Verified on a Pixel 7 API 34 emulator in dark theme: unread rows are unambiguous at a glance, read rows unchanged. --- src/screens/EmailListScreen.tsx | 14 ++++++++++++++ src/screens/UnifiedInboxScreen.tsx | 13 +++++++++++++ 2 files changed, 27 insertions(+) diff --git a/src/screens/EmailListScreen.tsx b/src/screens/EmailListScreen.tsx index a713daee..3c95066d 100644 --- a/src/screens/EmailListScreen.tsx +++ b/src/screens/EmailListScreen.tsx @@ -92,6 +92,7 @@ const EmailRow = React.memo(function EmailRow({ onLongPress={handleLongPress} delayLongPress={300} > + {unread && } {selectionMode && ( {selected ? ( @@ -1365,6 +1366,19 @@ function makeStyles(c: ThemePalette) { }, emailRowPressed: { backgroundColor: c.surface }, emailRowSelected: { backgroundColor: c.selection }, + // Mirrors the webmail's unread indicator: an 8px filled circle at the row's + // start edge, vertically centered (email-list-item.tsx, fill-unread). The + // weight/color change alone is too subtle on some device fonts (#27). + unreadDot: { + position: 'absolute', + left: 4, + top: '50%', + marginTop: -4, + width: 8, + height: 8, + borderRadius: 4, + backgroundColor: c.unread, + }, rowCheckboxWrap: { width: 16, height: componentSizes.avatarMd, diff --git a/src/screens/UnifiedInboxScreen.tsx b/src/screens/UnifiedInboxScreen.tsx index 9b4b0929..b5796730 100644 --- a/src/screens/UnifiedInboxScreen.tsx +++ b/src/screens/UnifiedInboxScreen.tsx @@ -96,6 +96,7 @@ export default function UnifiedInboxScreen({ navigation }: Props) { onPress={() => onOpen(item)} style={({ pressed }) => [styles.row, pressed && styles.rowPressed]} > + {unread && }