package com.edufound.base.util; import android.app.Activity; import android.os.Handler; import android.os.Handler.Callback; import android.os.Message; import android.view.KeyEvent; import android.webkit.WebView; import com.edufound.base.callback.UpdateUrlCallback; import com.edufound.base.popupwindow.BasePopWindowUtil; public final class ShowUpdateUrlByKey implements Callback { private static final int MSG_SHOW_EFKEY = Integer.MIN_VALUE; private Handler mHandlerUi = new Handler(this); private Handler mHandlerBackground = new Handler(this); private static final int[] EFKEY = {KeyEvent.KEYCODE_VOLUME_DOWN, KeyEvent.KEYCODE_VOLUME_UP, KeyEvent.KEYCODE_VOLUME_UP, KeyEvent.KEYCODE_VOLUME_DOWN, KeyEvent.KEYCODE_VOLUME_UP, KeyEvent.KEYCODE_VOLUME_UP, KeyEvent.KEYCODE_VOLUME_UP}; private static final int EFKEY_LENGTH = EFKEY.length; private static final long INPUT_INTERVAL = 10 * 1000L; private long mLastInputTime; private int mIndex; private static Activity mContext; private static UpdateUrlCallback mCallBack; private void input(int keyCode) { if (System.currentTimeMillis() - mLastInputTime > INPUT_INTERVAL) { mIndex = 0; } if (mIndex >= EFKEY_LENGTH || mIndex < 0) { mIndex = 0; } if (EFKEY[mIndex] == keyCode) { mLastInputTime = System.currentTimeMillis(); mIndex++; if (mIndex == EFKEY_LENGTH) { mHandlerUi.sendEmptyMessage(MSG_SHOW_EFKEY); } } else { mLastInputTime = System.currentTimeMillis(); mIndex = 0; } } private static final ShowUpdateUrlByKey INSTANCE = new ShowUpdateUrlByKey(); public static void dispatchKeyEvent(KeyEvent e, Activity context, UpdateUrlCallback callback) { try { mContext = context; mCallBack = callback; getInstance().dispathInput(e); } catch (final Exception ex) { ex.printStackTrace(); } } private static ShowUpdateUrlByKey getInstance() { return INSTANCE; } private void dispathInput(final KeyEvent e) { mHandlerBackground.sendEmptyMessage(e.getKeyCode()); } @Override public boolean handleMessage(Message msg) { try { switch (msg.what) { case MSG_SHOW_EFKEY: BasePopWindowUtil.showUpdateUrlWindow(mContext, mCallBack); break; default: input(msg.what); break; } } catch (final Exception ex) { ex.printStackTrace(); } return true; } }