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