import AsyncStorage from '@react-native-async-storage/async-storage'; // 用户偏好设置的存储键 const PREFERENCES_KEYS = { QUICK_WATER_AMOUNT: 'user_preference_quick_water_amount', NOTIFICATION_ENABLED: 'user_preference_notification_enabled', FITNESS_EXERCISE_MINUTES_INFO_DISMISSED: 'user_preference_fitness_exercise_minutes_info_dismissed', FITNESS_ACTIVE_HOURS_INFO_DISMISSED: 'user_preference_fitness_active_hours_info_dismissed', } as const; // 用户偏好设置接口 export interface UserPreferences { quickWaterAmount: number; notificationEnabled: boolean; fitnessExerciseMinutesInfoDismissed: boolean; fitnessActiveHoursInfoDismissed: boolean; } // 默认的用户偏好设置 const DEFAULT_PREFERENCES: UserPreferences = { quickWaterAmount: 150, // 默认快速添加饮水量为 150ml notificationEnabled: true, // 默认开启消息推送 fitnessExerciseMinutesInfoDismissed: false, // 默认显示锻炼分钟说明 fitnessActiveHoursInfoDismissed: false, // 默认显示活动小时说明 }; /** * 获取用户偏好设置 */ export const getUserPreferences = async (): Promise => { try { const quickWaterAmount = await AsyncStorage.getItem(PREFERENCES_KEYS.QUICK_WATER_AMOUNT); const notificationEnabled = await AsyncStorage.getItem(PREFERENCES_KEYS.NOTIFICATION_ENABLED); const fitnessExerciseMinutesInfoDismissed = await AsyncStorage.getItem(PREFERENCES_KEYS.FITNESS_EXERCISE_MINUTES_INFO_DISMISSED); const fitnessActiveHoursInfoDismissed = await AsyncStorage.getItem(PREFERENCES_KEYS.FITNESS_ACTIVE_HOURS_INFO_DISMISSED); return { quickWaterAmount: quickWaterAmount ? parseInt(quickWaterAmount, 10) : DEFAULT_PREFERENCES.quickWaterAmount, notificationEnabled: notificationEnabled !== null ? notificationEnabled === 'true' : DEFAULT_PREFERENCES.notificationEnabled, fitnessExerciseMinutesInfoDismissed: fitnessExerciseMinutesInfoDismissed !== null ? fitnessExerciseMinutesInfoDismissed === 'true' : DEFAULT_PREFERENCES.fitnessExerciseMinutesInfoDismissed, fitnessActiveHoursInfoDismissed: fitnessActiveHoursInfoDismissed !== null ? fitnessActiveHoursInfoDismissed === 'true' : DEFAULT_PREFERENCES.fitnessActiveHoursInfoDismissed, }; } catch (error) { console.error('获取用户偏好设置失败:', error); return DEFAULT_PREFERENCES; } }; /** * 设置快速添加饮水的默认值 * @param amount 饮水量(毫升) */ export const setQuickWaterAmount = async (amount: number): Promise => { try { // 确保值在合理范围内(50ml - 1000ml) const validAmount = Math.max(50, Math.min(1000, amount)); await AsyncStorage.setItem(PREFERENCES_KEYS.QUICK_WATER_AMOUNT, validAmount.toString()); } catch (error) { console.error('设置快速添加饮水默认值失败:', error); throw error; } }; /** * 获取快速添加饮水的默认值 */ export const getQuickWaterAmount = async (): Promise => { try { const amount = await AsyncStorage.getItem(PREFERENCES_KEYS.QUICK_WATER_AMOUNT); return amount ? parseInt(amount, 10) : DEFAULT_PREFERENCES.quickWaterAmount; } catch (error) { console.error('获取快速添加饮水默认值失败:', error); return DEFAULT_PREFERENCES.quickWaterAmount; } }; /** * 设置消息推送开关 * @param enabled 是否开启消息推送 */ export const setNotificationEnabled = async (enabled: boolean): Promise => { try { await AsyncStorage.setItem(PREFERENCES_KEYS.NOTIFICATION_ENABLED, enabled.toString()); } catch (error) { console.error('设置消息推送开关失败:', error); throw error; } }; /** * 获取消息推送开关状态 */ export const getNotificationEnabled = async (): Promise => { try { const enabled = await AsyncStorage.getItem(PREFERENCES_KEYS.NOTIFICATION_ENABLED); return enabled !== null ? enabled === 'true' : DEFAULT_PREFERENCES.notificationEnabled; } catch (error) { console.error('获取消息推送开关状态失败:', error); return DEFAULT_PREFERENCES.notificationEnabled; } }; /** * 设置健身锻炼分钟说明已阅读状态 * @param dismissed 是否已阅读 */ export const setFitnessExerciseMinutesInfoDismissed = async (dismissed: boolean): Promise => { try { await AsyncStorage.setItem(PREFERENCES_KEYS.FITNESS_EXERCISE_MINUTES_INFO_DISMISSED, dismissed.toString()); } catch (error) { console.error('设置健身锻炼分钟说明已阅读状态失败:', error); throw error; } }; /** * 获取健身锻炼分钟说明已阅读状态 */ export const getFitnessExerciseMinutesInfoDismissed = async (): Promise => { try { const dismissed = await AsyncStorage.getItem(PREFERENCES_KEYS.FITNESS_EXERCISE_MINUTES_INFO_DISMISSED); return dismissed !== null ? dismissed === 'true' : DEFAULT_PREFERENCES.fitnessExerciseMinutesInfoDismissed; } catch (error) { console.error('获取健身锻炼分钟说明已阅读状态失败:', error); return DEFAULT_PREFERENCES.fitnessExerciseMinutesInfoDismissed; } }; /** * 设置健身活动小时说明已阅读状态 * @param dismissed 是否已阅读 */ export const setFitnessActiveHoursInfoDismissed = async (dismissed: boolean): Promise => { try { await AsyncStorage.setItem(PREFERENCES_KEYS.FITNESS_ACTIVE_HOURS_INFO_DISMISSED, dismissed.toString()); } catch (error) { console.error('设置健身活动小时说明已阅读状态失败:', error); throw error; } }; /** * 获取健身活动小时说明已阅读状态 */ export const getFitnessActiveHoursInfoDismissed = async (): Promise => { try { const dismissed = await AsyncStorage.getItem(PREFERENCES_KEYS.FITNESS_ACTIVE_HOURS_INFO_DISMISSED); return dismissed !== null ? dismissed === 'true' : DEFAULT_PREFERENCES.fitnessActiveHoursInfoDismissed; } catch (error) { console.error('获取健身活动小时说明已阅读状态失败:', error); return DEFAULT_PREFERENCES.fitnessActiveHoursInfoDismissed; } }; /** * 重置所有用户偏好设置为默认值 */ export const resetUserPreferences = async (): Promise => { try { await AsyncStorage.removeItem(PREFERENCES_KEYS.QUICK_WATER_AMOUNT); await AsyncStorage.removeItem(PREFERENCES_KEYS.NOTIFICATION_ENABLED); await AsyncStorage.removeItem(PREFERENCES_KEYS.FITNESS_EXERCISE_MINUTES_INFO_DISMISSED); await AsyncStorage.removeItem(PREFERENCES_KEYS.FITNESS_ACTIVE_HOURS_INFO_DISMISSED); } catch (error) { console.error('重置用户偏好设置失败:', error); throw error; } };