content: /*
   * 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.demo.activity;
  
  import android.app.Activity;
  import android.os.Bundle;
  
  import com.taobao.luaview.demo.provider.GlideImageProvider;
  import com.taobao.luaview.demo.ui.CustomError;
  import com.taobao.luaview.demo.ui.CustomLoading;
  import com.taobao.luaview.global.Constants;
  import com.taobao.luaview.global.LuaScriptLoader;
  import com.taobao.luaview.global.LuaView;
  import com.taobao.luaview.scriptbundle.ScriptBundle;
  import com.taobao.luaview.util.AssetUtil;
  import com.taobao.luaview.util.JsonUtil;
  import com.taobao.luaview.util.LogUtil;
  import com.taobao.luaview.view.LVLoadingDialog;
  
  import org.luaj.vm2.LuaValue;
  
  /**
   * 通过LuaView、注入bridge对象，实现Lua-Java通信
   *
   * @author song
   * @date 15/11/11
   * 主要功能描述
   * 修改描述
   * 下午4:50 song XXX
   */
  public class DemoLuaViewActivity extends Activity {
      private LuaView mLuaView;
      private LVLoadingDialog mDialog;
  
      @Override
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          initActionBar();
          showLoading();
          createLuaViewAsync();
      }
  
      private void initActionBar() {
          getActionBar().setDisplayShowHomeEnabled(false);
          getActionBar().setDisplayHomeAsUpEnabled(true);
      }
  
      private void showLoading() {
          mDialog = new LVLoadingDialog(this);
          mDialog.show();
      }
  
      private void hideLoading() {
          if (mDialog != null) {
              mDialog.cancel();
          }
      }
  
      /**
       * 异步创建LuaView（推荐方式）
       */
      private void createLuaViewAsync() {
          LuaView.createAsync(this, new LuaView.CreatedCallback() {
              @Override
              public void onCreated(LuaView luaView) {
                  hideLoading();
                  mLuaView = luaView;
                  if (mLuaView != null) {
                      extendsLuaView(mLuaView);
                      loadScript(mLuaView);
                      setContentView(mLuaView);
                  }
              }
          });
      }
  
      /**
       * 同步创建LuaView
       */
      private void createLuaView(){
          mLuaView = LuaView.create(this);
          extendsLuaView(mLuaView);
          loadScript(mLuaView);
          setContentView(mLuaView);
          hideLoading();
      }
  
  
      /**
       * 扩展LuaView
       * 注册Panel（如果已经有UI组件，需要在Lua使用）
       * 注册Bridge（有部分API或功能，需要在Lua使用）
       */
      private void extendsLuaView(final LuaView luaView) {
          luaView.registerImageProvider(GlideImageProvider.class);
          luaView.registerPanel(CustomError.class);
          luaView.registerPanel(CustomLoading.class);
          luaView.register("bridge", new LuaViewBridge(this));
          luaView.setUseStandardSyntax(DemoActivity.useStandardSyntax);//是否使用标准语法
      }
  
      /**
       * 加载数据
       */
      public void loadScript(final LuaView luaView) {
          luaView.load(getLuaUri(), new LuaScriptLoader.ScriptExecuteCallback() {
              @Override
              public boolean onScriptPrepared(ScriptBundle bundle) {
                  return false;
              }
  
              @Override
              public boolean onScriptCompiled(LuaValue value, LuaValue context, LuaValue view) {
                  return false;
              }
  
              @Override
              public void onScriptExecuted(String uri, boolean executedSuccess) {
                  //测试调用 lua function
                  LogUtil.d("call-lua-function return:", luaView.callLuaFunction("global_fun_test1", 1, "a", 0.1));
                  LogUtil.d("call-lua-function return:", JsonUtil.toString(luaView.callLuaFunction("global_fun_test2", 2, "b", 0.2)));
                  LogUtil.d("call-window-function return:", luaView.callWindowFunction("window_fun1", 3, "c", 0.3));
                  LogUtil.d("call-window-function return:", luaView.callWindowFunction("window_fun2", 4, "d", 0.4));
              }
          });
      }
  
      /**
       * load bytecode directly
       *
       * @param luaView
       */
      public void loadBytecodeScript(final LuaView luaView) {
          luaView.loadPrototype(AssetUtil.open(this, "test/lvp/UI_Window.luap"), "UI_window", new LuaScriptLoader.ScriptExecuteCallback() {
              @Override
              public boolean onScriptPrepared(ScriptBundle bundle) {
                  return false;
              }
  
              @Override
              public boolean onScriptCompiled(LuaValue value, LuaValue context, LuaValue view) {
                  return false;
              }
  
              @Override
              public void onScriptExecuted(String uri, boolean executedSuccess) {
              }
          });
      }
  
      /**
       * 获取文件名称
       *
       * @return
       */
      private String getLuaUri() {
          if (getIntent() != null && getIntent().hasExtra(Constants.PARAM_URI)) {
              return getIntent().getStringExtra(Constants.PARAM_URI);
          }
          return null;
      }
  
      @Override
      protected void onDestroy() {
          LogUtil.d("LuaView-onDestroy");
          super.onDestroy();
          if (mLuaView != null) {
              mLuaView.onDestroy();
          }
      }
  }
  