Loading packages/SystemUI/src/com/android/systemui/InitController.java +10 −0 Original line number Diff line number Diff line Loading @@ -22,6 +22,11 @@ import java.util.ArrayList; */ public class InitController { /** * If a task is added after all tasks are executed, then we've done something terribly wrong */ private boolean mTasksExecuted = false; private final ArrayList<Runnable> mTasks = new ArrayList<>(); /** Loading @@ -29,6 +34,9 @@ public class InitController { * @param runnable the task to be executed */ public void addPostInitTask(Runnable runnable) { if (mTasksExecuted) { throw new IllegalStateException("post init tasks have already been executed!"); } mTasks.add(runnable); } Loading @@ -39,5 +47,7 @@ public class InitController { while (!mTasks.isEmpty()) { mTasks.remove(0).run(); } mTasksExecuted = true; } } packages/SystemUI/tests/src/com/android/systemui/InitControllerTest.java 0 → 100644 +71 −0 Original line number Diff line number Diff line /* * Copyright (C) 2018 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.systemui; import static junit.framework.TestCase.assertFalse; import static junit.framework.TestCase.assertTrue; import android.support.test.filters.SmallTest; import android.testing.AndroidTestingRunner; import android.testing.TestableLooper; import org.junit.Test; import org.junit.runner.RunWith; @SmallTest @RunWith(AndroidTestingRunner.class) @TestableLooper.RunWithLooper public class InitControllerTest extends SysuiTestCase { private InitController mInitController = new InitController(); @Test public void testInitControllerExecutesTasks() { boolean[] runs = {false, false, false}; mInitController.addPostInitTask(() -> { runs[0] = true; }); mInitController.addPostInitTask(() -> { runs[1] = true; }); mInitController.addPostInitTask(() -> { runs[2] = true; }); assertFalse(runs[0] || runs[1] || runs[2]); mInitController.executePostInitTasks(); assertTrue(runs[0] && runs[1] && runs[2]); } @Test(expected = IllegalStateException.class) public void testInitControllerThrowsWhenTasksAreAddedAfterExecution() { boolean[] runs = {false, false, false}; mInitController.addPostInitTask(() -> { runs[0] = true; }); mInitController.addPostInitTask(() -> { runs[1] = true; }); mInitController.executePostInitTasks(); // Throws mInitController.addPostInitTask(() -> { runs[2] = true; }); } } Loading
packages/SystemUI/src/com/android/systemui/InitController.java +10 −0 Original line number Diff line number Diff line Loading @@ -22,6 +22,11 @@ import java.util.ArrayList; */ public class InitController { /** * If a task is added after all tasks are executed, then we've done something terribly wrong */ private boolean mTasksExecuted = false; private final ArrayList<Runnable> mTasks = new ArrayList<>(); /** Loading @@ -29,6 +34,9 @@ public class InitController { * @param runnable the task to be executed */ public void addPostInitTask(Runnable runnable) { if (mTasksExecuted) { throw new IllegalStateException("post init tasks have already been executed!"); } mTasks.add(runnable); } Loading @@ -39,5 +47,7 @@ public class InitController { while (!mTasks.isEmpty()) { mTasks.remove(0).run(); } mTasksExecuted = true; } }
packages/SystemUI/tests/src/com/android/systemui/InitControllerTest.java 0 → 100644 +71 −0 Original line number Diff line number Diff line /* * Copyright (C) 2018 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.systemui; import static junit.framework.TestCase.assertFalse; import static junit.framework.TestCase.assertTrue; import android.support.test.filters.SmallTest; import android.testing.AndroidTestingRunner; import android.testing.TestableLooper; import org.junit.Test; import org.junit.runner.RunWith; @SmallTest @RunWith(AndroidTestingRunner.class) @TestableLooper.RunWithLooper public class InitControllerTest extends SysuiTestCase { private InitController mInitController = new InitController(); @Test public void testInitControllerExecutesTasks() { boolean[] runs = {false, false, false}; mInitController.addPostInitTask(() -> { runs[0] = true; }); mInitController.addPostInitTask(() -> { runs[1] = true; }); mInitController.addPostInitTask(() -> { runs[2] = true; }); assertFalse(runs[0] || runs[1] || runs[2]); mInitController.executePostInitTasks(); assertTrue(runs[0] && runs[1] && runs[2]); } @Test(expected = IllegalStateException.class) public void testInitControllerThrowsWhenTasksAreAddedAfterExecution() { boolean[] runs = {false, false, false}; mInitController.addPostInitTask(() -> { runs[0] = true; }); mInitController.addPostInitTask(() -> { runs[1] = true; }); mInitController.executePostInitTasks(); // Throws mInitController.addPostInitTask(() -> { runs[2] = true; }); } }