ShowDebugUrl.java 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. package com.edufound.mobile.util;
  2. import android.app.Activity;
  3. import android.app.Dialog;
  4. import android.os.Handler;
  5. import android.os.Handler.Callback;
  6. import android.os.Message;
  7. import android.view.Display;
  8. import android.view.Gravity;
  9. import android.view.KeyEvent;
  10. import android.view.LayoutInflater;
  11. import android.view.View;
  12. import android.view.Window;
  13. import android.view.WindowManager;
  14. import android.widget.Button;
  15. import android.widget.EditText;
  16. import com.edufound.mobile.R;
  17. import com.edufound.mobile.main.MainView;
  18. public final class ShowDebugUrl implements Callback {
  19. private static final int MSG_SHOW_EFKEY = Integer.MIN_VALUE;
  20. private Handler mHandlerUi = new Handler(this);
  21. private Handler mHandlerBackground = new Handler(this);
  22. private static final int[] EFKEY = {KeyEvent.KEYCODE_DPAD_UP, KeyEvent.KEYCODE_DPAD_DOWN,
  23. KeyEvent.KEYCODE_DPAD_LEFT, KeyEvent.KEYCODE_DPAD_LEFT,
  24. KeyEvent.KEYCODE_DPAD_UP, KeyEvent.KEYCODE_DPAD_DOWN,
  25. KeyEvent.KEYCODE_DPAD_RIGHT, KeyEvent.KEYCODE_DPAD_RIGHT};
  26. private static final int EFKEY_LENGTH = EFKEY.length;
  27. private static final long INPUT_INTERVAL = 10 * 1000L;
  28. private long mLastInputTime;
  29. private int mIndex;
  30. private static Activity mContext;
  31. Dialog dialog;
  32. static MainView mView;
  33. private void input(int keyCode) {
  34. if (System.currentTimeMillis() - mLastInputTime > INPUT_INTERVAL) {
  35. mIndex = 0;
  36. }
  37. if (mIndex >= EFKEY_LENGTH || mIndex < 0) {
  38. mIndex = 0;
  39. }
  40. if (EFKEY[mIndex] == keyCode) {
  41. mLastInputTime = System.currentTimeMillis();
  42. mIndex++;
  43. if (mIndex == EFKEY_LENGTH) {
  44. mHandlerUi.sendEmptyMessage(MSG_SHOW_EFKEY);
  45. }
  46. } else {
  47. mLastInputTime = System.currentTimeMillis();
  48. mIndex = 0;
  49. }
  50. }
  51. public void show(MainView mview) {
  52. mView = mview;
  53. mContext = mView.getActivity();
  54. Logger.e("ShowDebugUrl Dialog");
  55. if (dialog == null) {
  56. dialog = new Dialog(mContext);
  57. dialog.setContentView(createView());
  58. Window dialogWindow = dialog.getWindow();
  59. dialogWindow.setGravity(Gravity.CENTER);
  60. WindowManager m = mContext.getWindowManager();
  61. Display d = m.getDefaultDisplay(); // 获取屏幕宽、高用
  62. WindowManager.LayoutParams p = dialogWindow.getAttributes(); // 获取对话框当前的参数值
  63. p.height = (int) (d.getHeight() * 0.6);
  64. p.width = (int) (d.getWidth() * 0.8);
  65. dialogWindow.setAttributes(p);
  66. dialog.setTitle("设置");
  67. }
  68. dialog.show();
  69. }
  70. private View createView() {
  71. View debugUrl = LayoutInflater.from(mContext).inflate(R.layout.window_debugurl, null);
  72. final EditText editText = debugUrl.findViewById(R.id.window_debugurl_edit);
  73. Button btn = debugUrl.findViewById(R.id.window_debugurl_btn);
  74. btn.setOnClickListener(new View.OnClickListener() {
  75. @Override
  76. public void onClick(View v) {
  77. if (editText.getText() == null || editText.getText().equals("")) {
  78. return;
  79. }
  80. ToastUtil.showToast(editText.getText().toString());
  81. mView.loadUrl(editText.getText().toString());
  82. }
  83. });
  84. return debugUrl;
  85. }
  86. private static final ShowDebugUrl INSTANCE = new ShowDebugUrl();
  87. public static void dispatchKeyEvent(KeyEvent e, MainView mainview) {
  88. try {
  89. mContext = mView.getActivity();
  90. getInstance().dispathInput(e);
  91. } catch (final Exception ex) {
  92. ex.printStackTrace();
  93. }
  94. }
  95. public static ShowDebugUrl getInstance() {
  96. return INSTANCE;
  97. }
  98. private void dispathInput(final KeyEvent e) {
  99. mHandlerBackground.sendEmptyMessage(e.getKeyCode());
  100. }
  101. @Override
  102. public boolean handleMessage(Message msg) {
  103. try {
  104. switch (msg.what) {
  105. case MSG_SHOW_EFKEY:
  106. // show();
  107. break;
  108. default:
  109. input(msg.what);
  110. break;
  111. }
  112. } catch (final Exception ex) {
  113. ex.printStackTrace();
  114. }
  115. return true;
  116. }
  117. }