package org.magnum.soda.example.maint; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.List; import java.util.Properties; import java.util.concurrent.ExecutionException; import java.util.concurrent.Future; import org.magnum.soda.Callback; import org.magnum.soda.android.AndroidSoda; import org.magnum.soda.android.AndroidSodaListener; import org.magnum.soda.android.SodaInvokeInUi; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.EditText; import com.google.android.gms.maps.CameraUpdateFactory; import com.google.android.gms.maps.GoogleMap; import com.google.android.gms.maps.GoogleMap.OnMapClickListener; import com.google.android.gms.maps.GoogleMap.OnMarkerClickListener; import com.google.android.gms.maps.MapFragment; import com.google.android.gms.maps.model.Circle; import com.google.android.gms.maps.model.CircleOptions; import com.google.android.gms.maps.model.LatLng; import com.google.android.gms.maps.model.Marker; import com.google.android.gms.maps.model.MarkerOptions; public class MonitorZoneActivity extends Activity implements OnMapClickListener, OnMarkerClickListener, AndroidSodaListener{ private String mHost; private GoogleMap mMap; private EditText radiusText; private Button createZoneButton; private double selectedLatitude; private double selectedLongitude; private String username; static final LatLng Blacksburg = new LatLng(37.225134, -80.425425); private List<MaintenanceReport> mReportList = new ArrayList<MaintenanceReport>(); private AndroidSodaListener asl_ = null; private AndroidSoda as = null; //temporary private List<MonitorZone> zonelist= new ArrayList<MonitorZone>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_monitorzone); radiusText = (EditText) findViewById(R.id.monitorzone_radius_edittext); createZoneButton = (Button) findViewById(R.id.CreateMonitorZone_Button); SharedPreferences sharedPref = this.getSharedPreferences(getString(R.string.app_name),Context.MODE_PRIVATE); username = sharedPref.getString("username", "no"); Properties prop = new Properties(); try { InputStream rawResource = getResources().openRawResource( R.raw.connection); prop.load(rawResource); System.out.println("The properties are now loaded"); System.out.println("properties: " + prop); mHost = prop.getProperty("host"); } catch (IOException e) { Log.e("Property File not found", e.getLocalizedMessage()); } mMap = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap(); mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(Blacksburg, 15)); mMap.setMapType(GoogleMap.MAP_TYPE_NORMAL); CircleOptions circleOptions = new CircleOptions() .center(new LatLng(37.222134, -80.425425)) .radius(100) .fillColor(0x99000000) .strokeWidth(5); // In meters Circle circle = mMap.addCircle(circleOptions); CircleOptions circleOptions2 = new CircleOptions() .center(new LatLng(37.225134, -80.425425)) .radius(150) .fillColor(0x99000000) .strokeWidth(5); // In meters Circle circle2 = mMap.addCircle(circleOptions2); mMap.setOnMapClickListener(this); mMap.setOnMarkerClickListener(this); // AndroidSoda.init(this, mHost, 8081, asl_); List<LatLng> l= new ArrayList<LatLng>(); l.add(new LatLng(37.223134, -80.425425)); l.add(new LatLng(37.223134, -80.425625)); l.add(new LatLng(37.224134, -80.425525)); for(int i = 0; i<mReportList.size(); i++){ mMap.addMarker(new MarkerOptions() .position(l.get(i)) .title(mReportList.get(i).getContents())); } createZoneButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { int radius = Integer.valueOf(radiusText.getText().toString()); MonitorZone zone= new MonitorZone(); zone.setRadius_(radius); zone.setLatitude_(selectedLatitude); zone.setLongitude_(selectedLongitude); zone.setOwnerName_(username); Log.i("Soda", "Radius:"+radius+" Username:"+username); zonelist.add(zone); } }); } @Override public void onMapClick(LatLng point) { Log.i("Soda", "LatLon"+point); selectedLatitude = point.latitude; selectedLongitude = point.longitude; int r = Integer.valueOf(radiusText.getText().toString()); CircleOptions circleOptions = new CircleOptions() .center(new LatLng(selectedLatitude, selectedLongitude)) .radius(r) // In meters .fillColor(0x99000000) .strokeWidth(5); Circle circle = mMap.addCircle(circleOptions); } @Override public boolean onMarkerClick(Marker marker) { return true; } private void getReports() { List<Future> list = new ArrayList<Future>(); Future<?> Result = AndroidSoda.async(new Runnable() { @Override @SodaInvokeInUi public void run() { if (as != null) { Log.e("conected", "------------------------------------"); MaintenanceReports reportHandle = as.get( MaintenanceReports.class, MaintenanceReports.SVC_NAME); reportHandle .getReports(new Callback<List<MaintenanceReport>>() { //@SodaInvokeInUi public void handle(List<MaintenanceReport> arg0) { mReportList = arg0; } }); Log.e("obtained", "------------------------------------"); } } }); list.add(Result); for (Future f : list) { try { while (!f.isDone()) { } f.get(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ExecutionException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } @Override public void connected(AndroidSoda s) { this.as = s; getReports(); } }