/**
   * Close a custom browser screen.
   *
   * @return a PluginResult
   */
  private synchronized PluginResult closeBrowser() {
    JSONObject obj = null;

    if (browser != null && browser.isDisplayed()) {
      uiApp.invokeAndWait(
          new Runnable() {
            public void run() {
              try {
                uiApp.popScreen(browser);
              } catch (IllegalArgumentException e) {
                Logger.log(
                    ChildBrowser.TAG + ": Caught illegal argument exception: " + e.getMessage());
              }
            }
          });
      browser = null;

      obj = new JSONObject();
      try {
        obj.put("type", CustomBrowser.CLOSE_EVENT);
      } catch (JSONException e) {
        return new PluginResult(PluginResult.Status.JSON_EXCEPTION);
      }
    }

    return new PluginResult(PluginResult.Status.OK, obj);
  }
  /**
   * Display the specified URL in a custom browser screen.
   *
   * @param args JSONArry of arguments for the action.
   * @return a PluginResult
   */
  private synchronized PluginResult showWebPage(JSONArray args) {
    PluginResult result;

    if (browser == null) {
      try {
        boolean showLocationBar = true;
        String url = args.getString(0);
        JSONObject options = args.getJSONObject(1);

        // Determine whether to show or hide navigation bar.
        if (options != null) {
          showLocationBar = options.optBoolean("showLocationBar", true);
        }

        browser = new CustomBrowser(callbackId);
        if (browser.init(showLocationBar)) {
          uiApp.invokeLater(
              new Runnable() {
                public void run() {
                  uiApp.pushScreen(browser);
                }
              });

          browser.loadURL(url);

          // Must keep the callback for browser URL load and close
          // events.
          result = new PluginResult(PluginResult.Status.OK, "");
          result.setKeepCallback(true);
        } else {
          result =
              new PluginResult(
                  PluginResult.Status.ERROR, TAG + "Failed to initialize CustomBrowser.");
        }
      } catch (JSONException e) {
        return new PluginResult(PluginResult.Status.JSON_EXCEPTION);
      }
    } else {
      result = new PluginResult(PluginResult.Status.ERROR, "ChildBrowser is already open.");
    }

    return result;
  }