package org.mitre.svmp.common; import android.util.Log; import java.util.ArrayList; import java.util.List; /** * @author Joe Portner */ public class StateMachine { private static final String TAG = StateMachine.class.getName(); // state changes in sequential order, except ERROR public static enum STATE { NEW, // before the service has been started STARTED, // after the service has been started AUTH, // after we have authenticated CONNECTED, // after the WebSocket has been connected RUNNING, // after the VM is ready and we've started proxying ERROR // any other state can change to an error state } private STATE state = STATE.NEW; private List<StateObserver> observers = new ArrayList<StateObserver>(); public STATE getState() { return state; } // sets the new state // resID is the message to display (0 for no message) public void setState(STATE newState, int resID) { STATE oldState = state; state = newState; Log.d(TAG, String.format("State change: %s -> %s", oldState, newState)); // inform observers of state change for (StateObserver observer : observers) { observer.onStateChange(oldState, newState, resID); } } public void addObserver(StateObserver observer) { if (observer != null) { observers.add(observer); } } public void removeObserver(StateObserver observer) { if (observer != null) { observers.remove(observer); } } }