133873d2b41a5cd2597b20a4e88eb8942944c0f23Tyler Schultzpackage com.xtremelabs.robolectric.shadows; 2f8d3ea0e4553f6f391543eccb99485f9603c5804Christian Williams & Jay Phillips 3f8d3ea0e4553f6f391543eccb99485f9603c5804Christian Williams & Jay Phillipsimport android.os.Handler; 4f8d3ea0e4553f6f391543eccb99485f9603c5804Christian Williams & Jay Phillipsimport android.os.Looper; 5f8d3ea0e4553f6f391543eccb99485f9603c5804Christian Williams & Jay Phillipsimport android.os.Message; 6962dfc938fd6829f96079d4749f050da9118b8cbJan Berkel 7962dfc938fd6829f96079d4749f050da9118b8cbJan Berkelimport com.xtremelabs.robolectric.Robolectric; 822c22c9aa4ca68c2deac6164edc1d82bc9645310Christian Williams & Phil Goodwinimport com.xtremelabs.robolectric.internal.Implementation; 922c22c9aa4ca68c2deac6164edc1d82bc9645310Christian Williams & Phil Goodwinimport com.xtremelabs.robolectric.internal.Implements; 1022c22c9aa4ca68c2deac6164edc1d82bc9645310Christian Williams & Phil Goodwinimport com.xtremelabs.robolectric.internal.RealObject; 11f8d3ea0e4553f6f391543eccb99485f9603c5804Christian Williams & Jay Phillips 1206aa4a5c70de83a58c935212bfd42056a14a8003Phil Plante & Ryan Richardimport java.util.ArrayList; 1306aa4a5c70de83a58c935212bfd42056a14a8003Phil Plante & Ryan Richardimport java.util.Iterator; 1406aa4a5c70de83a58c935212bfd42056a14a8003Phil Plante & Ryan Richardimport java.util.List; 1506aa4a5c70de83a58c935212bfd42056a14a8003Phil Plante & Ryan Richard 16a8486da7c7a0b6a10e943c55992f34d9c256456dChristian Williamsimport static com.xtremelabs.robolectric.Robolectric.shadowOf; 17a8486da7c7a0b6a10e943c55992f34d9c256456dChristian Williams 18daf25ec537e02fbf526434474a591f14c48218f5Phil Goodwin/** 19daf25ec537e02fbf526434474a591f14c48218f5Phil Goodwin * Shadow for Handler that puts posted {@link Runnable}s into a queue instead of sending them to be handled on a 20daf25ec537e02fbf526434474a591f14c48218f5Phil Goodwin * separate thread.{@link Runnable}s that are scheduled to be executed immediately can be triggered by calling 21f7c3a47b5eb49f49f450eb18822d51dc496fceefPhil Goodwin & Tyler Schultz * {@link #idleMainLooper()}. 22daf25ec537e02fbf526434474a591f14c48218f5Phil Goodwin * todo: add utility method to advance time and trigger execution of Runnables scheduled for a time in the future 23daf25ec537e02fbf526434474a591f14c48218f5Phil Goodwin */ 24f8d3ea0e4553f6f391543eccb99485f9603c5804Christian Williams & Jay Phillips@SuppressWarnings({"UnusedDeclaration"}) 250b378afcde0200166e546c46a7642015accfce49Christian Williams & Ian Fisher@Implements(Handler.class) 26afe0a89d904a7fe2f5980b9deb26cc3240192459Christian Williamspublic class ShadowHandler { 27e2c2daa717063899e30b0cafd4d81e60a36d6b0fpivotal-jiwire @RealObject 28e2c2daa717063899e30b0cafd4d81e60a36d6b0fpivotal-jiwire private Handler realHandler; 2985af7906879a68c99b1878dac22605fa32454f3fRich Humphrey private Looper looper = Looper.myLooper(); 3006aa4a5c70de83a58c935212bfd42056a14a8003Phil Plante & Ryan Richard private List<Message> messages = new ArrayList<Message>(); 31816362580ec2c74e4bf15f8f3d1081084dac0a61Dave private Handler.Callback callback; 32f8d3ea0e4553f6f391543eccb99485f9603c5804Christian Williams & Jay Phillips 33f8d3ea0e4553f6f391543eccb99485f9603c5804Christian Williams & Jay Phillips public void __constructor__() { 34f8d3ea0e4553f6f391543eccb99485f9603c5804Christian Williams & Jay Phillips this.looper = Looper.myLooper(); 35f8d3ea0e4553f6f391543eccb99485f9603c5804Christian Williams & Jay Phillips } 36f8d3ea0e4553f6f391543eccb99485f9603c5804Christian Williams & Jay Phillips 37f8d3ea0e4553f6f391543eccb99485f9603c5804Christian Williams & Jay Phillips public void __constructor__(Looper looper) { 38f8d3ea0e4553f6f391543eccb99485f9603c5804Christian Williams & Jay Phillips this.looper = looper; 39f8d3ea0e4553f6f391543eccb99485f9603c5804Christian Williams & Jay Phillips } 40f8d3ea0e4553f6f391543eccb99485f9603c5804Christian Williams & Jay Phillips 41816362580ec2c74e4bf15f8f3d1081084dac0a61Dave public void __constructor__(Handler.Callback callback) { 42816362580ec2c74e4bf15f8f3d1081084dac0a61Dave this.callback = callback; 43816362580ec2c74e4bf15f8f3d1081084dac0a61Dave } 44816362580ec2c74e4bf15f8f3d1081084dac0a61Dave 45de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams @Implementation 46de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams public boolean post(Runnable r) { 47534fd31dba68daad0ad9d98c3c480139a3efa5a1Christian Williams & Tyler Schultz return postDelayed(r, 0); 48534fd31dba68daad0ad9d98c3c480139a3efa5a1Christian Williams & Tyler Schultz } 49534fd31dba68daad0ad9d98c3c480139a3efa5a1Christian Williams & Tyler Schultz 50de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams @Implementation 51de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams public boolean postDelayed(Runnable r, long delayMillis) { 5208a827faaa0becaf1956c577ef4b395c93501a9fJan Berkel return shadowOf(looper).post(r, delayMillis); 53f8d3ea0e4553f6f391543eccb99485f9603c5804Christian Williams & Jay Phillips } 54f8d3ea0e4553f6f391543eccb99485f9603c5804Christian Williams & Jay Phillips 55de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams @Implementation 56478a40ed43134ef1568a19ab5233a5736a21c57bGlenn Jahnke & Lenny Turetsky public final boolean postAtFrontOfQueue(Runnable runnable) { 5708a827faaa0becaf1956c577ef4b395c93501a9fJan Berkel return shadowOf(looper).postAtFrontOfQueue(runnable); 58478a40ed43134ef1568a19ab5233a5736a21c57bGlenn Jahnke & Lenny Turetsky } 59478a40ed43134ef1568a19ab5233a5736a21c57bGlenn Jahnke & Lenny Turetsky 60478a40ed43134ef1568a19ab5233a5736a21c57bGlenn Jahnke & Lenny Turetsky @Implementation 61d642b5dd37e4e1c143e610e835ef72ef495a3272Jan Berkel public Message obtainMessage() { 62d642b5dd37e4e1c143e610e835ef72ef495a3272Jan Berkel return obtainMessage(0); 63d642b5dd37e4e1c143e610e835ef72ef495a3272Jan Berkel } 64d642b5dd37e4e1c143e610e835ef72ef495a3272Jan Berkel 65d642b5dd37e4e1c143e610e835ef72ef495a3272Jan Berkel @Implementation 66d642b5dd37e4e1c143e610e835ef72ef495a3272Jan Berkel public Message obtainMessage(int what) { 67d642b5dd37e4e1c143e610e835ef72ef495a3272Jan Berkel return obtainMessage(what, null); 68d642b5dd37e4e1c143e610e835ef72ef495a3272Jan Berkel } 69d642b5dd37e4e1c143e610e835ef72ef495a3272Jan Berkel 70d642b5dd37e4e1c143e610e835ef72ef495a3272Jan Berkel @Implementation 71de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams public Message obtainMessage(int what, Object obj) { 72d642b5dd37e4e1c143e610e835ef72ef495a3272Jan Berkel return obtainMessage(what, 0, 0, obj); 73d642b5dd37e4e1c143e610e835ef72ef495a3272Jan Berkel } 74d642b5dd37e4e1c143e610e835ef72ef495a3272Jan Berkel 75d642b5dd37e4e1c143e610e835ef72ef495a3272Jan Berkel @Implementation 76d642b5dd37e4e1c143e610e835ef72ef495a3272Jan Berkel public Message obtainMessage(int what, int arg1, int arg2) { 77d642b5dd37e4e1c143e610e835ef72ef495a3272Jan Berkel return obtainMessage(what, arg1, arg2, null); 78d642b5dd37e4e1c143e610e835ef72ef495a3272Jan Berkel } 79d642b5dd37e4e1c143e610e835ef72ef495a3272Jan Berkel 80d642b5dd37e4e1c143e610e835ef72ef495a3272Jan Berkel @Implementation 81d642b5dd37e4e1c143e610e835ef72ef495a3272Jan Berkel public Message obtainMessage(int what, int arg1, int arg2, Object obj) { 82f8d3ea0e4553f6f391543eccb99485f9603c5804Christian Williams & Jay Phillips Message message = new Message(); 83f8d3ea0e4553f6f391543eccb99485f9603c5804Christian Williams & Jay Phillips message.what = what; 84d642b5dd37e4e1c143e610e835ef72ef495a3272Jan Berkel message.arg1 = arg1; 85d642b5dd37e4e1c143e610e835ef72ef495a3272Jan Berkel message.arg2 = arg2; 86f8d3ea0e4553f6f391543eccb99485f9603c5804Christian Williams & Jay Phillips message.obj = obj; 8740674c5041023f9b5cb5570b8c5b81b5968ec585Jon Boekenoogen message.setTarget(realHandler); 88f8d3ea0e4553f6f391543eccb99485f9603c5804Christian Williams & Jay Phillips return message; 89f8d3ea0e4553f6f391543eccb99485f9603c5804Christian Williams & Jay Phillips } 90f8d3ea0e4553f6f391543eccb99485f9603c5804Christian Williams & Jay Phillips 91de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams @Implementation 92f8d3ea0e4553f6f391543eccb99485f9603c5804Christian Williams & Jay Phillips public final boolean sendMessage(final Message msg) { 9306aa4a5c70de83a58c935212bfd42056a14a8003Phil Plante & Ryan Richard return sendMessageDelayed(msg, 0L); 9406aa4a5c70de83a58c935212bfd42056a14a8003Phil Plante & Ryan Richard } 9506aa4a5c70de83a58c935212bfd42056a14a8003Phil Plante & Ryan Richard 9606aa4a5c70de83a58c935212bfd42056a14a8003Phil Plante & Ryan Richard @Implementation 9706aa4a5c70de83a58c935212bfd42056a14a8003Phil Plante & Ryan Richard public final boolean sendMessageDelayed(final Message msg, long delayMillis) { 98962dfc938fd6829f96079d4749f050da9118b8cbJan Berkel Robolectric.shadowOf(msg).setWhen(Robolectric.shadowOf(looper).getScheduler().getCurrentTime()+delayMillis); 9906aa4a5c70de83a58c935212bfd42056a14a8003Phil Plante & Ryan Richard messages.add(msg); 10006aa4a5c70de83a58c935212bfd42056a14a8003Phil Plante & Ryan Richard postDelayed(new Runnable() { 101f8d3ea0e4553f6f391543eccb99485f9603c5804Christian Williams & Jay Phillips @Override 102f8d3ea0e4553f6f391543eccb99485f9603c5804Christian Williams & Jay Phillips public void run() { 10306aa4a5c70de83a58c935212bfd42056a14a8003Phil Plante & Ryan Richard if (messages.contains(msg)) { 10406aa4a5c70de83a58c935212bfd42056a14a8003Phil Plante & Ryan Richard messages.remove(msg); 105130c9efc4c26359166f0c0dc5856dab5fa269a43Jan Berkel routeMessage(msg); 10606aa4a5c70de83a58c935212bfd42056a14a8003Phil Plante & Ryan Richard } 107f8d3ea0e4553f6f391543eccb99485f9603c5804Christian Williams & Jay Phillips } 10806aa4a5c70de83a58c935212bfd42056a14a8003Phil Plante & Ryan Richard }, delayMillis); 109f8d3ea0e4553f6f391543eccb99485f9603c5804Christian Williams & Jay Phillips return true; 110f8d3ea0e4553f6f391543eccb99485f9603c5804Christian Williams & Jay Phillips } 111adfaceabbda4c8c51f24a0def8926075bd7306adChristian Williams 112816362580ec2c74e4bf15f8f3d1081084dac0a61Dave private void routeMessage(Message msg) { 113816362580ec2c74e4bf15f8f3d1081084dac0a61Dave if(callback != null) { 114816362580ec2c74e4bf15f8f3d1081084dac0a61Dave callback.handleMessage(msg); 115816362580ec2c74e4bf15f8f3d1081084dac0a61Dave } else { 116816362580ec2c74e4bf15f8f3d1081084dac0a61Dave realHandler.handleMessage(msg); 117816362580ec2c74e4bf15f8f3d1081084dac0a61Dave } 118816362580ec2c74e4bf15f8f3d1081084dac0a61Dave } 119816362580ec2c74e4bf15f8f3d1081084dac0a61Dave 1203ad2087acd6ab4f89ec687a5cd3227b208940efeMichael Portuesi @Implementation 1213ad2087acd6ab4f89ec687a5cd3227b208940efeMichael Portuesi public final boolean sendEmptyMessage(int what) { 12206aa4a5c70de83a58c935212bfd42056a14a8003Phil Plante & Ryan Richard return sendEmptyMessageDelayed(what, 0L); 12306aa4a5c70de83a58c935212bfd42056a14a8003Phil Plante & Ryan Richard } 12406aa4a5c70de83a58c935212bfd42056a14a8003Phil Plante & Ryan Richard 12506aa4a5c70de83a58c935212bfd42056a14a8003Phil Plante & Ryan Richard @Implementation 12606aa4a5c70de83a58c935212bfd42056a14a8003Phil Plante & Ryan Richard public final boolean sendEmptyMessageDelayed(int what, long delayMillis) { 127adfaceabbda4c8c51f24a0def8926075bd7306adChristian Williams final Message msg = new Message(); 128adfaceabbda4c8c51f24a0def8926075bd7306adChristian Williams msg.what = what; 12906aa4a5c70de83a58c935212bfd42056a14a8003Phil Plante & Ryan Richard return sendMessageDelayed(msg, delayMillis); 1303ad2087acd6ab4f89ec687a5cd3227b208940efeMichael Portuesi } 131d642b5dd37e4e1c143e610e835ef72ef495a3272Jan Berkel 132ca1e47d3ad6767a0013c0457fe0b5de9f8c2c449Michael Portuesi @Implementation 133962dfc938fd6829f96079d4749f050da9118b8cbJan Berkel public final boolean sendMessageAtFrontOfQueue(final Message msg) { 134962dfc938fd6829f96079d4749f050da9118b8cbJan Berkel Robolectric.shadowOf(msg).setWhen(Robolectric.shadowOf(looper).getScheduler().getCurrentTime()); 135962dfc938fd6829f96079d4749f050da9118b8cbJan Berkel messages.add(0, msg); 136962dfc938fd6829f96079d4749f050da9118b8cbJan Berkel postAtFrontOfQueue(new Runnable() { 137962dfc938fd6829f96079d4749f050da9118b8cbJan Berkel @Override 138962dfc938fd6829f96079d4749f050da9118b8cbJan Berkel public void run() { 139962dfc938fd6829f96079d4749f050da9118b8cbJan Berkel if (messages.contains(msg)) { 140962dfc938fd6829f96079d4749f050da9118b8cbJan Berkel messages.remove(msg); 141130c9efc4c26359166f0c0dc5856dab5fa269a43Jan Berkel routeMessage(msg); 142962dfc938fd6829f96079d4749f050da9118b8cbJan Berkel } 143962dfc938fd6829f96079d4749f050da9118b8cbJan Berkel } 144962dfc938fd6829f96079d4749f050da9118b8cbJan Berkel }); 145962dfc938fd6829f96079d4749f050da9118b8cbJan Berkel return true; 146bcc9e9a8e0c59d3b18a75af01213499ab16d849aJon Boekenoogen } 147bcc9e9a8e0c59d3b18a75af01213499ab16d849aJon Boekenoogen 148bcc9e9a8e0c59d3b18a75af01213499ab16d849aJon Boekenoogen @Implementation 149ca1e47d3ad6767a0013c0457fe0b5de9f8c2c449Michael Portuesi public final Looper getLooper() { 15040674c5041023f9b5cb5570b8c5b81b5968ec585Jon Boekenoogen return looper; 151ca1e47d3ad6767a0013c0457fe0b5de9f8c2c449Michael Portuesi } 1529c19f7ef7122cfa9e03ed4314da4ad2a115c7e71Christian Williams & Ryan Richard 153e2c2daa717063899e30b0cafd4d81e60a36d6b0fpivotal-jiwire @Implementation 154e2c2daa717063899e30b0cafd4d81e60a36d6b0fpivotal-jiwire public final void removeCallbacks(java.lang.Runnable r) { 155e2c2daa717063899e30b0cafd4d81e60a36d6b0fpivotal-jiwire shadowOf(looper).getScheduler().remove(r); 156e2c2daa717063899e30b0cafd4d81e60a36d6b0fpivotal-jiwire } 157e2c2daa717063899e30b0cafd4d81e60a36d6b0fpivotal-jiwire 15806aa4a5c70de83a58c935212bfd42056a14a8003Phil Plante & Ryan Richard @Implementation 15906aa4a5c70de83a58c935212bfd42056a14a8003Phil Plante & Ryan Richard public final boolean hasMessages(int what) { 16006aa4a5c70de83a58c935212bfd42056a14a8003Phil Plante & Ryan Richard for (Message message : messages) { 16106aa4a5c70de83a58c935212bfd42056a14a8003Phil Plante & Ryan Richard if (message.what == what) { 16206aa4a5c70de83a58c935212bfd42056a14a8003Phil Plante & Ryan Richard return true; 16306aa4a5c70de83a58c935212bfd42056a14a8003Phil Plante & Ryan Richard } 16406aa4a5c70de83a58c935212bfd42056a14a8003Phil Plante & Ryan Richard } 16506aa4a5c70de83a58c935212bfd42056a14a8003Phil Plante & Ryan Richard return false; 16606aa4a5c70de83a58c935212bfd42056a14a8003Phil Plante & Ryan Richard } 16706aa4a5c70de83a58c935212bfd42056a14a8003Phil Plante & Ryan Richard 16804e66088f357467378221115b4981cb8cf3f8764Dave @Implementation 16904e66088f357467378221115b4981cb8cf3f8764Dave public final boolean hasMessages(int what, Object object) { 17004e66088f357467378221115b4981cb8cf3f8764Dave for (Message message : messages) { 17104e66088f357467378221115b4981cb8cf3f8764Dave if(message.what == what && message.obj == object) { 17204e66088f357467378221115b4981cb8cf3f8764Dave return true; 17304e66088f357467378221115b4981cb8cf3f8764Dave } 17404e66088f357467378221115b4981cb8cf3f8764Dave } 17504e66088f357467378221115b4981cb8cf3f8764Dave return false; 17604e66088f357467378221115b4981cb8cf3f8764Dave } 17704e66088f357467378221115b4981cb8cf3f8764Dave 17806aa4a5c70de83a58c935212bfd42056a14a8003Phil Plante & Ryan Richard 17906aa4a5c70de83a58c935212bfd42056a14a8003Phil Plante & Ryan Richard @Implementation 18006aa4a5c70de83a58c935212bfd42056a14a8003Phil Plante & Ryan Richard public final void removeMessages(int what) { 1813fbb2f6e44960007166cb8824218f3dc2bb7893aJan Berkel removeMessages(what, null); 1823fbb2f6e44960007166cb8824218f3dc2bb7893aJan Berkel } 1833fbb2f6e44960007166cb8824218f3dc2bb7893aJan Berkel 1843fbb2f6e44960007166cb8824218f3dc2bb7893aJan Berkel @Implementation 1853fbb2f6e44960007166cb8824218f3dc2bb7893aJan Berkel public final void removeMessages(int what, Object object) { 18606aa4a5c70de83a58c935212bfd42056a14a8003Phil Plante & Ryan Richard for (Iterator<Message> iterator = messages.iterator(); iterator.hasNext(); ) { 18706aa4a5c70de83a58c935212bfd42056a14a8003Phil Plante & Ryan Richard Message message = iterator.next(); 1883fbb2f6e44960007166cb8824218f3dc2bb7893aJan Berkel if (message.what == what && (object == null || object.equals(message.obj))) { 18906aa4a5c70de83a58c935212bfd42056a14a8003Phil Plante & Ryan Richard iterator.remove(); 19006aa4a5c70de83a58c935212bfd42056a14a8003Phil Plante & Ryan Richard } 19106aa4a5c70de83a58c935212bfd42056a14a8003Phil Plante & Ryan Richard } 19206aa4a5c70de83a58c935212bfd42056a14a8003Phil Plante & Ryan Richard } 19306aa4a5c70de83a58c935212bfd42056a14a8003Phil Plante & Ryan Richard 1943fbb2f6e44960007166cb8824218f3dc2bb7893aJan Berkel 1953fbb2f6e44960007166cb8824218f3dc2bb7893aJan Berkel 196daf25ec537e02fbf526434474a591f14c48218f5Phil Goodwin /** 197cd21db2bb21da8047bf5485bb356de3ff5a5b494Christian Williams * @deprecated use {@link #idleMainLooper()} instead 198daf25ec537e02fbf526434474a591f14c48218f5Phil Goodwin */ 199563821eb6f69ee8158b44465d227b0ce35ad2ed4Christian Williams & Ian Fisher public static void flush() { 200f7c3a47b5eb49f49f450eb18822d51dc496fceefPhil Goodwin & Tyler Schultz idleMainLooper(); 201f7c3a47b5eb49f49f450eb18822d51dc496fceefPhil Goodwin & Tyler Schultz } 20240c6251719cccc0a84ae99c976d2836b14374ce6Christian Williams 203f7c3a47b5eb49f49f450eb18822d51dc496fceefPhil Goodwin & Tyler Schultz /** 20440c6251719cccc0a84ae99c976d2836b14374ce6Christian Williams * @see com.xtremelabs.robolectric.shadows.ShadowLooper#idle() 205f7c3a47b5eb49f49f450eb18822d51dc496fceefPhil Goodwin & Tyler Schultz */ 206f7c3a47b5eb49f49f450eb18822d51dc496fceefPhil Goodwin & Tyler Schultz public static void idleMainLooper() { 207433b46be67768332f764eab6879e0649993d79e3Christian Williams shadowOf(Looper.myLooper()).idle(); 208534fd31dba68daad0ad9d98c3c480139a3efa5a1Christian Williams & Tyler Schultz } 209f7c3a47b5eb49f49f450eb18822d51dc496fceefPhil Goodwin & Tyler Schultz 210f7c3a47b5eb49f49f450eb18822d51dc496fceefPhil Goodwin & Tyler Schultz /** 211f7c3a47b5eb49f49f450eb18822d51dc496fceefPhil Goodwin & Tyler Schultz * @see ShadowLooper#runToEndOfTasks() () 212f7c3a47b5eb49f49f450eb18822d51dc496fceefPhil Goodwin & Tyler Schultz */ 213f7c3a47b5eb49f49f450eb18822d51dc496fceefPhil Goodwin & Tyler Schultz public static void runMainLooperToEndOfTasks() { 214f7c3a47b5eb49f49f450eb18822d51dc496fceefPhil Goodwin & Tyler Schultz shadowOf(Looper.myLooper()).runToEndOfTasks(); 215f7c3a47b5eb49f49f450eb18822d51dc496fceefPhil Goodwin & Tyler Schultz } 216f7c3a47b5eb49f49f450eb18822d51dc496fceefPhil Goodwin & Tyler Schultz 217f7c3a47b5eb49f49f450eb18822d51dc496fceefPhil Goodwin & Tyler Schultz 218f7c3a47b5eb49f49f450eb18822d51dc496fceefPhil Goodwin & Tyler Schultz /** 219f7c3a47b5eb49f49f450eb18822d51dc496fceefPhil Goodwin & Tyler Schultz * @see ShadowLooper#runOneTask() () 220f7c3a47b5eb49f49f450eb18822d51dc496fceefPhil Goodwin & Tyler Schultz */ 221f7c3a47b5eb49f49f450eb18822d51dc496fceefPhil Goodwin & Tyler Schultz public static void runMainLooperOneTask() { 222f7c3a47b5eb49f49f450eb18822d51dc496fceefPhil Goodwin & Tyler Schultz shadowOf(Looper.myLooper()).runOneTask(); 223f7c3a47b5eb49f49f450eb18822d51dc496fceefPhil Goodwin & Tyler Schultz } 224f7c3a47b5eb49f49f450eb18822d51dc496fceefPhil Goodwin & Tyler Schultz 225f7c3a47b5eb49f49f450eb18822d51dc496fceefPhil Goodwin & Tyler Schultz /** 226f7c3a47b5eb49f49f450eb18822d51dc496fceefPhil Goodwin & Tyler Schultz * @see ShadowLooper#runToNextTask() () 227f7c3a47b5eb49f49f450eb18822d51dc496fceefPhil Goodwin & Tyler Schultz */ 228f7c3a47b5eb49f49f450eb18822d51dc496fceefPhil Goodwin & Tyler Schultz public static void runMainLooperToNextTask() { 229f7c3a47b5eb49f49f450eb18822d51dc496fceefPhil Goodwin & Tyler Schultz shadowOf(Looper.myLooper()).runToNextTask(); 230f7c3a47b5eb49f49f450eb18822d51dc496fceefPhil Goodwin & Tyler Schultz } 231f8d3ea0e4553f6f391543eccb99485f9603c5804Christian Williams & Jay Phillips} 232