/**
   * Initialize {@link FormEntryController} with {@link FormDef} from binary or from XML. If given
   * an instance, it will be used to fill the {@link FormDef}.
   */
  @Override
  protected Integer doInBackground(Void... nothing) {

    FormController formController = MjivitaPlus.getInstance().getFormController();

    // validation failed, pass specific failure
    int validateStatus = formController.validateAnswers(mMarkCompleted);
    if (validateStatus != FormEntryController.ANSWER_OK) {
      return validateStatus;
    }

    if (mMarkCompleted) {
      formController.postProcessInstance();
    }

    MjivitaPlus.getInstance()
        .getActivityLogger()
        .logInstanceAction(this, "save", Boolean.toString(mMarkCompleted));

    boolean saveOutcome = exportData(mMarkCompleted);

    // attempt to remove any scratch file
    File shadowInstance = savepointFile(formController.getInstancePath());
    if (shadowInstance.exists()) {
      shadowInstance.delete();
    }

    if (saveOutcome) {
      return mSave ? SAVED_AND_EXIT : SAVED;
    }

    return SAVE_ERROR;
  }