/* * Created by LuaView. * Copyright (c) 2017, Alibaba Group. All rights reserved. * * This source code is licensed under the MIT. * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree. */ package com.taobao.luaview.fun.mapper.kit; import com.taobao.luaview.fun.base.BaseMethodMapper; import com.taobao.luaview.fun.mapper.LuaViewApi; import com.taobao.luaview.fun.mapper.LuaViewLib; import com.taobao.luaview.userdata.kit.UDVibrator; import com.taobao.luaview.util.DateUtil; import com.taobao.luaview.util.LuaUtil; import org.luaj.vm2.LuaTable; import org.luaj.vm2.LuaValue; import org.luaj.vm2.Varargs; import java.util.List; /** * Vibrate 接口封装,声音处理 * * @author song * @date 15/8/21 */ @LuaViewLib(revisions = {"20170306已对标", "iOS不支持复杂功能"}) public class VibratorMethodMapper<U extends UDVibrator> extends BaseMethodMapper<U> { private static final String TAG = "VibratorMethodMapper"; private static final String[] sMethods = new String[]{ "hasVibrator",//0 "vibrate",//1 "cancel"//2 }; @Override public List<String> getAllFunctionNames() { return mergeFunctionNames(TAG, super.getAllFunctionNames(), sMethods); } @Override public Varargs invoke(int code, U target, Varargs varargs) { final int optcode = code - super.getAllFunctionNames().size(); switch (optcode){ case 0: return hasVibrator(target, varargs); case 1: return vibrate(target, varargs); case 2: return cancel(target, varargs); } return super.invoke(code, target, varargs); } //--------------------------------------- API -------------------------------------------------- /** * 是否存在震动组件 * @param vibrator * @param varargs * @return */ @LuaViewApi(revisions = {"iOS无此方法"}) public LuaValue hasVibrator(U vibrator, Varargs varargs){ return valueOf(vibrator.hasVibrator()); } /** * 开始震动 * * @param vibrator * @param varargs * @return */ public LuaValue vibrate(U vibrator, Varargs varargs) { if (varargs.narg() > 2 || (varargs.narg() > 1 && varargs.istable(2))) { final LuaTable luaTable = LuaUtil.getTable(varargs, 2); final Integer repeat = LuaUtil.toJavaInt(varargs.arg(3)); return vibrator.vibrate(luaTable, repeat); } else { final Double time = LuaUtil.getDouble(varargs, 2); return vibrator.vibrate((long) (time != null ? time * DateUtil.ONE_SECOND : DateUtil.ONE_SECOND)); } } /** * 取消震动 * * @param vibrator * @param varargs * @return */ public LuaValue cancel(U vibrator, Varargs varargs) { return vibrator.cancel(); } }