115 lines
3.0 KiB
TypeScript
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;
|
|
}
|
|
};
|