title: android draw paint on map not visible in ICS but works in GB
body: <p>I`m using some code found on google (or perhaps here, not sure), to fetch two points and place them on map, together with route between them. This code is based on JSON parsing and it works pefrectly when tested on my phone running GB 2.3. On emulator with 4.1 and on friends phone with ICS, route is not visible, only objects. I tried with <em>hardwareAccelerated</em> option in my Manifest but no luck. Anyway, here is the code, maybe someone knows why route is not visible on ICS.</p>
  
  <pre><code>public class DrivingDirectionActivity extends MapActivity {
  
  Point p1 = new Point();
  Point p2 = new Point();
  
  public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
  
      MapView mapView = (MapView) findViewById(R.id.map);
      // setting a default value
      double src_lat = 18.5535;
      double src_long = 73.7966;
      double dest_lat = 18.5535;
      double dest_long = 73.7966;
  
      Geocoder coder = new Geocoder(getApplicationContext(),
              Locale.getDefault());
  
      List&lt;Address&gt; address_src = null;
      List&lt;Address&gt; address_dest = null;
  
      try {
          address_src = coder
                  .getFromLocationName(
                          "Deepmala Housing Complex, Pimple Saudagar, Pimpri Chinchwad",
                          1);
          if (address_src.size() &gt; 0) {
              Address loc = address_src.get(0);
              src_lat = loc.getLatitude();
              src_long = loc.getLongitude();
          }
      } catch (IOException e) { // TODO Auto-generated catch block
          e.printStackTrace();
      }
  
      try {
          address_dest = coder.getFromLocationName(
                  "Infosys Phase 2, Hinjewadi Phase II, Hinjewadi", 1);
          if (address_dest.size() &gt; 0) {
              Address loc = address_dest.get(0);
              dest_lat = loc.getLatitude();
              dest_long = loc.getLongitude();
          }
      } catch (IOException e) { // TODO Auto-generated catch block
          e.printStackTrace();
      }
  
      mapView.setBuiltInZoomControls(true);
      GeoPoint srcGeoPoint = new GeoPoint((int) (src_lat * 1E6),
              (int) (src_long * 1E6));
      GeoPoint destGeoPoint = new GeoPoint((int) (dest_lat * 1E6),
              (int) (dest_long * 1E6));
  
      DrawPath(srcGeoPoint, destGeoPoint, Color.GREEN, mapView);
  
      mapView.getController().animateTo(srcGeoPoint);
      mapView.getController().setZoom(13);
  
  }
  
  protected boolean isRouteDisplayed() {
      // TODO Auto-generated method stub
      return false;
  }
  
  private void DrawPath(GeoPoint src, GeoPoint dest, int color,
          MapView mMapView) {
      // connect to map web service
      HttpClient httpclient = new DefaultHttpClient();
      HttpPost httppost = new HttpPost(makeUrl(src, dest));
      HttpResponse response;
      try {
          response = httpclient.execute(httppost);
  
          HttpEntity entity = response.getEntity();
          InputStream is = null;
  
          is = entity.getContent();
          BufferedReader reader = new BufferedReader(new InputStreamReader(
                  is, "iso-8859-1"), 8);
          StringBuilder sb = new StringBuilder();
          sb.append(reader.readLine() + "\n");
          String line = "0";
          while ((line = reader.readLine()) != null) {
              sb.append(line + "\n");
          }
          is.close();
          reader.close();
          String result = sb.toString();
          JSONObject jsonObject = new JSONObject(result);
          JSONArray routeArray = jsonObject.getJSONArray("routes");
          JSONObject routes = routeArray.getJSONObject(0);
          JSONObject overviewPolylines = routes
                  .getJSONObject("overview_polyline");
          String encodedString = overviewPolylines.getString("points");
          List&lt;GeoPoint&gt; pointToDraw = decodePoly(encodedString);
          mMapView.getOverlays().add(new MyOverLay(pointToDraw));
      } catch (ClientProtocolException e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
      } catch (IOException e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
      } catch (Exception e) {
          e.printStackTrace();
          // TODO: handle exception
      }
  
  }
  
  private List&lt;GeoPoint&gt; decodePoly(String encoded) {
  
      List&lt;GeoPoint&gt; poly = new ArrayList&lt;GeoPoint&gt;();
      int index = 0, len = encoded.length();
      int lat = 0, lng = 0;
  
      while (index &lt; len) {
          int b, shift = 0, result = 0;
          do {
              b = encoded.charAt(index++) - 63;
              result |= (b &amp; 0x1f) &lt;&lt; shift;
              shift += 5;
          } while (b &gt;= 0x20);
          int dlat = ((result &amp; 1) != 0 ? ~(result &gt;&gt; 1) : (result &gt;&gt; 1));
          lat += dlat;
  
          shift = 0;
          result = 0;
          do {
              b = encoded.charAt(index++) - 63;
              result |= (b &amp; 0x1f) &lt;&lt; shift;
              shift += 5;
          } while (b &gt;= 0x20);
          int dlng = ((result &amp; 1) != 0 ? ~(result &gt;&gt; 1) : (result &gt;&gt; 1));
          lng += dlng;
  
          GeoPoint p = new GeoPoint((int) (((double) lat / 1E5) * 1E6),
                  (int) (((double) lng / 1E5) * 1E6));
          poly.add(p);
      }
  
      return poly;
  }
  
  private String makeUrl(GeoPoint src, GeoPoint dest) {
      // TODO Auto-generated method stub
  
      StringBuilder urlString = new StringBuilder();
  
      urlString.append("http://maps.googleapis.com/maps/api/directions/json");
      urlString.append("?origin=");// from
      urlString.append(Double.toString((double) src.getLatitudeE6() / 1.0E6));
      urlString.append(",");
      urlString
              .append(Double.toString((double) src.getLongitudeE6() / 1.0E6));
      urlString.append("&amp;destination=");// to
      urlString
              .append(Double.toString((double) dest.getLatitudeE6() / 1.0E6));
      urlString.append(",");
      urlString
              .append(Double.toString((double) dest.getLongitudeE6() / 1.0E6));
      urlString.append("&amp;sensor=false");
  
      Log.d("xxx", "URL=" + urlString.toString());
      return urlString.toString();
  }
  
  class MyOverLay extends Overlay {
      private int pathColor;
      private final List&lt;GeoPoint&gt; points;
      private boolean drawStartEnd;
  
      public MyOverLay(List&lt;GeoPoint&gt; pointToDraw) {
          // TODO Auto-generated constructor stub
          this(pointToDraw, Color.GREEN, true);
      }
  
      public MyOverLay(List&lt;GeoPoint&gt; points, int pathColor,
              boolean drawStartEnd) {
          this.points = points;
          this.pathColor = pathColor;
          this.drawStartEnd = drawStartEnd;
      }
  
      private void drawOval(Canvas canvas, Paint paint, Point point) {
          Paint ovalPaint = new Paint(paint);
          ovalPaint.setStyle(Paint.Style.FILL_AND_STROKE);
          ovalPaint.setStrokeWidth(2);
          ovalPaint.setColor(Color.BLUE);
          int _radius = 6;
          RectF oval = new RectF(point.x - _radius, point.y - _radius,
                  point.x + _radius, point.y + _radius);
          canvas.drawOval(oval, ovalPaint);
      }
  
      public boolean draw(Canvas canvas, MapView mapView, boolean shadow,
              long when) {
          Projection projection = mapView.getProjection();
          if (shadow == false &amp;&amp; points != null) {
              Point startPoint = null, endPoint = null;
              Path path = new Path();
              // We are creating the path
              for (int i = 0; i &lt; points.size(); i++) {
                  GeoPoint gPointA = points.get(i);
                  Point pointA = new Point();
                  projection.toPixels(gPointA, pointA);
                  if (i == 0) { // This is the start point
                      startPoint = pointA;
                      path.moveTo(pointA.x, pointA.y);
                  } else {
                      if (i == points.size() - 1)// This is the end point
                          endPoint = pointA;
                      path.lineTo(pointA.x, pointA.y);
                  }
              }
  
              Paint paint = new Paint();
              paint.setAntiAlias(true);
              paint.setColor(pathColor);
              paint.setStyle(Paint.Style.STROKE);
              paint.setStrokeWidth(5);
              paint.setAlpha(90);
              if (getDrawStartEnd()) {
                  if (startPoint != null) {
                      drawOval(canvas, paint, startPoint);
                  }
                  if (endPoint != null) {
                      drawOval(canvas, paint, endPoint);
                  }
              }
              if (!path.isEmpty())
                  canvas.drawPath(path, paint);
          }
          return super.draw(canvas, mapView, shadow, when);
      }
  
      public boolean getDrawStartEnd() {
          return drawStartEnd;
      }
  
      public void setDrawStartEnd(boolean markStartEnd) {
          drawStartEnd = markStartEnd;
      }
  }
  }
  </code></pre>