@Override
    public void run() {
      if (height != 0) {
        height = (int) (Utils.densityMultiplier * height); // javascript returns us in dp
        WebView webView = mWebView.get();
        if (webView != null) {
          Logger.i(
              tag,
              "HeightRunnable called with height="
                  + height
                  + " and current height is "
                  + webView.getHeight());

          int initHeight = webView.getMeasuredHeight();

          Logger.i("HeightAnim", "InitHeight = " + initHeight + " TargetHeight = " + height);

          if (initHeight == height) {
            return;
          } else if (initHeight > height) {
            collapse(webView, height);
          } else if (initHeight < height) {
            expand(webView, height);
          }
        }
      }
    }
  /**
   * calling this function will share the screenshot of the webView along with the text at the top
   * and a caption text to all social network platforms by calling the system's intent.
   *
   * @param text : heading of the image with the webView's screenshot.
   * @param caption : intent caption
   */
  @JavascriptInterface
  public void share(String text, String caption) {
    FileOutputStream fos = null;
    File cardShareImageFile = null;
    Activity mContext = weakActivity.get();
    if (mContext != null) {
      try {
        if (TextUtils.isEmpty(text)) {
          text = mContext.getString(R.string.cardShareHeading); // fallback
        }

        cardShareImageFile =
            new File(mContext.getExternalCacheDir(), System.currentTimeMillis() + ".jpg");
        fos = new FileOutputStream(cardShareImageFile);
        View share =
            LayoutInflater.from(mContext).inflate(com.bsb.hike.R.layout.web_card_share, null);
        // set card image
        ImageView image = (ImageView) share.findViewById(com.bsb.hike.R.id.image);
        Bitmap b = Utils.viewToBitmap(mWebView);
        image.setImageBitmap(b);

        // set heading here
        TextView heading = (TextView) share.findViewById(R.id.heading);
        heading.setText(text);

        // set description text
        TextView tv = (TextView) share.findViewById(com.bsb.hike.R.id.description);
        tv.setText(Html.fromHtml(mContext.getString(com.bsb.hike.R.string.cardShareDescription)));

        Bitmap shB = Utils.undrawnViewToBitmap(share);
        Logger.i(
            tag,
            " width height of layout to share " + share.getWidth() + " , " + share.getHeight());
        shB.compress(Bitmap.CompressFormat.JPEG, 100, fos);
        fos.flush();
        Logger.i(tag, "share webview card " + cardShareImageFile.getAbsolutePath());
        Utils.startShareImageIntent(
            "image/jpeg",
            "file://" + cardShareImageFile.getAbsolutePath(),
            TextUtils.isEmpty(caption)
                ? mContext.getString(com.bsb.hike.R.string.cardShareCaption)
                : caption);
      } catch (Exception e) {
        e.printStackTrace();
        showToast(mContext.getString(com.bsb.hike.R.string.error_card_sharing));
      } finally {
        if (fos != null) {
          try {
            fos.close();
          } catch (IOException e) {
            // Do nothing
            e.printStackTrace();
          }
        }
      }
      if (cardShareImageFile != null && cardShareImageFile.exists()) {
        cardShareImageFile.deleteOnExit();
      }
    }
  }
  /**
   * Call this function to open a full page webView within hike.
   *
   * @param title : the title on the action bar.
   * @param url : the url that will be loaded.
   */
  @JavascriptInterface
  public void openFullPage(final String title, final String url) {
    Logger.i(tag, "open full page called with title " + title + " , and url = " + url);

    if (null == mHandler) {
      return;
    }
    mHandler.post(
        new Runnable() {
          @Override
          public void run() {
            if (weakActivity.get() != null) {
              Intent intent =
                  IntentManager.getWebViewActivityIntent(weakActivity.get(), url, title);
              weakActivity.get().startActivity(intent);
            }
          }
        });
  }
 /**
  * Whenever the content's height is changed, the html will call this function to resize the height
  * of the Android Webview. Calling this function is MUST, whenever the height of the content
  * changes.
  *
  * @param height : the new height when the content is reloaded.
  */
 @JavascriptInterface
 public void onResize(String height) {
   Logger.i(
       tag, "onresize called with height=" + (Integer.parseInt(height) * Utils.densityMultiplier));
   resizeWebview(height);
 }