feat: 添加快捷动作功能,支持快速记录饮水量,更新相关配置和服务
This commit is contained in:
116
services/quickActions.ts
Normal file
116
services/quickActions.ts
Normal file
@@ -0,0 +1,116 @@
|
||||
import { getQuickWaterAmount } from '@/utils/userPreferences';
|
||||
import * as QuickActions from 'expo-quick-actions';
|
||||
import { Platform } from 'react-native';
|
||||
|
||||
// 快捷动作类型定义
|
||||
export interface QuickActionItem {
|
||||
id: string;
|
||||
title: string;
|
||||
subtitle?: string;
|
||||
icon?: string;
|
||||
params?: Record<string, any>;
|
||||
}
|
||||
|
||||
// 饮水快捷动作配置
|
||||
export const QUICK_ACTIONS = {
|
||||
DRINK_WATER_100: {
|
||||
id: 'drink_water_100',
|
||||
title: '喝水 100ml',
|
||||
subtitle: '快速记录饮水',
|
||||
icon: Platform.OS === 'ios' ? 'drink_water' : 'drink_water',
|
||||
params: { amount: 100 }
|
||||
},
|
||||
DRINK_WATER_200: {
|
||||
id: 'drink_water_200',
|
||||
title: '喝水 200ml',
|
||||
subtitle: '快速记录饮水',
|
||||
icon: Platform.OS === 'ios' ? 'drink_water' : 'drink_water',
|
||||
params: { amount: 200 }
|
||||
},
|
||||
DRINK_WATER_250: {
|
||||
id: 'drink_water_250',
|
||||
title: '喝水 250ml',
|
||||
subtitle: '快速记录饮水',
|
||||
icon: Platform.OS === 'ios' ? 'drink_water' : 'drink_water',
|
||||
params: { amount: 250 }
|
||||
},
|
||||
DRINK_WATER_CUSTOM: {
|
||||
id: 'drink_water_custom',
|
||||
title: '喝水',
|
||||
subtitle: '自定义饮水量',
|
||||
icon: Platform.OS === 'ios' ? 'drink_water' : 'drink_water',
|
||||
params: { custom: true }
|
||||
}
|
||||
};
|
||||
|
||||
// 设置快捷动作
|
||||
export const setupQuickActions = async () => {
|
||||
try {
|
||||
// 获取用户设置的快速饮水量
|
||||
const quickAmount = await getQuickWaterAmount();
|
||||
console.log('设置快捷动作,快速饮水量:', quickAmount);
|
||||
|
||||
// 创建快捷动作列表
|
||||
const actions: QuickActionItem[] = [
|
||||
// 使用用户设置的快速饮水量
|
||||
{
|
||||
...QUICK_ACTIONS.DRINK_WATER_CUSTOM,
|
||||
title: `喝水 ${quickAmount}ml`,
|
||||
subtitle: '快速记录饮水',
|
||||
params: { amount: quickAmount }
|
||||
},
|
||||
// 固定选项
|
||||
QUICK_ACTIONS.DRINK_WATER_100,
|
||||
QUICK_ACTIONS.DRINK_WATER_200,
|
||||
QUICK_ACTIONS.DRINK_WATER_250
|
||||
];
|
||||
|
||||
// 设置快捷动作
|
||||
await QuickActions.setItems(actions);
|
||||
console.log('快捷动作设置成功');
|
||||
} catch (error) {
|
||||
console.error('设置快捷动作失败:', error);
|
||||
}
|
||||
};
|
||||
|
||||
// 清除所有快捷动作
|
||||
export const clearQuickActions = async () => {
|
||||
try {
|
||||
await QuickActions.setItems([]);
|
||||
console.log('快捷动作已清除');
|
||||
} catch (error) {
|
||||
console.error('清除快捷动作失败:', error);
|
||||
}
|
||||
};
|
||||
|
||||
// 获取初始快捷动作(如果应用是通过快捷动作启动的)
|
||||
export const getInitialQuickAction = () => {
|
||||
try {
|
||||
return QuickActions.initial;
|
||||
} catch (error) {
|
||||
console.error('获取初始快捷动作失败:', error);
|
||||
return null;
|
||||
}
|
||||
};
|
||||
|
||||
// 添加快捷动作事件监听器
|
||||
export const addQuickActionListener = (callback: (action: QuickActionItem) => void) => {
|
||||
const subscription = QuickActions.addListener(callback);
|
||||
return subscription;
|
||||
};
|
||||
|
||||
// 移除快捷动作事件监听器
|
||||
export const removeQuickActionListener = (subscription: any) => {
|
||||
if (subscription) {
|
||||
subscription.remove();
|
||||
}
|
||||
};
|
||||
|
||||
// 检查快捷动作是否可用
|
||||
export const isQuickActionsAvailable = async () => {
|
||||
try {
|
||||
return await QuickActions.isSupported();
|
||||
} catch (error) {
|
||||
return false;
|
||||
}
|
||||
};
|
||||
Reference in New Issue
Block a user