@Override
  public CharSequence onCreateDescription() {

    if (remotePlugin == null) return super.onCreateDescription();

    return remotePlugin.getCurrentPluginActivity().onCreateDescription();
  }
  @Override
  protected void onCreate(Bundle savedInstanceState) {

    Thread.setDefaultUncaughtExceptionHandler(
        new Thread.UncaughtExceptionHandler() {
          @Override
          public void uncaughtException(Thread thread, final Throwable ex) {

            LPluginBug bug = new LPluginBug();
            bug.error = ex;
            bug.errorTime = System.currentTimeMillis();
            bug.errorThread = thread;
            bug.errorPlugin = remotePlugin;
            bug.processId = android.os.Process.myPid();
            LPluginBugManager.callAllBugListener(bug);
          }
        });
    super.onCreate(savedInstanceState);
    final Bundle pluginMessage = getIntent().getExtras();

    String pluginActivityName;
    String pluginDexPath;
    if (pluginMessage != null) {
      pluginActivityName =
          pluginMessage.getString(
              LPluginConfig.KEY_PLUGIN_ACT_NAME, LPluginConfig.DEF_PLUGIN_CLASS_NAME);
      pluginDexPath =
          pluginMessage.getString(
              LPluginConfig.KEY_PLUGIN_DEX_PATH, LPluginConfig.DEF_PLUGIN_DEX_PATH);
    } else {
      throw new PluginCreateFailedException("Please put the Plugin Path!");
    }
    if (pluginDexPath == LPluginConfig.DEF_PLUGIN_DEX_PATH) {
      throw new PluginCreateFailedException("Please put the Plugin Path!");
    }

    remotePlugin = loadPlugin(LActivityProxy.this, pluginDexPath);

    if (pluginActivityName != LPluginConfig.DEF_PLUGIN_CLASS_NAME) {
      remotePlugin.setTopActivityName(pluginActivityName);
    }

    fillPlugin(remotePlugin);
    // remotePlugin.from().debug();

    PluginActivityControl control =
        new PluginActivityControl(
            LActivityProxy.this,
            remotePlugin.getCurrentPluginActivity(),
            remotePlugin.from().pluginApplication);
    remotePlugin.setControl(control);
    control.dispatchProxyToPlugin();
    try {
      control.callOnCreate(savedInstanceState);
      LCallbackManager.callAllOnCreate(savedInstanceState);
    } catch (Exception e) {
      processError(e);
    }
  }
  @Override
  public boolean onCreateThumbnail(Bitmap outBitmap, Canvas canvas) {

    if (remotePlugin == null) {
      return super.onCreateThumbnail(outBitmap, canvas);
    }
    return remotePlugin.getCurrentPluginActivity().onCreateThumbnail(outBitmap, canvas);
  }
  @Override
  public boolean onKeyUp(int keyCode, KeyEvent event) {

    if (remotePlugin == null) {
      return super.onKeyUp(keyCode, event);
    }
    return remotePlugin.getCurrentPluginActivity().onKeyUp(keyCode, event);
  }
  @Override
  public void onContentChanged() {

    super.onContentChanged();
    if (remotePlugin == null) {
      return;
    }
    remotePlugin.getCurrentPluginActivity().onContentChanged();
  }
  @Override
  public void onAttachedToWindow() {

    super.onAttachedToWindow();
    if (remotePlugin == null) {
      return;
    }
    remotePlugin.getCurrentPluginActivity().onAttachedToWindow();
  }
  @Override
  public void onPanelClosed(int featureId, Menu menu) {

    super.onPanelClosed(featureId, menu);
    if (remotePlugin == null) {
      return;
    }
    remotePlugin.getCurrentPluginActivity().onPanelClosed(featureId, menu);
  }
  @Override
  public void onOptionsMenuClosed(Menu menu) {

    super.onOptionsMenuClosed(menu);
    if (remotePlugin == null) {
      return;
    }
    remotePlugin.getCurrentPluginActivity().onOptionsMenuClosed(menu);
  }
  @Override
  public void onAttachFragment(Fragment fragment) {

    super.onAttachFragment(fragment);
    if (remotePlugin == null) {
      return;
    }
    remotePlugin.getCurrentPluginActivity().onAttachFragment(fragment);
  }
  @Override
  public boolean onGenericMotionEvent(MotionEvent event) {
    if (remotePlugin == null) return super.onGenericMotionEvent(event);

    return remotePlugin.getCurrentPluginActivity().onGenericMotionEvent(event);
  }
  @Override
  public View onCreatePanelView(int featureId) {

    if (remotePlugin == null) return super.onCreatePanelView(featureId);
    return remotePlugin.getCurrentPluginActivity().onCreatePanelView(featureId);
  }