diff options
| author | 2022-12-08 14:10:21 +0000 | |
|---|---|---|
| committer | 2022-12-15 13:17:24 +0000 | |
| commit | 673d3f362ba4f2d76b809cbbea45985579e630ac (patch) | |
| tree | ac5aaaac6cf060aee282fa712aae439cc0dc5bdd | |
| parent | c9f75fda7430e95d721953f63d443aa544c2dde1 (diff) | |
Make StateMachine#handle call handler defined in root state.
Bug: 242545520
Test: atest com.android.server.wm.utils.StateMachineTest
Change-Id: I6f85afa75e30d41dfd8ed90106ce5edd819b02b9
| -rw-r--r-- | services/core/java/com/android/server/wm/utils/StateMachine.java | 11 | ||||
| -rw-r--r-- | services/tests/wmtests/src/com/android/server/wm/utils/StateMachineTest.java | 14 |
2 files changed, 19 insertions, 6 deletions
diff --git a/services/core/java/com/android/server/wm/utils/StateMachine.java b/services/core/java/com/android/server/wm/utils/StateMachine.java index 91a5dc43a69d..350784e64799 100644 --- a/services/core/java/com/android/server/wm/utils/StateMachine.java +++ b/services/core/java/com/android/server/wm/utils/StateMachine.java @@ -177,19 +177,18 @@ public class StateMachine { } /** - * Process an event. Search handler for a given event and {@link Handler#handle(int)}. If the - * handler cannot handle the event, delegate it to a handler for a parent of the given state. + * Process an event. Search handler for a given event and {@link Handler#handle(int, Object)}. + * If the handler cannot handle the event, delegate it to a handler for a parent of the given + * state. * * @param event Type of an event. */ public void handle(int event, @Nullable Object param) { - int state = mState; - while (state != 0) { + for (int state = mState;; state >>= 4) { final Handler h = mStateHandlers.get(state); - if (h != null && h.handle(event, param)) { + if ((h != null && h.handle(event, param)) || state == 0) { return; } - state >>= 4; } } diff --git a/services/tests/wmtests/src/com/android/server/wm/utils/StateMachineTest.java b/services/tests/wmtests/src/com/android/server/wm/utils/StateMachineTest.java index e82a7c222b8f..fb0ce56ddd2c 100644 --- a/services/tests/wmtests/src/com/android/server/wm/utils/StateMachineTest.java +++ b/services/tests/wmtests/src/com/android/server/wm/utils/StateMachineTest.java @@ -215,6 +215,20 @@ public class StateMachineTest { } @Test + public void testStateMachineTriggerStateActionDelegateRoot() { + final StringBuffer log = new StringBuffer(); + + StateMachine stateMachine = new StateMachine(0x2); + stateMachine.addStateHandler(0x0, new LoggingHandler(0x0, log)); + stateMachine.addStateHandler(0x2, + new LoggingHandler(0x2, log, false /* handleSelf */)); + + // state 0x2 delegate the message handling to its parent state + stateMachine.handle(0, null); + assertEquals("h0;", log.toString()); + } + + @Test public void testStateMachineNestedTransition() { final StringBuffer log = new StringBuffer(); |