示例#1
0
 public OsmBugsUtil getOsmbugsUtil(OpenStreetNote bug) {
   OsmandSettings settings = ((OsmandApplication) activity.getApplication()).getSettings();
   if ((bug != null && bug.isLocal())
       || settings.OFFLINE_EDITION.get()
       || !settings.isInternetConnectionAvailable(true)) {
     return local;
   } else {
     return remote;
   }
 }
示例#2
0
 @Override
 public void onPrepareBufferImage(Canvas canvas, RotatedTileBox tileBox, DrawSettings settings) {
   if (tileBox.getZoom() >= startZoom) {
     // request to load
     data.queryNewData(tileBox);
     List<OpenStreetNote> objects = data.getResults();
     if (objects != null) {
       for (OpenStreetNote o : objects) {
         int x = tileBox.getPixXFromLonNoRot(o.getLongitude());
         int y = tileBox.getPixYFromLatNoRot(o.getLatitude());
         canvas.drawCircle(
             x,
             y,
             getRadiusBug(tileBox),
             o.isLocal() ? pointNotSubmitedUI : (o.isOpened() ? pointOpenedUI : pointClosedUI));
       }
     }
   }
 }
示例#3
0
 @Override
 public boolean onSingleTap(PointF point, RotatedTileBox tileBox) {
   ArrayList<OpenStreetNote> list = new ArrayList<OpenStreetNote>();
   getBugFromPoint(tileBox, point, list);
   if (!list.isEmpty()) {
     StringBuilder res = new StringBuilder();
     int i = 0;
     for (OpenStreetNote o : list) {
       if (i++ > 0) {
         res.append("\n\n");
       }
       res.append(
           activity.getString(R.string.osb_bug_name)
               + " : "
               + o.getCommentDescription()); // $NON-NLS-1$
     }
     AccessibleToast.makeText(activity, res.toString(), Toast.LENGTH_LONG).show();
     return true;
   }
   return false;
 }
示例#4
0
 public void getBugFromPoint(RotatedTileBox tb, PointF point, List<? super OpenStreetNote> res) {
   List<OpenStreetNote> objects = data.getResults();
   if (objects != null && view != null) {
     int ex = (int) point.x;
     int ey = (int) point.y;
     final int rad = getRadiusBug(tb);
     int radius = rad * 3 / 2;
     int small = rad * 3 / 4;
     try {
       for (int i = 0; i < objects.size(); i++) {
         OpenStreetNote n = objects.get(i);
         int x = (int) tb.getPixXFromLatLon(n.getLatitude(), n.getLongitude());
         int y = (int) tb.getPixYFromLatLon(n.getLatitude(), n.getLongitude());
         if (Math.abs(x - ex) <= radius && Math.abs(y - ey) <= radius) {
           radius = small;
           res.add(n);
         }
       }
     } catch (IndexOutOfBoundsException e) {
       // that's really rare case, but is much efficient than introduce synchronized block
     }
   }
 }
示例#5
0
  protected List<OpenStreetNote> loadingBugs(
      double topLatitude, double leftLongitude, double bottomLatitude, double rightLongitude) {
    final int deviceApiVersion = android.os.Build.VERSION.SDK_INT;

    String SITE_API;

    if (deviceApiVersion >= android.os.Build.VERSION_CODES.GINGERBREAD) {
      SITE_API = "https://api.openstreetmap.org/";
    } else {
      SITE_API = "http://api.openstreetmap.org/";
    }

    List<OpenStreetNote> bugs = new ArrayList<OpenStreetNote>();
    StringBuilder b = new StringBuilder();
    b.append(SITE_API + "api/0.6/notes?bbox="); // $NON-NLS-1$
    b.append(leftLongitude); // $NON-NLS-1$
    b.append(",").append(bottomLatitude); // $NON-NLS-1$
    b.append(",").append(rightLongitude); // $NON-NLS-1$
    b.append(",").append(topLatitude); // $NON-NLS-1$
    try {
      log.info("Loading bugs " + b); // $NON-NLS-1$
      URLConnection connection = NetworkUtils.getHttpURLConnection(b.toString());
      BufferedReader reader =
          new BufferedReader(new InputStreamReader(connection.getInputStream()));
      XmlPullParser parser = Xml.newPullParser();
      parser.setInput(reader);
      int tok;
      OpenStreetNote current = null;
      int commentIndex = 0;
      while ((tok = parser.next()) != XmlPullParser.END_DOCUMENT) {
        if (tok == XmlPullParser.START_TAG) {
          if (parser.getName().equals("note")) {
            current = new OpenStreetNote();
            commentIndex = -1;
            current.setLongitude(Double.parseDouble(parser.getAttributeValue("", "lon")));
            current.setLatitude(Double.parseDouble(parser.getAttributeValue("", "lat")));
            current.setOpened(true);
            bugs.add(current);
          } else if (parser.getName().equals("status") && current != null) {
            current.setOpened("open".equals(readText(parser, "status")));
          } else if (parser.getName().equals("id") && current != null) {
            current.id = Long.parseLong(readText(parser, "id"));
          } else if (parser.getName().equals("comment")) {
            commentIndex++;
          } else if (parser.getName().equals("user") && current != null) {
            if (commentIndex == current.users.size()) {
              current.users.add(readText(parser, "user"));
            }
          } else if (parser.getName().equals("date") && current != null) {
            if (commentIndex == current.dates.size()) {
              current.dates.add(readText(parser, "date"));
            }
          } else if (parser.getName().equals("text") && current != null) {
            if (commentIndex == current.comments.size()) {
              current.comments.add(readText(parser, "text"));
            }
          }
        }
      }
      reader.close();
    } catch (IOException e) {
      log.warn("Error loading bugs", e); // $NON-NLS-1$
    } catch (NumberFormatException e) {
      log.warn("Error loading bugs", e); // $NON-NLS-1$
    } catch (RuntimeException e) {
      log.warn("Error loading bugs", e); // $NON-NLS-1$
    } catch (XmlPullParserException e) {
      log.warn("Error loading bugs", e); // $NON-NLS-1$
    }
    for (OsmNotesPoint p : local.getOsmbugsPoints()) {
      if (p.getId() < 0) {
        OpenStreetNote bug = new OpenStreetNote();
        bug.setId(p.getId());
        bug.setLongitude(p.getLongitude());
        bug.setLatitude(p.getLatitude());
        bug.dates.add("");
        bug.users.add(activity.getMyApplication().getSettings().USER_NAME.get());
        bug.comments.add(p.getText());
        bug.setOpened(p.getAction() == Action.CREATE || p.getAction() == Action.MODIFY);
        bug.setLocal(true);
        bugs.add(bug);
      }
    }
    return bugs;
  }