Files
digital-pilates/services/quickActions.ts

115 lines
3.0 KiB
TypeScript

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
];
// 设置快捷动作
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;
}
};