@Override
  public void onClick(DialogInterface idialog, int whichButton) {
    if (whichButton == DialogInterface.BUTTON_POSITIVE) {
      try {
        f.setComment(ce.getText().toString());
        String path = pe.getText().toString().trim();
        if (se != null) {
          Uri.Builder uri_b = uri.buildUpon();
          if (ftp) {
            uri_b.encodedQuery("");
            Object esio = en.getSelectedItem();
            if (esio instanceof String) {
              String enc_s = (String) esio;
              if (Utils.str(enc_s) && !"Default".equals(enc_s)) {
                enc_s = enc_s.substring(0, enc_s.indexOf("\n"));
                uri_b.appendQueryParameter("e", enc_s);
              }
            }
            if (active_ftp_cb.isChecked()) uri_b.appendQueryParameter("a", "true");
          }
          String serv = se.getText().toString().trim();
          f.setUri(
              uri_b
                  .encodedAuthority(Utils.encodeToAuthority(serv))
                  .encodedPath(Utils.escapePath(path))
                  .build());
          Log.i(TAG, "Uri:" + f.getUri());
          String domain = de != null ? de.getText().toString().trim() : "";
          String usernm = ue.getText().toString().trim();
          f.setCredentials(
              domain.length() > 0 ? domain + ";" + usernm : usernm, we.getText().toString().trim());
        } else {
          f.setUri(uri.buildUpon().encodedPath(Utils.escapePath(path)).build());
        }

        owner.invalidate();
      } catch (Exception e) {
        Log.e(TAG, null, e);
      }
    }
  }
  public FavDialog(Context c, Favorite f_, FavsAdapter owner_) {
    try {
      owner = owner_;
      f = f_;
      uri = f.getUri();
      if (uri == null) return;
      LayoutInflater factory = LayoutInflater.from(c);
      View fdv = factory.inflate(R.layout.server, null);
      if (fdv == null) return;
      View bb = fdv.findViewById(R.id.buttons_block);
      bb.setVisibility(View.GONE);
      View cb = fdv.findViewById(R.id.comment_block);
      cb.setVisibility(View.VISIBLE);
      ce = (EditText) cb.findViewById(R.id.comment_edit);
      ce.setText(f.getComment());

      pe = (EditText) fdv.findViewById(R.id.path_edit);
      String path = uri.getPath();
      /*
      String quer = uri.getQuery();
      if( quer != null )
          path += "?" + quer;
      String frag = uri.getFragment();
      if( frag != null )
          path += "#" + frag;
      */
      pe.setText(path);

      String schm = uri.getScheme();
      View sb = fdv.findViewById(R.id.server_block);
      View db = fdv.findViewById(R.id.domainbrowse_block);
      View ib = fdv.findViewById(R.id.credentials_block);
      View fb = fdv.findViewById(R.id.ftp_block);

      sftp = "sftp".equals(schm);
      ftp = "ftp".equals(schm);
      smb = "smb".equals(schm);
      if (ftp || smb || sftp) {
        se = (EditText) sb.findViewById(R.id.server_edit);
        String host = uri.getHost();
        if (host != null) {
          int port = uri.getPort();
          if (port > 0) host += ":" + port;
          se.setText(host);
        }
        if (ftp || sftp) {
          db.setVisibility(View.GONE);
        }
        String username = f.getUserName();

        if (smb && username != null) {
          int sep = username.indexOf('\\');
          if (sep < 0) sep = username.indexOf(';');
          de = (EditText) ib.findViewById(R.id.domain_edit);
          if (sep >= 0) {
            de.setText(username.substring(0, sep));
            username = username.substring(sep + 1);
          }
        }
        ue = (EditText) ib.findViewById(R.id.username_edit);
        ue.setText(username);
        we = (EditText) ib.findViewById(R.id.password_edit);
        we.setText(f.getPassword());
        fb.setVisibility(ftp ? View.VISIBLE : View.GONE);
        if (ftp) {
          en = (Spinner) fb.findViewById(R.id.encoding);
          ArrayAdapter<CharSequence> adapter =
              ArrayAdapter.createFromResource(
                  c, R.array.encoding, android.R.layout.simple_spinner_item);
          adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
          en.setAdapter(adapter);
          try {
            String enc_s = uri.getQueryParameter("e");
            if (Utils.str(enc_s) && !"Default".equals(enc_s)) {
              for (int i = 0; i < adapter.getCount(); i++)
                if (adapter.getItem(i).toString().indexOf(enc_s) == 0) {
                  en.setSelection(i);
                  break;
                }
            }
          } catch (Exception e) {
            Log.e(TAG, "", e);
          }
          active_ftp_cb = (CheckBox) fb.findViewById(R.id.active);
          String a_s = uri.getQueryParameter("a");
          active_ftp_cb.setChecked("true".equals(a_s));
        }
      } else {
        sb.setVisibility(View.GONE);
        db.setVisibility(View.GONE);
        ib.setVisibility(View.GONE);
        fb.setVisibility(View.GONE);
      }

      new AlertDialog.Builder(c)
          .setTitle(c.getString(R.string.fav_dialog))
          .setView(fdv)
          .setPositiveButton(R.string.dialog_ok, this)
          .setNegativeButton(R.string.dialog_cancel, this)
          .show();
    } catch (Exception e) {
      Log.e(TAG, null, e);
    }
  }