/v3.2/nimbits-android/src/com/nimbits/android/activity/MapViewActivity.java

http://nimbits-server.googlecode.com/ · Java · 312 lines · 212 code · 71 blank · 29 comment · 18 complexity · f5f7862266f24bf7e2e867d9196b204e MD5 · raw file

  1. package com.nimbits.android.activity;
  2. import android.app.AlertDialog;
  3. import android.content.Intent;
  4. import android.graphics.drawable.Drawable;
  5. import android.os.Bundle;
  6. import android.util.Log;
  7. import android.view.GestureDetector;
  8. import android.view.GestureDetector.OnGestureListener;
  9. import android.view.*;
  10. import com.google.android.maps.*;
  11. import com.google.gson.Gson;
  12. import com.google.gson.GsonBuilder;
  13. import com.google.gson.reflect.TypeToken;
  14. import com.nimbits.android.MapOverlay;
  15. import com.nimbits.android.R;
  16. import com.nimbits.android.account.OwnerAccountFactory;
  17. import com.nimbits.client.model.Const;
  18. import com.nimbits.client.model.common.CommonFactoryLocator;
  19. import com.nimbits.client.model.point.Point;
  20. import com.nimbits.client.model.point.PointModel;
  21. import com.nimbits.client.model.point.PointName;
  22. import com.nimbits.client.model.value.Value;
  23. import java.lang.reflect.Type;
  24. import java.util.LinkedList;
  25. import java.util.List;
  26. public class MapViewActivity extends MapActivity implements OnGestureListener {
  27. private List<Overlay> mapOverlays;
  28. private Drawable drawable;
  29. private Drawable drawableAlarm;
  30. private MapOverlay itemizedOverlay;
  31. private MapOverlay itemizedAlarmOverlay;
  32. private MapController mc;
  33. private String json;
  34. private Point point;
  35. private final Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd'T'HH:mm:ss Z").serializeNulls().create();
  36. private GestureDetector gestureScanner;
  37. private String baseURL;
  38. private void informUser()
  39. {
  40. AlertDialog.Builder dialog = new AlertDialog.Builder(MapViewActivity.this);
  41. dialog.setTitle("No GPS Data to Show");
  42. dialog.setMessage("In order to show your point data on a map, you must record at least one value with GPS Coordinates. Please visit www.nimbits.com to learn more");
  43. dialog.show();
  44. }
  45. public void onCreate(Bundle savedInstanceState) {
  46. super.onCreate(savedInstanceState);
  47. setContentView(R.layout.map_view);
  48. gestureScanner = new GestureDetector(this);
  49. Bundle b = getIntent().getExtras();
  50. PointName pointName = (PointName) CommonFactoryLocator.getInstance().createPointName(b.getString(Const.PARAM_POINT));
  51. json = b.getString(Const.PARAM_JSON);
  52. //String Category = b.getString("Category");
  53. String type = b.getString(Const.PARAM_TYPE);
  54. baseURL = b.getString(baseURL);
  55. MapView mapView = (MapView) findViewById(R.id.mapview1);
  56. mapView.setBuiltInZoomControls(true);
  57. mapView.setClickable(true);
  58. mc = mapView.getController();
  59. mapOverlays = mapView.getOverlays();
  60. drawable = this.getResources().getDrawable(R.drawable.greenflag);
  61. drawableAlarm = this.getResources().getDrawable(R.drawable.redflag);
  62. itemizedOverlay = new MapOverlay(drawable, MapViewActivity.this);
  63. itemizedAlarmOverlay = new MapOverlay(drawableAlarm, MapViewActivity.this);
  64. boolean additems = false;
  65. boolean addalarms = false;
  66. if (type.equals("point"))
  67. {
  68. if (json != null)
  69. {
  70. point = gson.fromJson(json, PointModel.class);
  71. }
  72. List<Value> values = null;
  73. //try {
  74. values = OwnerAccountFactory.getInstance().getNimbitsClient(MapViewActivity.this, baseURL).getSeries(pointName, 10);
  75. if (values != null)
  76. {
  77. if (values.size() > 0)
  78. {
  79. for (Value v: values)
  80. {
  81. Log.v("V","" + v.getValue() + v.getLatitude() + v.getLongitude());
  82. if (v.getLatitude() != 0 && v.getLongitude() !=0)
  83. {
  84. Log.v("map", "adding to map");
  85. int lat = (int) (v.getLatitude() * 1e6);
  86. int lng = (int) (v.getLongitude() * 1e6);
  87. GeoPoint geopoint = new GeoPoint(lat,lng);
  88. OverlayItem overlayitem = new OverlayItem(geopoint,v.getTimestamp().toString(),v.getValue() + " " + v.getNote());
  89. //if (! point.i
  90. {
  91. overlayitem.setMarker(drawable);
  92. }
  93. // else
  94. // {
  95. // Log.v("map", "adding alarm to map");
  96. // overlayitem.setMarker(drawableAlarm);
  97. // }
  98. itemizedOverlay.addOverlay(overlayitem);
  99. mc.animateTo(geopoint);
  100. mc.setCenter(geopoint);
  101. mc.setZoom(15);
  102. }
  103. }
  104. mapOverlays.add(itemizedOverlay);
  105. }
  106. else
  107. {
  108. informUser();
  109. }
  110. }
  111. else
  112. {
  113. Type pointListType = new TypeToken<LinkedList<Point>>() {}.getType();
  114. LinkedList<Point> points = gson.fromJson(json, pointListType);
  115. Log.v("j",json);
  116. if (points.size() > 0)
  117. {
  118. for (Point p : points)
  119. {
  120. Log.v("map", "adding to map");
  121. Log.v("map",""+p.getLastLat());
  122. Log.v("map",""+ p.getLastLng());
  123. Value value;
  124. value = OwnerAccountFactory.getInstance().getNimbitsClient(MapViewActivity.this, baseURL).getCurrentRecordedValue(pointName);
  125. if (p.getLastLat() != 0 && p.getLastLng() !=0)
  126. {
  127. Log.v("map","lat" + p.getLastLat() );
  128. Log.v("map","lng" + p.getLastLng() );
  129. int lat = (int) (p.getLastLat() * 1e6);
  130. int lng = (int) (p.getLastLng() * 1e6);
  131. GeoPoint geopoint = new GeoPoint(lat,lng);
  132. OverlayItem overlayitem = new OverlayItem(geopoint,p.getName().getValue(),value.getValue() + " " + value.getNote());
  133. //
  134. // if (! p.isAlarm())
  135. // {
  136. // overlayitem.setMarker(drawable );
  137. // itemizedOverlay.addOverlay(overlayitem);
  138. // additems = true;
  139. // }
  140. // else
  141. // {
  142. Log.v("map", "adding alarm to map");
  143. overlayitem.setMarker(drawableAlarm);
  144. itemizedAlarmOverlay.addOverlay(overlayitem);
  145. addalarms = true;
  146. //}
  147. mc.animateTo(geopoint);
  148. mc.setCenter(geopoint);
  149. mc.setZoom(15);
  150. }
  151. }
  152. if (additems)
  153. {
  154. mapOverlays.add(itemizedOverlay);
  155. }
  156. if (addalarms)
  157. {
  158. mapOverlays.add(itemizedAlarmOverlay);
  159. }
  160. //mapOverlays.add(itemizedOverlay);
  161. }
  162. else
  163. {
  164. informUser();
  165. }
  166. }
  167. }
  168. }
  169. private void loadCategories()
  170. {
  171. Bundle b = new Bundle();
  172. Intent intent = new Intent();
  173. b.putBoolean(Const.PARAM_RELOAD, false);
  174. b.putString(Const.PARAM_BASE_URL,baseURL);
  175. intent.putExtras( b);
  176. intent.setClass( MapViewActivity.this , StartActivity.class);
  177. startActivity(intent);
  178. finish();
  179. }
  180. @Override
  181. protected boolean isRouteDisplayed() {
  182. // TODO Auto-generated method stub
  183. return false;
  184. }
  185. @Override
  186. public boolean onOptionsItemSelected(MenuItem item) {
  187. // Handle item selection
  188. switch (item.getItemId()) {
  189. case R.id.main_menu:
  190. loadCategories();
  191. return true;
  192. default:
  193. return super.onOptionsItemSelected(item);
  194. }
  195. }
  196. @Override
  197. public boolean onCreateOptionsMenu(Menu menu) {
  198. MenuInflater inflater = getMenuInflater();
  199. inflater.inflate(R.menu.map_menu, menu);
  200. return true;
  201. }
  202. @Override
  203. public void onDestroy(){
  204. super.onDestroy();
  205. this.finish();
  206. }
  207. public void onTerminate() {
  208. // clean up application global
  209. //super.onStop();
  210. super.onDestroy();
  211. this.finish(); // /// close the application
  212. }
  213. @Override
  214. public boolean onTouchEvent(MotionEvent event) {
  215. return gestureScanner.onTouchEvent(event);
  216. }
  217. public boolean onDown(MotionEvent e) {
  218. // TODO Auto-generated method stub
  219. return false;
  220. }
  221. public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
  222. float velocityY) {
  223. // TODO Auto-generated method stub
  224. return false;
  225. }
  226. public void onLongPress(MotionEvent e) {
  227. // TODO Auto-generated method stub
  228. }
  229. public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
  230. float distanceY) {
  231. // TODO Auto-generated method stub
  232. return false;
  233. }
  234. public void onShowPress(MotionEvent e) {
  235. // TODO Auto-generated method stub
  236. }
  237. public boolean onSingleTapUp(MotionEvent e) {
  238. // TODO Auto-generated method stub
  239. return false;
  240. }
  241. }