}
public void cleanup() {
- while (popMode());
+ while (popMode() != null);
}
public void pushMode(Mode mode) {
Objects.requireNonNull(mode);
if (!modes.isEmpty()) {
- stopMode(modes.peek());
+ pauseMode(modes.peek());
}
modes.push(mode);
startMode(mode);
// TODO: create a composite fading mode of top of stack and new mode
}
- public boolean popMode() {
- if (!modes.isEmpty()) {
+ public Mode popMode() {
+ if (modes.size() > 1) {
Mode mode = modes.pop();
stopMode(mode);
- if (!modes.isEmpty()) {
- startMode(modes.peek());
- }
- return true;
+ resumeMode(modes.peek());
+ return mode;
}
- return false;
+ return null;
// TODO: create a composite fading mode of popped mode and top of stack, unless doing cleanup
}
mode.enter(config);
}
+ private void pauseMode(Mode mode) {
+ mode.pause();
+ }
+
+ private void resumeMode(Mode mode) {
+ mode.resume();
+ }
+
private void stopMode(Mode mode) {
mode.setFrameListener(ledFrame -> {}); // To avoid any frame being sent to the controller while the thread is exiting
mode.exit();