/* * 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.userdata.kit; import com.taobao.luaview.fun.mapper.LuaViewLib; import com.taobao.luaview.global.SdkVersion; import com.taobao.luaview.global.VmVersion; import com.taobao.luaview.userdata.base.BaseLuaTable; import com.taobao.luaview.util.AndroidUtil; import com.taobao.luaview.util.DimenUtil; import com.taobao.luaview.util.LuaUtil; import com.taobao.luaview.util.NetworkUtil; import org.luaj.vm2.Globals; import org.luaj.vm2.LuaBoolean; import org.luaj.vm2.LuaTable; import org.luaj.vm2.LuaValue; import org.luaj.vm2.Varargs; import org.luaj.vm2.lib.VarArgFunction; import org.luaj.vm2.lib.ZeroArgFunction; /** * System 用户数据封装 * * @author song * @date 15/9/6 */ @LuaViewLib(revisions = {"20170306已对标"}) public class UDSystem extends BaseLuaTable { public UDSystem(Globals globals, LuaValue metatable) { super(globals, metatable); init(); } private void init() { set("ios", new ios());//是否ios set("android", new android());//是否android set("vmVersion", new vmVersion());//LuaView早期的版本系统 @Deprecated set("sdkVersion", new sdkVersion());//LuaView版本 set("osVersion", new osVersion());//系统版本 set("platform", new platform());//平台信息 set("scale", new scale());//屏幕分辨率 set("device", new device());//设备信息 set("screenSize", new screenSize());//屏幕尺寸 set("network", new network());//获取网络 set("gc", new gc()); set("keepScreenOn", new keepScreenOn()); } class ios extends VarArgFunction { @Override public Varargs invoke(Varargs args) { return LuaBoolean.FALSE; } } class android extends VarArgFunction { @Override public Varargs invoke(Varargs args) { return LuaBoolean.TRUE; } } @Deprecated class vmVersion extends VarArgFunction { @Override public Varargs invoke(Varargs args) { return valueOf(VmVersion.getCurrent()); } } class sdkVersion extends VarArgFunction { @Override public Varargs invoke(Varargs args) { return valueOf(SdkVersion.getCurrent()); } } class osVersion extends VarArgFunction { @Override public Varargs invoke(Varargs args) { return valueOf(AndroidUtil.getOsVersion()); } } class platform extends VarArgFunction { @Override public Varargs invoke(Varargs args) { return valueOf(AndroidUtil.getOsModel()); } } class scale extends VarArgFunction { @Override public Varargs invoke(Varargs args) { return valueOf(AndroidUtil.getDensity(getContext())); } } class device extends VarArgFunction { @Override public Varargs invoke(Varargs args) { LuaTable table = new LuaTable(); table.set("device", AndroidUtil.getDevice()); table.set("brand", AndroidUtil.getBrand()); table.set("product", AndroidUtil.getProduct()); table.set("manufacturer", AndroidUtil.getManufacturer()); //screen size int[] screenSize = AndroidUtil.getWindowSizeInDp(getContext()); table.set("window_width", screenSize[0]); table.set("window_height", screenSize[1]); //action bar height int actionBarHeight = AndroidUtil.getActionBarHeightInDp(getContext()); table.set("nav_height", actionBarHeight); int bottomNavHeight = AndroidUtil.getNavigationBarHeightInDp(getContext()); table.set("bottom_nav_height", bottomNavHeight); int statusBarHeight = AndroidUtil.getStatusBarHeightInDp(getContext()); table.set("status_bar_height", statusBarHeight); return table; } } /** * 系统屏幕大小 */ class screenSize extends VarArgFunction { @Override public Varargs invoke(Varargs args) { return varargsOf(new LuaValue[]{valueOf(DimenUtil.pxToDpi(AndroidUtil.getScreenWidth(getContext()))), valueOf(DimenUtil.pxToDpi(AndroidUtil.getScreenHeight(getContext())))}); } } /** * 系统垃圾回收 */ class gc extends ZeroArgFunction { @Override public LuaValue call() { java.lang.System.gc(); return UDSystem.this; } } /** * 获取网络状态 */ class network extends VarArgFunction { @Override public Varargs invoke(Varargs varargs) { return valueOf(NetworkUtil.getCurrentTypeStr(getContext())); } } /** * 屏幕常亮开启 */ class keepScreenOn extends VarArgFunction { @Override public Varargs invoke(Varargs varargs) { if (getGlobals() != null && getGlobals().getRenderTarget() != null) { final Boolean keepScreenOn = LuaUtil.getBoolean(varargs, 2); getGlobals().getRenderTarget().setKeepScreenOn(keepScreenOn != null ? keepScreenOn : true); } return LuaValue.NIL; } } }