ShadowHandler.java revision de9feed5ddf1d91a3e76cbc71712c36a7652201e
167142e6509cdc6c82290e955ae69400462cf52a9Christian Williams & Ian Fisherpackage com.xtremelabs.droidsugar.fakes;
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;
6f8d3ea0e4553f6f391543eccb99485f9603c5804Christian Williams & Jay Phillipsimport com.xtremelabs.droidsugar.ProxyDelegatingHandler;
7de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williamsimport com.xtremelabs.droidsugar.util.Implementation;
80b378afcde0200166e546c46a7642015accfce49Christian Williams & Ian Fisherimport com.xtremelabs.droidsugar.util.Implements;
9f8d3ea0e4553f6f391543eccb99485f9603c5804Christian Williams & Jay Phillips
10f8d3ea0e4553f6f391543eccb99485f9603c5804Christian Williams & Jay Phillips@SuppressWarnings({"UnusedDeclaration"})
110b378afcde0200166e546c46a7642015accfce49Christian Williams & Ian Fisher@Implements(Handler.class)
12f8d3ea0e4553f6f391543eccb99485f9603c5804Christian Williams & Jay Phillipspublic class FakeHandler {
13f8d3ea0e4553f6f391543eccb99485f9603c5804Christian Williams & Jay Phillips    private Handler realHandler;
14f8d3ea0e4553f6f391543eccb99485f9603c5804Christian Williams & Jay Phillips    private Looper looper;
15f8d3ea0e4553f6f391543eccb99485f9603c5804Christian Williams & Jay Phillips
16f8d3ea0e4553f6f391543eccb99485f9603c5804Christian Williams & Jay Phillips    public FakeHandler(Handler realHandler) {
17f8d3ea0e4553f6f391543eccb99485f9603c5804Christian Williams & Jay Phillips        this.realHandler = realHandler;
18f8d3ea0e4553f6f391543eccb99485f9603c5804Christian Williams & Jay Phillips    }
19f8d3ea0e4553f6f391543eccb99485f9603c5804Christian Williams & Jay Phillips
20f8d3ea0e4553f6f391543eccb99485f9603c5804Christian Williams & Jay Phillips    public void __constructor__() {
21f8d3ea0e4553f6f391543eccb99485f9603c5804Christian Williams & Jay Phillips        this.looper = Looper.myLooper();
22f8d3ea0e4553f6f391543eccb99485f9603c5804Christian Williams & Jay Phillips    }
23f8d3ea0e4553f6f391543eccb99485f9603c5804Christian Williams & Jay Phillips
24f8d3ea0e4553f6f391543eccb99485f9603c5804Christian Williams & Jay Phillips    public void __constructor__(Looper looper) {
25f8d3ea0e4553f6f391543eccb99485f9603c5804Christian Williams & Jay Phillips        this.looper = looper;
26f8d3ea0e4553f6f391543eccb99485f9603c5804Christian Williams & Jay Phillips    }
27f8d3ea0e4553f6f391543eccb99485f9603c5804Christian Williams & Jay Phillips
28de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams    @Implementation
29de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams    public boolean post(Runnable r) {
30534fd31dba68daad0ad9d98c3c480139a3efa5a1Christian Williams & Tyler Schultz        return postDelayed(r, 0);
31534fd31dba68daad0ad9d98c3c480139a3efa5a1Christian Williams & Tyler Schultz    }
32534fd31dba68daad0ad9d98c3c480139a3efa5a1Christian Williams & Tyler Schultz
33de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams    @Implementation
34de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams    public boolean postDelayed(Runnable r, long delayMillis) {
35534fd31dba68daad0ad9d98c3c480139a3efa5a1Christian Williams & Tyler Schultz        proxyFor(looper).post(r, delayMillis);
36f8d3ea0e4553f6f391543eccb99485f9603c5804Christian Williams & Jay Phillips        return true;
37f8d3ea0e4553f6f391543eccb99485f9603c5804Christian Williams & Jay Phillips    }
38f8d3ea0e4553f6f391543eccb99485f9603c5804Christian Williams & Jay Phillips
39de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams    @Implementation
40de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams    public Message obtainMessage(int what, Object obj) {
41f8d3ea0e4553f6f391543eccb99485f9603c5804Christian Williams & Jay Phillips        Message message = new Message();
42f8d3ea0e4553f6f391543eccb99485f9603c5804Christian Williams & Jay Phillips        message.what = what;
43f8d3ea0e4553f6f391543eccb99485f9603c5804Christian Williams & Jay Phillips        message.obj = obj;
44f8d3ea0e4553f6f391543eccb99485f9603c5804Christian Williams & Jay Phillips        return message;
45f8d3ea0e4553f6f391543eccb99485f9603c5804Christian Williams & Jay Phillips    }
46f8d3ea0e4553f6f391543eccb99485f9603c5804Christian Williams & Jay Phillips
47de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams    @Implementation
48f8d3ea0e4553f6f391543eccb99485f9603c5804Christian Williams & Jay Phillips    public final boolean sendMessage(final Message msg) {
49f8d3ea0e4553f6f391543eccb99485f9603c5804Christian Williams & Jay Phillips        post(new Runnable() {
50f8d3ea0e4553f6f391543eccb99485f9603c5804Christian Williams & Jay Phillips            @Override
51f8d3ea0e4553f6f391543eccb99485f9603c5804Christian Williams & Jay Phillips            public void run() {
52f8d3ea0e4553f6f391543eccb99485f9603c5804Christian Williams & Jay Phillips                realHandler.handleMessage(msg);
53f8d3ea0e4553f6f391543eccb99485f9603c5804Christian Williams & Jay Phillips            }
54f8d3ea0e4553f6f391543eccb99485f9603c5804Christian Williams & Jay Phillips        });
55f8d3ea0e4553f6f391543eccb99485f9603c5804Christian Williams & Jay Phillips        return true;
56f8d3ea0e4553f6f391543eccb99485f9603c5804Christian Williams & Jay Phillips    }
579c19f7ef7122cfa9e03ed4314da4ad2a115c7e71Christian Williams & Ryan Richard
58563821eb6f69ee8158b44465d227b0ce35ad2ed4Christian Williams & Ian Fisher    public static void flush() {
59534fd31dba68daad0ad9d98c3c480139a3efa5a1Christian Williams & Tyler Schultz        proxyFor(Looper.myLooper()).idle();
60534fd31dba68daad0ad9d98c3c480139a3efa5a1Christian Williams & Tyler Schultz    }
61534fd31dba68daad0ad9d98c3c480139a3efa5a1Christian Williams & Tyler Schultz
62534fd31dba68daad0ad9d98c3c480139a3efa5a1Christian Williams & Tyler Schultz    private static FakeLooper proxyFor(Looper looper) {
63534fd31dba68daad0ad9d98c3c480139a3efa5a1Christian Williams & Tyler Schultz        return (FakeLooper) ProxyDelegatingHandler.getInstance().proxyFor(looper);
649c19f7ef7122cfa9e03ed4314da4ad2a115c7e71Christian Williams & Ryan Richard    }
65f8d3ea0e4553f6f391543eccb99485f9603c5804Christian Williams & Jay Phillips}
66