Add removeState method to StateMachine

Method to be used by BluetoothRouteManager in Telecom.

Test: unit tests in Telecom
Change-Id: Icdd1a3d42224246a5f26100fabb26313ce83b14c
This commit is contained in:
Hall Liu
2016-11-21 17:29:02 -08:00
parent 99d6227782
commit b222d2045d

View File

@@ -1189,6 +1189,26 @@ public class StateMachine {
return stateInfo;
}
/**
* Remove a state from the state machine. Will not remove the state if it is currently
* active or if it has any children in the hierarchy.
* @param state the state to remove
*/
private void removeState(State state) {
StateInfo stateInfo = mStateInfo.get(state);
if (stateInfo == null || stateInfo.active) {
return;
}
boolean isParent = mStateInfo.values().stream()
.filter(si -> si.parentStateInfo == stateInfo)
.findAny()
.isPresent();
if (isParent) {
return;
}
mStateInfo.remove(state);
}
/**
* Constructor
*
@@ -1336,6 +1356,14 @@ public class StateMachine {
mSmHandler.addState(state, null);
}
/**
* Removes a state from the state machine, unless it is currently active or if it has children.
* @param state state to remove
*/
public final void removeState(State state) {
mSmHandler.removeState(state);
}
/**
* Set the initial state. This must be invoked before
* and messages are sent to the state machine.