1// Copyright 2012 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5package org.chromium.base;
6
7import android.os.Handler;
8import android.os.Message;
9
10class SystemMessageHandler extends Handler {
11
12    private static final int SCHEDULED_WORK = 1;
13    private static final int DELAYED_SCHEDULED_WORK = 2;
14
15    // Native class pointer set by the constructor of the SharedClient native class.
16    private long mMessagePumpDelegateNative = 0;
17    private long mDelayedScheduledTimeTicks = 0;
18
19    private SystemMessageHandler(long messagePumpDelegateNative) {
20        mMessagePumpDelegateNative = messagePumpDelegateNative;
21    }
22
23    @Override
24    public void handleMessage(Message msg) {
25        if (msg.what == DELAYED_SCHEDULED_WORK) {
26            mDelayedScheduledTimeTicks = 0;
27        }
28        nativeDoRunLoopOnce(mMessagePumpDelegateNative, mDelayedScheduledTimeTicks);
29    }
30
31    @SuppressWarnings("unused")
32    @CalledByNative
33    private void scheduleWork() {
34        sendEmptyMessage(SCHEDULED_WORK);
35    }
36
37    @SuppressWarnings("unused")
38    @CalledByNative
39    private void scheduleDelayedWork(long delayedTimeTicks, long millis) {
40        if (mDelayedScheduledTimeTicks != 0) {
41            removeMessages(DELAYED_SCHEDULED_WORK);
42        }
43        mDelayedScheduledTimeTicks = delayedTimeTicks;
44        sendEmptyMessageDelayed(DELAYED_SCHEDULED_WORK, millis);
45    }
46
47    @SuppressWarnings("unused")
48    @CalledByNative
49    private void removeAllPendingMessages() {
50        removeMessages(SCHEDULED_WORK);
51        removeMessages(DELAYED_SCHEDULED_WORK);
52    }
53
54    @CalledByNative
55    private static SystemMessageHandler create(long messagePumpDelegateNative) {
56        return new SystemMessageHandler(messagePumpDelegateNative);
57    }
58
59    private native void nativeDoRunLoopOnce(
60            long messagePumpDelegateNative, long delayedScheduledTimeTicks);
61}
62