/* PauseHandler.java Copyright (c) 2017 NTT DOCOMO,INC. Released under the MIT license http://opensource.org/licenses/mit-license.php */ package org.deviceconnect.android.manager.util; import android.os.Handler; import android.os.Message; import java.util.Vector; public abstract class PauseHandler extends Handler { /** * Message Queue Buffer */ private final Vector<Message> mMessageQueueBuffer = new Vector<>(); /** * Flag indicating the pause state */ private boolean mPaused; /** * Resume the handler */ public final void resume() { mPaused = false; while (mMessageQueueBuffer.size() > 0) { final Message msg = mMessageQueueBuffer.elementAt(0); mMessageQueueBuffer.removeElementAt(0); sendMessage(msg); } } /** * Pause the handler */ public final void pause() { mPaused = true; } /** * Notification that the message is about to be stored as the activity is * mPaused. If not handled the message will be saved and replayed when the * activity resumes. * * @param message * the message which optional can be handled * @return true if the message is to be stored */ protected abstract boolean storeMessage(final Message message); /** * Notification message to be processed. This will either be directly from * handleMessage or played back from a saved message when the activity was * mPaused. * * @param message * the message to be handled */ protected abstract void processMessage(final Message message); @Override public final void handleMessage(final Message msg) { if (mPaused) { if (storeMessage(msg)) { Message msgCopy = new Message(); msgCopy.copyFrom(msg); mMessageQueueBuffer.add(msgCopy); } } else { processMessage(msg); } } }