Push and pop modes
[kaka/cakelight.git] / src / kaka / cakelight / CakeLight.java
index 0c1aa1a..cd59362 100644 (file)
@@ -28,29 +28,29 @@ public class CakeLight {
     }
 
     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() {
+    public Mode popMode() {
         if (!modes.isEmpty()) {
             Mode mode = modes.pop();
             stopMode(mode);
             if (!modes.isEmpty()) {
-                startMode(modes.peek());
+                resumeMode(modes.peek());
             }
-            return true;
+            return mode;
         }
-        return false;
+        return null;
         // TODO: create a composite fading mode of popped mode and top of stack, unless doing cleanup
     }
 
@@ -59,6 +59,14 @@ public class CakeLight {
         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();