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