1a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)// Copyright 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)package org.chromium.base;
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import android.os.Handler;
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import android.os.Message;
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SystemMessageHandler extends Handler {
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
12a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    private static final int SCHEDULED_WORK = 1;
13a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    private static final int DELAYED_SCHEDULED_WORK = 2;
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Native class pointer set by the constructor of the SharedClient native class.
16f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    private long mMessagePumpDelegateNative = 0;
17a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    private long mDelayedScheduledTimeTicks = 0;
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
19f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    private SystemMessageHandler(long messagePumpDelegateNative) {
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        mMessagePumpDelegateNative = messagePumpDelegateNative;
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    @Override
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    public void handleMessage(Message msg) {
25a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)        if (msg.what == DELAYED_SCHEDULED_WORK) {
26a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)            mDelayedScheduledTimeTicks = 0;
27a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)        }
28a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)        nativeDoRunLoopOnce(mMessagePumpDelegateNative, mDelayedScheduledTimeTicks);
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
317dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    @SuppressWarnings("unused")
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    @CalledByNative
33a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    private void scheduleWork() {
34a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)        sendEmptyMessage(SCHEDULED_WORK);
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    @SuppressWarnings("unused")
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    @CalledByNative
39a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    private void scheduleDelayedWork(long delayedTimeTicks, long millis) {
40a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)        if (mDelayedScheduledTimeTicks != 0) {
41a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)            removeMessages(DELAYED_SCHEDULED_WORK);
42a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)        }
43a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)        mDelayedScheduledTimeTicks = delayedTimeTicks;
44a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)        sendEmptyMessageDelayed(DELAYED_SCHEDULED_WORK, millis);
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    @SuppressWarnings("unused")
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    @CalledByNative
49f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    private void removeAllPendingMessages() {
50a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)        removeMessages(SCHEDULED_WORK);
51f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)        removeMessages(DELAYED_SCHEDULED_WORK);
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    @CalledByNative
55f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    private static SystemMessageHandler create(long messagePumpDelegateNative) {
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        return new SystemMessageHandler(messagePumpDelegateNative);
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
59a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    private native void nativeDoRunLoopOnce(
60a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)            long messagePumpDelegateNative, long delayedScheduledTimeTicks);
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
62