feat: add nutrition and mood reminder settings
- Implemented nutrition and mood reminder toggles in notification settings screen. - Added corresponding utility functions for managing nutrition and mood reminder preferences. - Updated user preferences interface to include nutrition and mood reminder states. - Enhanced localization for new reminder settings and alerts. - Incremented iOS app version to 1.0.30.
This commit is contained in:
@@ -12,6 +12,8 @@ const PREFERENCES_KEYS = {
|
||||
WATER_REMINDER_END_TIME: 'user_preference_water_reminder_end_time',
|
||||
WATER_REMINDER_INTERVAL: 'user_preference_water_reminder_interval',
|
||||
MEDICATION_REMINDER_ENABLED: 'user_preference_medication_reminder_enabled',
|
||||
NUTRITION_REMINDER_ENABLED: 'user_preference_nutrition_reminder_enabled',
|
||||
MOOD_REMINDER_ENABLED: 'user_preference_mood_reminder_enabled',
|
||||
} as const;
|
||||
|
||||
// 用户偏好设置接口
|
||||
@@ -26,6 +28,8 @@ export interface UserPreferences {
|
||||
waterReminderEndTime: string; // 格式: "22:00"
|
||||
waterReminderInterval: number; // 分钟
|
||||
medicationReminderEnabled: boolean;
|
||||
nutritionReminderEnabled: boolean;
|
||||
moodReminderEnabled: boolean;
|
||||
}
|
||||
|
||||
// 默认的用户偏好设置
|
||||
@@ -40,6 +44,8 @@ const DEFAULT_PREFERENCES: UserPreferences = {
|
||||
waterReminderEndTime: '22:00', // 默认结束时间晚上10点
|
||||
waterReminderInterval: 60, // 默认提醒间隔60分钟
|
||||
medicationReminderEnabled: true, // 默认开启药品提醒
|
||||
nutritionReminderEnabled: true, // 默认开启营养提醒
|
||||
moodReminderEnabled: true, // 默认开启心情提醒
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -57,6 +63,8 @@ export const getUserPreferences = async (): Promise<UserPreferences> => {
|
||||
const waterReminderEndTime = await AsyncStorage.getItem(PREFERENCES_KEYS.WATER_REMINDER_END_TIME);
|
||||
const waterReminderInterval = await AsyncStorage.getItem(PREFERENCES_KEYS.WATER_REMINDER_INTERVAL);
|
||||
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);
|
||||
|
||||
return {
|
||||
quickWaterAmount: quickWaterAmount ? parseInt(quickWaterAmount, 10) : DEFAULT_PREFERENCES.quickWaterAmount,
|
||||
@@ -69,6 +77,8 @@ export const getUserPreferences = async (): Promise<UserPreferences> => {
|
||||
waterReminderEndTime: waterReminderEndTime || DEFAULT_PREFERENCES.waterReminderEndTime,
|
||||
waterReminderInterval: waterReminderInterval ? parseInt(waterReminderInterval, 10) : DEFAULT_PREFERENCES.waterReminderInterval,
|
||||
medicationReminderEnabled: medicationReminderEnabled !== null ? medicationReminderEnabled === 'true' : DEFAULT_PREFERENCES.medicationReminderEnabled,
|
||||
nutritionReminderEnabled: nutritionReminderEnabled !== null ? nutritionReminderEnabled === 'true' : DEFAULT_PREFERENCES.nutritionReminderEnabled,
|
||||
moodReminderEnabled: moodReminderEnabled !== null ? moodReminderEnabled === 'true' : DEFAULT_PREFERENCES.moodReminderEnabled,
|
||||
};
|
||||
} catch (error) {
|
||||
console.error('获取用户偏好设置失败:', error);
|
||||
@@ -381,6 +391,8 @@ export const resetUserPreferences = async (): Promise<void> => {
|
||||
await AsyncStorage.removeItem(PREFERENCES_KEYS.WATER_REMINDER_END_TIME);
|
||||
await AsyncStorage.removeItem(PREFERENCES_KEYS.WATER_REMINDER_INTERVAL);
|
||||
await AsyncStorage.removeItem(PREFERENCES_KEYS.MEDICATION_REMINDER_ENABLED);
|
||||
await AsyncStorage.removeItem(PREFERENCES_KEYS.NUTRITION_REMINDER_ENABLED);
|
||||
await AsyncStorage.removeItem(PREFERENCES_KEYS.MOOD_REMINDER_ENABLED);
|
||||
} catch (error) {
|
||||
console.error('重置用户偏好设置失败:', error);
|
||||
throw error;
|
||||
@@ -411,4 +423,56 @@ export const getMedicationReminderEnabled = async (): Promise<boolean> => {
|
||||
console.error('获取药品提醒开关状态失败:', error);
|
||||
return DEFAULT_PREFERENCES.medicationReminderEnabled;
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* 设置营养提醒开关
|
||||
* @param enabled 是否开启营养提醒
|
||||
*/
|
||||
export const setNutritionReminderEnabled = async (enabled: boolean): Promise<void> => {
|
||||
try {
|
||||
await AsyncStorage.setItem(PREFERENCES_KEYS.NUTRITION_REMINDER_ENABLED, enabled.toString());
|
||||
} catch (error) {
|
||||
console.error('设置营养提醒开关失败:', error);
|
||||
throw error;
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* 获取营养提醒开关状态
|
||||
*/
|
||||
export const getNutritionReminderEnabled = async (): Promise<boolean> => {
|
||||
try {
|
||||
const enabled = await AsyncStorage.getItem(PREFERENCES_KEYS.NUTRITION_REMINDER_ENABLED);
|
||||
return enabled !== null ? enabled === 'true' : DEFAULT_PREFERENCES.nutritionReminderEnabled;
|
||||
} catch (error) {
|
||||
console.error('获取营养提醒开关状态失败:', error);
|
||||
return DEFAULT_PREFERENCES.nutritionReminderEnabled;
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* 设置心情提醒开关
|
||||
* @param enabled 是否开启心情提醒
|
||||
*/
|
||||
export const setMoodReminderEnabled = async (enabled: boolean): Promise<void> => {
|
||||
try {
|
||||
await AsyncStorage.setItem(PREFERENCES_KEYS.MOOD_REMINDER_ENABLED, enabled.toString());
|
||||
} catch (error) {
|
||||
console.error('设置心情提醒开关失败:', error);
|
||||
throw error;
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* 获取心情提醒开关状态
|
||||
*/
|
||||
export const getMoodReminderEnabled = async (): Promise<boolean> => {
|
||||
try {
|
||||
const enabled = await AsyncStorage.getItem(PREFERENCES_KEYS.MOOD_REMINDER_ENABLED);
|
||||
return enabled !== null ? enabled === 'true' : DEFAULT_PREFERENCES.moodReminderEnabled;
|
||||
} catch (error) {
|
||||
console.error('获取心情提醒开关状态失败:', error);
|
||||
return DEFAULT_PREFERENCES.moodReminderEnabled;
|
||||
}
|
||||
};
|
||||
Reference in New Issue
Block a user