/** @brief ページ読み込み進行ハンドラ 100% に達したらページ修正、オートログインなどを実施する */
  @Override
  public void onProgressChanged(WebView wv, int progress) {
    Log.d(TAG, "onProgressChanged = " + progress + " " + wv.getUrl());
    if (progress < 100) {
      if (dlg == null) {
        dlg = new Dialog(view.getContext());
        dlg.setTitle("Loading...");
        dlg.show();
      }
    } else {
      if (dlg != null) {
        dlg.dismiss();
        dlg = null;
      }

      if (autoLogin(wv)) {
        return;
      }

      String url = wv.getUrl();
      if (url != null && url.startsWith(INNER_URL_PREFIX)) {
        fixPage(wv);
      }
    }
  }
  /** @brief オートログイン */
  public boolean autoLogin(WebView wv) {
    String js, fmt;

    // ログインページに居るかどうか確認
    String url = wv.getUrl();
    if (url == null || !url.startsWith(LOGIN_URL)) {
      return false;
    }

    // User ID / Pass を取得
    SharedPreferences prefs =
        context.getSharedPreferences(PrefActivity.PREF_NAME, Context.MODE_PRIVATE);
    String uid = prefs.getString(PrefActivity.PREF_KEY_USERID, "");
    String pass = prefs.getString(PrefActivity.PREF_KEY_PASSWORD, "");

    // auto login
    for (int i = 1; i <= 2; i++) {
      fmt = "javascript:document.getElementById(\"user_id%d\").value=\"%s\"";
      js = String.format(fmt, i, uid);
      runJs(wv, js);

      fmt = "javascript:document.getElementById(\"password%d\").value=\"%s\"";
      js = String.format(fmt, i, pass);
      runJs(wv, js);
    }

    return true;
  }