feat(service): add foreground service for background message sync

Implement Android foreground service to keep app alive in background for real-time message sync:
- Add withForegroundService expo config plugin for notification channel setup
- Add BackgroundSyncManager with REALTIME, BATTERY_SAVER, and DISABLED modes
- Add ForegroundServiceModule for native Android foreground service binding
- Refactor backgroundService to integrate foreground service and expo-background-task

Also refactor auth and profile screens to use dynamic theme colors:
- Replace hardcoded THEME_COLORS with colors.primary.main, colors.background.paper, etc.
- Add useResolvedColorScheme for dynamic StatusBar styling
- Update NotificationSettingsScreen with sync mode selection UI

BREAKING CHANGE: Switched from expo-background-fetch to expo-background-task, minimum background sync interval changed from 900s to 15min in config
This commit is contained in:
lafay
2026-04-11 04:27:22 +08:00
parent 9bbed8cf5e
commit 6f84e17772
22 changed files with 1271 additions and 394 deletions

View File

@@ -125,12 +125,12 @@ function createSystemMessageStyles(colors: AppColors) {
flexDirection: 'row',
alignItems: 'flex-start',
padding: 16,
backgroundColor: '#fff',
backgroundColor: colors.background.paper,
borderBottomWidth: 1,
borderBottomColor: colors.divider || '#E5E5EA',
},
unreadContainer: {
backgroundColor: '#FFF8F6',
backgroundColor: colors.primary.main + '0A',
},
unreadIndicator: {
position: 'absolute',
@@ -140,7 +140,7 @@ function createSystemMessageStyles(colors: AppColors) {
width: 8,
height: 8,
borderRadius: 4,
backgroundColor: '#FF6B35',
backgroundColor: colors.primary.main,
},
iconContainer: {
marginRight: 14,
@@ -165,7 +165,7 @@ function createSystemMessageStyles(colors: AppColors) {
justifyContent: 'center',
alignItems: 'center',
borderWidth: 2,
borderColor: '#fff',
borderColor: colors.background.paper,
},
content: {
flex: 1,
@@ -220,7 +220,7 @@ function createSystemMessageStyles(colors: AppColors) {
flexDirection: 'row',
alignItems: 'center',
marginTop: 8,
backgroundColor: '#F5F5F7',
backgroundColor: colors.background.default,
paddingHorizontal: 10,
paddingVertical: 6,
borderRadius: 8,
@@ -318,13 +318,6 @@ const getSystemMessageTitle = (message: SystemMessageResponse): string => {
}
};
// 胡萝卜橙主题色
const THEME_COLORS = {
primary: '#FF6B35',
primaryLight: '#FF8C5A',
primaryDark: '#E55A2B',
};
const SystemMessageItem: React.FC<SystemMessageItemProps> = ({
message,
onPress,