package pl.edu.agh.android.components; import pl.edu.agh.android.components.LocationLoggingService.ServiceAccess; import pl.edu.agh.jsonrpc.JSONRPCException; import pl.edu.agh.model.TrafficData; import pl.edu.agh.service.TrafficService; import pl.edu.agh.service.TrafficServiceStub; import android.app.Activity; import android.app.AlertDialog; import android.content.ComponentName; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.ServiceConnection; import android.os.Bundle; import android.os.Handler; import android.os.IBinder; import android.os.Message; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.CompoundButton; import android.widget.CompoundButton.OnCheckedChangeListener; import android.widget.TextView; import android.widget.ToggleButton; public class HomeActivity extends Activity { public static final int UPDATE_LOCATION_MSG = 1; public static final int ASK_GPS_ACTIVATE_MSG = 2; private Handler guiHandler = new Handler() { @Override public void handleMessage(Message msg) { int whatMessage = msg.what; switch(whatMessage) { case UPDATE_LOCATION_MSG: Bundle data = msg.getData(); double lon = data.getDouble("lon"); double lat = data.getDouble("lat"); float speed = data.getFloat("speed"); float course = data.getFloat("course"); float accur = data.getFloat("accuracy"); TextView longView = (TextView)findViewById(R.id.long_val); TextView lattView = (TextView)findViewById(R.id.latt_val); TextView speedView = (TextView)findViewById(R.id.speed_val); TextView courseView = (TextView)findViewById(R.id.course_val); TextView accView = (TextView)findViewById(R.id.acc_val); longView.setText(Double.toString(lon)); lattView.setText(Double.toString(lat)); speedView.setText(Float.toString(speed)); courseView.setText(Float.toString(course)); accView.setText(Float.toString(accur)); break; case ASK_GPS_ACTIVATE_MSG: final ToggleButton startStopButton = (ToggleButton)findViewById(R.id.start_stop_button); startStopButton.setChecked(false); createGpsDisabledAlert(); break; } } }; private boolean bound = false; private LocationLoggingService loggingService; private ServiceConnection loggingServiceConnection = new ServiceConnection() { @Override public void onServiceConnected(ComponentName name, IBinder service) { bound = true; loggingService = ((ServiceAccess)service).getService(); loggingService.registerHandler(guiHandler); loggingService.updateCurrentPosition(); final ToggleButton startStopButton = (ToggleButton)findViewById(R.id.start_stop_button); if(loggingService.isLogging()) { startStopButton.setChecked(true); } else { startStopButton.setChecked(false); } } @Override public void onServiceDisconnected(ComponentName name) { bound = false; } }; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); final ToggleButton startStopButton = (ToggleButton)findViewById(R.id.start_stop_button); startStopButton.setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if(bound) { if(isChecked) { startService(new Intent(HomeActivity.this, LocationLoggingService.class)); } else { loggingService.stopLogging(); stopService(new Intent(HomeActivity.this, LocationLoggingService.class)); } } } }); final Button testButton = (Button)findViewById(R.id.testButton); testButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { TrafficService trafficService = new TrafficServiceStub("192.168.1.105:8080", "traffic-server"); try { TrafficData result = trafficService.getTrafficData(0, 0); TextView testTextView = (TextView) findViewById(R.id.testTextView); testTextView.setText(Integer.toString(result.getNumber())); } catch (JSONRPCException e) { e.printStackTrace(); } } }); } @Override public void onStart() { super.onStart(); if(!bound) { this.bindService(new Intent(this, LocationLoggingService.class), loggingServiceConnection, Context.BIND_AUTO_CREATE); } } @Override public void onStop() { super.onStop(); if(bound) { loggingService.unregisterHander(guiHandler); bound = false; this.unbindService(loggingServiceConnection); } } private void createGpsDisabledAlert() { AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setMessage("Your GPS is disabled! Would you like to enable it?") .setCancelable(false) .setPositiveButton("Enable GPS", new DialogInterface.OnClickListener(){ public void onClick(DialogInterface dialog, int id){ Intent gpsOptionsIntent = new Intent( android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS); startActivity(gpsOptionsIntent); } }); builder.setNegativeButton("Do nothing", new DialogInterface.OnClickListener(){ public void onClick(DialogInterface dialog, int id){ dialog.cancel(); } }); AlertDialog alert = builder.create(); alert.show(); } }