package btools.routingapp; import java.util.HashSet; import java.util.List; import java.util.Set; import android.app.Activity; import android.app.AlertDialog; import android.app.Dialog; import android.content.DialogInterface; import android.os.Bundle; import android.os.PowerManager; import android.os.PowerManager.WakeLock; import android.speech.tts.TextToSpeech.OnInitListener; import android.widget.EditText; import btools.router.OsmNodeNamed; public class BRouterActivity extends Activity implements OnInitListener { private static final int DIALOG_SELECTPROFILE_ID = 1; private static final int DIALOG_EXCEPTION_ID = 2; private static final int DIALOG_WARNEXPIRY_ID = 3; private static final int DIALOG_TEXTENTRY_ID = 4; private static final int DIALOG_VIASELECT_ID = 5; private static final int DIALOG_NOGOSELECT_ID = 6; private static final int DIALOG_SHOWRESULT_ID = 7; private static final int DIALOG_ROUTINGMODES_ID = 8; private static final int DIALOG_MODECONFIGOVERVIEW_ID = 9; private static final int DIALOG_PICKWAYPOINT_ID = 10; private BRouterView mBRouterView; private PowerManager mPowerManager; private WakeLock mWakeLock; /** Called when the activity is first created. */ @Override @SuppressWarnings("deprecation") public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Get an instance of the PowerManager mPowerManager = (PowerManager) getSystemService(POWER_SERVICE); // Create a bright wake lock mWakeLock = mPowerManager.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK, getClass() .getName()); // instantiate our simulation view and set it as the activity's content mBRouterView = new BRouterView(this); setContentView(mBRouterView); } @Override @SuppressWarnings("deprecation") protected Dialog onCreateDialog(int id) { AlertDialog.Builder builder; switch(id) { case DIALOG_SELECTPROFILE_ID: builder = new AlertDialog.Builder(this); builder.setTitle("Select a routing profile"); builder.setItems(availableProfiles, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int item) { selectedProfile = availableProfiles[item]; mBRouterView.startProcessing(selectedProfile); } }); return builder.create(); case DIALOG_ROUTINGMODES_ID: builder = new AlertDialog.Builder(this); builder.setTitle( message ); builder.setMultiChoiceItems(routingModes, routingModesChecked, new DialogInterface.OnMultiChoiceClickListener() { @Override public void onClick(DialogInterface dialog, int which, boolean isChecked) { routingModesChecked[which] = isChecked; } }); builder.setPositiveButton("Ok", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { mBRouterView.configureService(routingModes,routingModesChecked); } }); return builder.create(); case DIALOG_EXCEPTION_ID: builder = new AlertDialog.Builder(this); builder.setTitle( "An Error occured" ) .setMessage( errorMessage ) .setPositiveButton( "OK", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { mBRouterView.continueProcessing(); } }); return builder.create(); case DIALOG_WARNEXPIRY_ID: builder = new AlertDialog.Builder(this); builder.setMessage( errorMessage ) .setPositiveButton( "OK", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { mBRouterView.startProcessing(selectedProfile); } }); return builder.create(); case DIALOG_TEXTENTRY_ID: builder = new AlertDialog.Builder(this); builder.setTitle("Enter SDCARD base dir:"); builder.setMessage(message); final EditText input = new EditText(this); input.setText( defaultbasedir ); builder.setView(input); builder.setPositiveButton("Ok", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { String basedir = input.getText().toString(); mBRouterView.startSetup(basedir, true ); } }); return builder.create(); case DIALOG_VIASELECT_ID: builder = new AlertDialog.Builder(this); builder.setTitle("Check VIA Selection:"); builder.setMultiChoiceItems(availableVias, getCheckedBooleanArray( availableVias.length ), new DialogInterface.OnMultiChoiceClickListener() { @Override public void onClick(DialogInterface dialog, int which, boolean isChecked) { if (isChecked) { selectedVias.add(availableVias[which]); } else { selectedVias.remove(availableVias[which]); } } }); builder.setPositiveButton("Ok", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { mBRouterView.updateViaList( selectedVias ); mBRouterView.startProcessing(selectedProfile); } }); return builder.create(); case DIALOG_NOGOSELECT_ID: builder = new AlertDialog.Builder(this); builder.setTitle("Check NoGo Selection:"); String[] nogoNames = new String[nogoList.size()]; for( int i=0; i 0 ? "Select to/via" : "Select from" ); builder.setItems(availableWaypoints, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int item) { mBRouterView.updateWaypointList( availableWaypoints[item] ); mBRouterView.startProcessing(selectedProfile); } }); return builder.create(); default: return null; } } private boolean[] getCheckedBooleanArray( int size ) { boolean[] checked = new boolean[size]; for( int i=0; i selectedVias; private List nogoList; @SuppressWarnings("deprecation") public void selectProfile( String[] items ) { availableProfiles = items; showDialog( DIALOG_SELECTPROFILE_ID ); } @SuppressWarnings("deprecation") public void selectRoutingModes( String[] modes, boolean[] modesChecked, String message ) { routingModes = modes; routingModesChecked = modesChecked; this.message = message; showDialog( DIALOG_ROUTINGMODES_ID ); } @SuppressWarnings("deprecation") public void showModeConfigOverview( String message ) { this.message = message; showDialog( DIALOG_MODECONFIGOVERVIEW_ID ); } @SuppressWarnings("deprecation") public void selectBasedir( String defaultBasedir, String message ) { this.defaultbasedir = defaultBasedir; this.message = message; showDialog( DIALOG_TEXTENTRY_ID ); } @SuppressWarnings("deprecation") public void selectVias( String[] items ) { availableVias = items; selectedVias = new HashSet(availableVias.length); for( String via : items ) selectedVias.add( via ); showDialog( DIALOG_VIASELECT_ID ); } @SuppressWarnings("deprecation") public void selectWaypoint( String[] items ) { availableWaypoints = items; showNewDialog( DIALOG_PICKWAYPOINT_ID ); } @SuppressWarnings("deprecation") public void selectNogos( List nogoList ) { this.nogoList = nogoList; showDialog( DIALOG_NOGOSELECT_ID ); } private Set dialogIds = new HashSet(); private void showNewDialog( int id ) { if ( dialogIds.contains( Integer.valueOf( id ) ) ) { removeDialog( id ); } dialogIds.add( Integer.valueOf( id ) ); showDialog( id ); } private String errorMessage; private String title; private int wpCount; @SuppressWarnings("deprecation") public void showErrorMessage( String msg ) { errorMessage = msg; showNewDialog( DIALOG_EXCEPTION_ID ); } @SuppressWarnings("deprecation") public void showResultMessage( String title, String msg, int wpCount ) { errorMessage = msg; this.title = title; this.wpCount = wpCount; showNewDialog( DIALOG_SHOWRESULT_ID ); } @Override protected void onResume() { super.onResume(); /* * when the activity is resumed, we acquire a wake-lock so that the * screen stays on, since the user will likely not be fiddling with the * screen or buttons. */ mWakeLock.acquire(); // Start the simulation mBRouterView.startSimulation(); } @Override protected void onPause() { super.onPause(); /* * When the activity is paused, we make sure to stop the simulation, * release our sensor resources and wake locks */ // Stop the simulation mBRouterView.stopSimulation(); // and release our wake-lock mWakeLock.release(); } @Override public void onInit(int i) { } }