SystemMessageHandler.java revision f8ee788a64d60abd8f2d742a5fdedde054ecd910
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