private void shareAction() throws Exception {
   String form = sectionObject.toString();
   float lat = (float) latitude;
   float lon = (float) longitude;
   String osmUrl = Utilities.osmUrlFromLatLong(lat, lon, true, false);
   // double altim = note.getAltim();
   List<String> imagePaths = FormUtilities.getImages(form);
   File imageFile = null;
   if (imagePaths.size() > 0) {
     String imagePath = imagePaths.get(0);
     imageFile = new File(imagePath);
     if (!imageFile.exists()) {
       imageFile = null;
     }
   }
   String formText = FormUtilities.formToPlainText(form, false);
   formText = formText + "\n" + osmUrl;
   String shareNoteMsg = getResources().getString(R.string.share_note_with);
   if (imageFile != null) {
     ShareUtilities.shareTextAndImage(this, shareNoteMsg, formText, imageFile);
   } else {
     ShareUtilities.shareText(this, shareNoteMsg, formText);
   }
 }
  private void saveAction() throws Exception {
    // if in landscape mode store last inserted info, since that fragment has not been stored
    if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
      FragmentDetail detailFragment =
          (FragmentDetail) getSupportFragmentManager().findFragmentById(R.id.detailFragment);
      if (detailFragment != null) {
        detailFragment.storeFormItems(false);
      }
    }

    // extract and check constraints
    List<String> availableFormNames = TagsManager.getFormNames4Section(sectionObject);
    String label = null;
    for (String formName : availableFormNames) {
      JSONObject formObject = TagsManager.getForm4Name(formName, sectionObject);

      JSONArray formItemsArray = TagsManager.getFormItems(formObject);

      int length = formItemsArray.length();
      String value = null;
      for (int i = 0; i < length; i++) {
        JSONObject jsonObject = formItemsArray.getJSONObject(i);

        String key = "-";
        if (jsonObject.has(TAG_KEY)) key = jsonObject.getString(TAG_KEY).trim();

        if (jsonObject.has(TAG_VALUE)) {
          value = jsonObject.getString(TAG_VALUE).trim();
        }
        if (jsonObject.has(TAG_ISLABEL)) {
          String isLabelStr = jsonObject.getString(TAG_ISLABEL).trim();
          boolean isLabel = Boolean.parseBoolean(isLabelStr);
          if (isLabel) label = value;
        }

        // inject latitude
        if (key.equals(LibraryConstants.LATITUDE)) {
          String latitudeString = String.valueOf(latitude);
          value = latitudeString;
          jsonObject.put(TAG_VALUE, latitudeString);
        }
        // inject longitude
        if (key.equals(LibraryConstants.LONGITUDE)) {
          String longitudeString = String.valueOf(longitude);
          value = longitudeString;
          jsonObject.put(TAG_VALUE, longitudeString);
        }

        Constraints constraints = FormUtilities.handleConstraints(jsonObject, null);
        if (value == null || !constraints.isValid(value)) {
          String constraintDescription = constraints.getDescription();
          String validfieldMsg = getString(R.string.form_field_check);
          String msg = Utilities.format(validfieldMsg, key, formName, constraintDescription);
          Utilities.messageDialog(this, msg, null);
          return;
        }
      }
    }

    // finally store data
    String sectionObjectString = sectionObject.toString();
    Date sqlDate = new Date(System.currentTimeMillis());
    String timestamp = LibraryConstants.TIME_FORMATTER_SQLITE.format(sqlDate);

    if (label == null) {
      label = sectionName;
    }
    String[] formDataArray = { //
      String.valueOf(longitude), //
      String.valueOf(latitude), //
      String.valueOf(elevation), //
      timestamp, //
      label, //
      "POI", //
      sectionObjectString
    };
    Intent intent = getIntent();
    intent.putExtra(LibraryConstants.PREFS_KEY_FORM, formDataArray);
    setResult(Activity.RESULT_OK, intent);
    finish();
  }