コード例 #1
0
  /**
   * 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 SaveResult doInBackground(Void... nothing) {
    SaveResult saveResult = new SaveResult();

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

    publishProgress(Collect.getInstance().getString(R.string.survey_saving_validating_message));

    try {
      int validateStatus = formController.validateAnswers(mMarkCompleted);
      if (validateStatus != FormEntryController.ANSWER_OK) {
        // validation failed, pass specific failure
        saveResult.setSaveResult(validateStatus);
        return saveResult;
      }
    } catch (Exception e) {
      Log.e(t, e.getMessage(), e);

      // SCTO-825
      // that means that we have a bad design
      // save the exception to be used in the error dialog.
      saveResult.setSaveErrorMessage(e.getMessage());
      saveResult.setSaveResult(SAVE_ERROR);
      return saveResult;
    }

    // check if the "Cancel" was hit and exit.
    if (isCancelled()) {
      return null;
    }

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

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

    // close all open databases of external data.
    Collect.getInstance().getExternalDataManager().close();

    // if there is a meta/instanceName field, be sure we are using the latest value
    // just in case the validate somehow triggered an update.
    String updatedSaveName = formController.getSubmissionMetadata().instanceName;
    if (updatedSaveName != null) {
      mInstanceName = updatedSaveName;
    }

    try {
      exportData(mMarkCompleted);

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

      saveResult.setSaveResult(mSave ? SAVED_AND_EXIT : SAVED);
    } catch (Exception e) {
      Log.e(t, e.getMessage(), e);

      saveResult.setSaveErrorMessage(e.getMessage());
      saveResult.setSaveResult(SAVE_ERROR);
    }

    return saveResult;
  }