ShowUpdateUrlByKey.java 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. package com.edufound.base.util;
  2. import android.app.Activity;
  3. import android.os.Handler;
  4. import android.os.Handler.Callback;
  5. import android.os.Message;
  6. import android.view.KeyEvent;
  7. import android.webkit.WebView;
  8. import com.edufound.base.callback.UpdateUrlCallback;
  9. import com.edufound.base.popupwindow.BasePopWindowUtil;
  10. public final class ShowUpdateUrlByKey implements Callback {
  11. private static final int MSG_SHOW_EFKEY = Integer.MIN_VALUE;
  12. private Handler mHandlerUi = new Handler(this);
  13. private Handler mHandlerBackground = new Handler(this);
  14. private static final int[] EFKEY = {KeyEvent.KEYCODE_VOLUME_DOWN, KeyEvent.KEYCODE_VOLUME_UP,
  15. KeyEvent.KEYCODE_VOLUME_UP, KeyEvent.KEYCODE_VOLUME_DOWN, KeyEvent.KEYCODE_VOLUME_UP,
  16. KeyEvent.KEYCODE_VOLUME_UP, KeyEvent.KEYCODE_VOLUME_UP};
  17. private static final int EFKEY_LENGTH = EFKEY.length;
  18. private static final long INPUT_INTERVAL = 10 * 1000L;
  19. private long mLastInputTime;
  20. private int mIndex;
  21. private static Activity mContext;
  22. private static UpdateUrlCallback mCallBack;
  23. private void input(int keyCode) {
  24. if (System.currentTimeMillis() - mLastInputTime > INPUT_INTERVAL) {
  25. mIndex = 0;
  26. }
  27. if (mIndex >= EFKEY_LENGTH || mIndex < 0) {
  28. mIndex = 0;
  29. }
  30. if (EFKEY[mIndex] == keyCode) {
  31. mLastInputTime = System.currentTimeMillis();
  32. mIndex++;
  33. if (mIndex == EFKEY_LENGTH) {
  34. mHandlerUi.sendEmptyMessage(MSG_SHOW_EFKEY);
  35. }
  36. } else {
  37. mLastInputTime = System.currentTimeMillis();
  38. mIndex = 0;
  39. }
  40. }
  41. private static final ShowUpdateUrlByKey INSTANCE = new ShowUpdateUrlByKey();
  42. public static void dispatchKeyEvent(KeyEvent e, Activity context, UpdateUrlCallback callback) {
  43. try {
  44. mContext = context;
  45. mCallBack = callback;
  46. getInstance().dispathInput(e);
  47. } catch (final Exception ex) {
  48. ex.printStackTrace();
  49. }
  50. }
  51. private static ShowUpdateUrlByKey getInstance() {
  52. return INSTANCE;
  53. }
  54. private void dispathInput(final KeyEvent e) {
  55. mHandlerBackground.sendEmptyMessage(e.getKeyCode());
  56. }
  57. @Override
  58. public boolean handleMessage(Message msg) {
  59. try {
  60. switch (msg.what) {
  61. case MSG_SHOW_EFKEY:
  62. BasePopWindowUtil.showUpdateUrlWindow(mContext, mCallBack);
  63. break;
  64. default:
  65. input(msg.what);
  66. break;
  67. }
  68. } catch (final Exception ex) {
  69. ex.printStackTrace();
  70. }
  71. return true;
  72. }
  73. }