package com.f8full.casserolesencours; import java.text.DateFormat; import java.text.ParseException; import java.util.ArrayList; import java.util.Date; import java.util.List; import com.google.android.maps.GeoPoint; import com.google.android.maps.MapActivity; import com.google.android.maps.MapController; import com.google.android.maps.MapView; import com.google.android.maps.MyLocationOverlay; import com.google.android.maps.Overlay; import com.google.android.maps.OverlayItem; import com.f8full.casserolesencours.R; import android.graphics.drawable.Drawable; import android.os.Bundle; public class CasserolesEnCoursViewerActivity extends MapActivity { MapView mMapView; private MapController mMapController; List<Overlay> mapOverlays; private MyLocationOverlay mMyLocationOverlay; private CasserolePopupOverlay mLastPopupOverlay; Drawable redPot; Drawable redToBLue0Pot; Drawable redToBLue1Pot; Drawable redToBLue2Pot; Drawable bluePot; private CasserolesItemizedOverlay itemizedOverlayRed; private CasserolesItemizedOverlay itemizedOverlayRedToBlue0; private CasserolesItemizedOverlay itemizedOverlayRedToBlue1; private CasserolesItemizedOverlay itemizedOverlayRedToBlue2; private CasserolesItemizedOverlay itemizedOverlayBlue; private boolean mShowMyLocation; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.viewer); ArrayList<String> rowsExtra = getIntent().getStringArrayListExtra("rowsData"); if(rowsExtra.size() == 0) { finish(); } else { mMapView = (MapView) findViewById(R.id.mapview); mMapView.setBuiltInZoomControls(true); mMapController = mMapView.getController(); mShowMyLocation = getIntent().getBooleanExtra("myLocation", false); if( mShowMyLocation == true) { //Add the MyLocationOverlay mMyLocationOverlay = new MyLocationOverlay(this, mMapView); mMapController.setZoom(14); } else //wolrmap, let zoom out { mMapController.setZoom(2); } mapOverlays = mMapView.getOverlays(); redPot = this.getResources().getDrawable(R.drawable.ic_launcher); itemizedOverlayRed = new CasserolesItemizedOverlay(redPot); redToBLue0Pot = this.getResources().getDrawable(R.drawable.ic_redtoblue0); redToBLue1Pot = this.getResources().getDrawable(R.drawable.ic_redtoblue1); redToBLue2Pot = this.getResources().getDrawable(R.drawable.ic_redtoblue2); bluePot = this.getResources().getDrawable(R.drawable.ic_blue); itemizedOverlayRedToBlue0 = new CasserolesItemizedOverlay(redToBLue0Pot); itemizedOverlayRedToBlue1 = new CasserolesItemizedOverlay(redToBLue1Pot); itemizedOverlayRedToBlue2 = new CasserolesItemizedOverlay(redToBLue2Pot); itemizedOverlayBlue = new CasserolesItemizedOverlay(bluePot); Date newestTime = null; Date oldestTime = null; try { //relative time means real time now : pot will turn blue after 30 minutes //DEACTIVATED /*if(getIntent().getBooleanExtra("relativeTime", false) == true) { newestTime = new Date(); //now Calendar cl = Calendar.getInstance(); cl.setTime(newestTime); cl.add(Calendar.MINUTE, -30); oldestTime = cl.getTime(); } else {*/ newestTime = DateFormat.getDateTimeInstance().parse(rowsExtra.get(0).split("\\|")[0]); oldestTime = DateFormat.getDateTimeInstance().parse(rowsExtra.get(rowsExtra.size()-1).split("\\|")[0]); //} DEACTIVATED } catch (ParseException e) { // TODO Auto-generated catch block e.printStackTrace(); } for (String row : rowsExtra) { String[] cells = row.split("\\|"); //Location is in second element in the forme of 'Lat Long' String[] latLong = cells[1].split(" "); GeoPoint point = new GeoPoint((int)(Double.parseDouble(latLong[0])*1e6),(int)(Double.parseDouble(latLong[1])*1e6)); OverlayItem overlayitem = new OverlayItem(point, "", ""); Date rowDate = null; try { rowDate = DateFormat.getDateTimeInstance().parse(cells[0]); } catch (ParseException e) { // TODO Auto-generated catch block e.printStackTrace(); } if(getIntent().getBooleanExtra("timeColored", false) == false) { itemizedOverlayRed.addOverlay(overlayitem); } else { switch (mapValue(rowDate.getTime(), oldestTime.getTime(), newestTime.getTime(), 1L, 5L)) { case 1: itemizedOverlayBlue.addOverlay(overlayitem); break; case 2: itemizedOverlayRedToBlue2.addOverlay(overlayitem); break; case 3: itemizedOverlayRedToBlue1.addOverlay(overlayitem); break; case 4: itemizedOverlayRedToBlue0.addOverlay(overlayitem); break; case 5: itemizedOverlayRed.addOverlay(overlayitem); break; } } } if(itemizedOverlayBlue.size() !=0) mapOverlays.add(itemizedOverlayBlue); if(itemizedOverlayRedToBlue2.size() !=0) mapOverlays.add(itemizedOverlayRedToBlue2); if(itemizedOverlayRedToBlue1.size() !=0) mapOverlays.add(itemizedOverlayRedToBlue1); if(itemizedOverlayRedToBlue0.size() !=0) mapOverlays.add(itemizedOverlayRedToBlue0); if(itemizedOverlayRed.size() !=0) mapOverlays.add(itemizedOverlayRed); //Newest location extraction; String newestLocRow = rowsExtra.get(0); String[] newestLocCells = newestLocRow.split("\\|"); //Location is in second element in the forme of 'Lat Long' String[] newestlatLong = newestLocCells[1].split(" "); GeoPoint LastestLocpoint = new GeoPoint((int)(Double.parseDouble(newestlatLong[0])*1e6),(int)(Double.parseDouble(newestlatLong[1])*1e6)); mLastPopupOverlay = new CasserolePopupOverlay(mShowMyLocation); mLastPopupOverlay.setPosPoint(LastestLocpoint); mLastPopupOverlay.setLastRecordDate(newestTime); mapOverlays.add(mLastPopupOverlay); if( mShowMyLocation == true) { mapOverlays.add(mMyLocationOverlay); mMyLocationOverlay.enableMyLocation(); mMyLocationOverlay.runOnFirstFix(new Runnable() { public void run() { mMapController.animateTo(mMyLocationOverlay.getMyLocation()); } }); } } } private int mapValue(long value, long leftMin, long leftMax, long rightMin, long rightMax) { long leftSpan = leftMax - leftMin; long rightSpan = rightMax - rightMin; double valueScaled = (double)(value - leftMin) / (double)(leftSpan); return (int)(rightMin + (valueScaled * rightSpan)); } @Override protected void onResume() { super.onResume(); if( mShowMyLocation == true) { mMyLocationOverlay.enableMyLocation(); } } @Override protected void onPause() { super.onPause(); if( mShowMyLocation == true) { mMyLocationOverlay.disableMyLocation(); } } @Override protected boolean isRouteDisplayed() { // TODO Auto-generated method stub return false; } }