@Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_print_job);
    Intent intent = getIntent();
    String type = intent.getStringExtra("type");
    String sPrinter;
    if (type.equals("static")) {
      sPrinter = intent.getStringExtra("printer");
      PrintQueueIniHandler ini = new PrintQueueIniHandler(getBaseContext());
      printerConfig = ini.getPrinter(sPrinter);
    } else {
      sPrinter = intent.getStringExtra("name");
      printerConfig =
          new PrintQueueConfig(
              intent.getStringExtra("name"),
              intent.getStringExtra("protocol"),
              intent.getStringExtra("host"),
              intent.getStringExtra("port"),
              intent.getStringExtra("queue"));
      printerConfig.userName = "******";
      printerConfig.password = "";
    }
    if (printerConfig == null) {
      new AlertDialog.Builder(this)
          .setTitle("Error")
          .setMessage("Config for " + sPrinter + " not found")
          .setIcon(android.R.drawable.ic_dialog_alert)
          .setPositiveButton(
              android.R.string.ok,
              new DialogInterface.OnClickListener() {

                public void onClick(DialogInterface dialog, int whichButton) {
                  finish();
                }
              })
          .show();
      return;
    }
    data = intent.getData();
    if (data == null) {
      this.doFinish("File URI is null");
      return;
    }
    fileName = getFileName();
    String[] fileParts = fileName.split("\\.");
    String ext = "";
    if (fileParts.length > 1) {
      ext = fileParts[fileParts.length - 1].toLowerCase(Locale.ENGLISH);
    }
    if (!ext.equals("")) {
      mimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension(ext);
    }
    if (mimeType == null) {
      mimeType = "";
    }
    if (mimeType.equals("")) {
      mimeType = intent.getStringExtra("mimeType");
    }
    try {
      cupsClient = new CupsClient(Util.getClientURL(printerConfig));
    } catch (Exception e) {
      this.doFinish("Invalid ULR " + Util.getClientUrlStr(printerConfig));
      return;
    }
    cupsClient.setUserName(printerConfig.userName);
    AuthInfo auth = null;
    if (!(printerConfig.password.equals(""))) {
      auth = new AuthInfo(printerConfig.userName, printerConfig.password);
    }
    getPrinterTask = new GetPrinterTask(cupsClient, auth, Util.getQueue(printerConfig), true);
    getPrinterTask.setListener(this);
    try {
      getPrinterTask.execute().get(5000, TimeUnit.MILLISECONDS);
    } catch (Exception e) {
      doFinish(e.toString());
      return;
    }

    cupsPrinter = getPrinterTask.getPrinter();
    getPrinterTask = null;
    if (cupsPrinter == null) {
      doFinish("Get printer failed");
      return;
    }

    if (!cupsPrinter.mimeTypeSupported(mimeType)) {
      setAcceptMimeType(mimeType, extension);
    } else {
      mimeTypeSupported = true;
    }
    if (mimeType.contains("image")) isImage = true;
    else isImage = false;

    auth = null;
    if (!(printerConfig.password.equals(""))) {
      auth = new AuthInfo(printerConfig.userName, printerConfig.password);
    }
    cupsppd = new CupsPpd(auth);
    if (printerConfig.noOptions) {
      if (mimeTypeSupported) {
        setStdOpts();
        setPrint(cupsppd.getCupsStdString());
        return;
      }
    }

    printButton = getButton("Print");
    printButton.setOnClickListener(
        new View.OnClickListener() {
          public void onClick(View v) {
            printButton.setFocusableInTouchMode(true);
            printButton.requestFocus();
            if (!layout.update()) return;
            String stdAttrs = cupsppd.getCupsStdString();
            setPrint(stdAttrs);
          }
        });

    moreButton = getButton("More...");
    moreButton.setEnabled(true);
    moreButton.setOnClickListener(
        new View.OnClickListener() {
          public void onClick(View v) {
            doGroup();
          }
        });
    byte[] md5 = null;
    GetPpdTask getPpdTask = new GetPpdTask(cupsPrinter, cupsppd, md5);
    getPpdTask.get(Thread.NORM_PRIORITY);
    // should check exception here
    setStdOpts();
    buttonRow = new TableRow(this);
    buttonRow.addView(moreButton);
    buttonRow.addView(printButton);
    setControls();
  }