feat(app): 新增HRV压力提醒设置与锻炼记录分享功能

- 通知设置页面新增 HRV 压力提醒开关,支持自定义开启或关闭压力监测推送
- 锻炼详情页集成分享功能,支持将运动数据生成精美长图并分享
- 优化 HRV 监测服务逻辑,在发送通知前检查用户偏好设置
- 更新多语言配置文件,添加相关文案翻译
- 将应用版本号更新至 1.1.5
This commit is contained in:
richarjiang
2025-12-16 11:27:11 +08:00
parent 409f125db1
commit 5e11da34ee
9 changed files with 569 additions and 122 deletions

View File

@@ -14,6 +14,7 @@ const PREFERENCES_KEYS = {
MEDICATION_REMINDER_ENABLED: 'user_preference_medication_reminder_enabled',
NUTRITION_REMINDER_ENABLED: 'user_preference_nutrition_reminder_enabled',
MOOD_REMINDER_ENABLED: 'user_preference_mood_reminder_enabled',
HRV_REMINDER_ENABLED: 'user_preference_hrv_reminder_enabled',
} as const;
// 用户偏好设置接口
@@ -30,6 +31,7 @@ export interface UserPreferences {
medicationReminderEnabled: boolean;
nutritionReminderEnabled: boolean;
moodReminderEnabled: boolean;
hrvReminderEnabled: boolean;
}
// 默认的用户偏好设置
@@ -46,6 +48,7 @@ const DEFAULT_PREFERENCES: UserPreferences = {
medicationReminderEnabled: true, // 默认开启药品提醒
nutritionReminderEnabled: true, // 默认开启营养提醒
moodReminderEnabled: true, // 默认开启心情提醒
hrvReminderEnabled: true, // 默认开启 HRV 压力提醒
};
/**
@@ -65,6 +68,7 @@ export const getUserPreferences = async (): Promise<UserPreferences> => {
const medicationReminderEnabled = await AsyncStorage.getItem(PREFERENCES_KEYS.MEDICATION_REMINDER_ENABLED);
const nutritionReminderEnabled = await AsyncStorage.getItem(PREFERENCES_KEYS.NUTRITION_REMINDER_ENABLED);
const moodReminderEnabled = await AsyncStorage.getItem(PREFERENCES_KEYS.MOOD_REMINDER_ENABLED);
const hrvReminderEnabled = await AsyncStorage.getItem(PREFERENCES_KEYS.HRV_REMINDER_ENABLED);
return {
quickWaterAmount: quickWaterAmount ? parseInt(quickWaterAmount, 10) : DEFAULT_PREFERENCES.quickWaterAmount,
@@ -79,6 +83,7 @@ export const getUserPreferences = async (): Promise<UserPreferences> => {
medicationReminderEnabled: medicationReminderEnabled !== null ? medicationReminderEnabled === 'true' : DEFAULT_PREFERENCES.medicationReminderEnabled,
nutritionReminderEnabled: nutritionReminderEnabled !== null ? nutritionReminderEnabled === 'true' : DEFAULT_PREFERENCES.nutritionReminderEnabled,
moodReminderEnabled: moodReminderEnabled !== null ? moodReminderEnabled === 'true' : DEFAULT_PREFERENCES.moodReminderEnabled,
hrvReminderEnabled: hrvReminderEnabled !== null ? hrvReminderEnabled === 'true' : DEFAULT_PREFERENCES.hrvReminderEnabled,
};
} catch (error) {
console.error('获取用户偏好设置失败:', error);
@@ -393,6 +398,7 @@ export const resetUserPreferences = async (): Promise<void> => {
await AsyncStorage.removeItem(PREFERENCES_KEYS.MEDICATION_REMINDER_ENABLED);
await AsyncStorage.removeItem(PREFERENCES_KEYS.NUTRITION_REMINDER_ENABLED);
await AsyncStorage.removeItem(PREFERENCES_KEYS.MOOD_REMINDER_ENABLED);
await AsyncStorage.removeItem(PREFERENCES_KEYS.HRV_REMINDER_ENABLED);
} catch (error) {
console.error('重置用户偏好设置失败:', error);
throw error;
@@ -475,4 +481,23 @@ export const getMoodReminderEnabled = async (): Promise<boolean> => {
console.error('获取心情提醒开关状态失败:', error);
return DEFAULT_PREFERENCES.moodReminderEnabled;
}
};
};
export const setHRVReminderEnabled = async (enabled: boolean): Promise<void> => {
try {
await AsyncStorage.setItem(PREFERENCES_KEYS.HRV_REMINDER_ENABLED, enabled.toString());
} catch (error) {
console.error('设置 HRV 提醒开关失败:', error);
throw error;
}
};
export const getHRVReminderEnabled = async (): Promise<boolean> => {
try {
const enabled = await AsyncStorage.getItem(PREFERENCES_KEYS.HRV_REMINDER_ENABLED);
return enabled !== null ? enabled === 'true' : DEFAULT_PREFERENCES.hrvReminderEnabled;
} catch (error) {
console.error('获取 HRV 提醒开关状态失败:', error);
return DEFAULT_PREFERENCES.hrvReminderEnabled;
}
};