KeyEvent.java
上传用户:luxiaowei
上传日期:2022-06-06
资源大小:58k
文件大小:19k
源码类别:

J2ME

开发平台:

Java

  1. package com.framework;
  2. import javax.microedition.lcdui.Canvas;
  3. /*
  4.  * To change this template, choose Tools | Templates
  5.  * and open the template in the editor.
  6.  */
  7. /**
  8.  *
  9.  * @author swaroop_kumar
  10.  */
  11. public class KeyEvent {
  12.     
  13.     
  14.     public static int KEY_SOFT_LEFT;
  15.     public static int KEY_SOFT_RIGHT;
  16.     public static int KEY_SOFT_CENTER;
  17.     public static int BACK_KEY;
  18.      /** 
  19.       * constants for platforms  names 
  20.       */  
  21.      public static final String PLATFORM_MOTOROLA = "motorola";  
  22.      public static final String PLATFORM_NOKIA = "nokia";  
  23.      public static final String PLATFORM_SONY_ERICSSON = "SE";  
  24.      public static final String PLATFORM_SIEMENS = "siemens";  
  25.      public static final String PLATFORM_SAMSUNG = "samsung";  
  26.      public static final String PLATFORM_LG = "LG";  
  27.      public static final String PLATFORM_NOT_DEFINED = "NA";  
  28.      /** Devices having Qwerty keyboard with different gamekey behaviour*/
  29.      private static final String[] _SQwertyDevices = {"SonyEricssonP1i"};
  30.      public static final String PLATFORM_BLACKBERRY = "blackberry";
  31.       /** 
  32.       * current platform name 
  33.       */  
  34.      private static String PLATFORM_NAME; 
  35.      
  36.      private static final int SOFT_KEY_LEFT_SE = -6;  
  37.      private static final int SOFT_KEY_RIGHT_SE = -7;  
  38.      private static final int DELETE_KEY_SE = -8;  
  39.      private static final int INTERNET_KEY_SE = -10;  
  40.       
  41.      private static final int SOFT_KEY_LEFT_SAMSUNG = -6;  
  42.      private static final int SOFT_KEY_RIGHT_SAMSUNG = -7;  
  43.      private static final int DELETE_KEY_SAMSUNG = -8;  
  44.      
  45.      private static final int SOFT_KEY_LEFT_SIEMENS = -1;  
  46.      private static final int SOFT_KEY_RIGHT_SIEMENS = -4;  
  47.      
  48.      private static final int SOFT_KEY_LEFT_NOKIA = -6;  
  49.      private static final int SOFT_KEY_RIGHT_NOKIA = -7;  
  50.      private static final int DELETE_KEY_NOKIA = -8;  
  51.      private static final int SOFT_KEY_MIDLE_NOKIA = -5;  
  52.      
  53.      private static final int SOFT_KEY_LEFT_MOTOROLA = -21;  
  54.      private static final int SOFT_KEY_RIGHT_MOTOROLA = -22;  
  55.      
  56.      private static final int SOFT_KEY_LEFT_MOTOROLA2 = -20;  
  57.      private static final int SOFT_KEY_LEFT_MOTOROLA1 = 21;  
  58.      private static final int SOFT_KEY_RIGHT_MOTOROLA1 = 22;  
  59.      
  60.      private static final int SOFT_KEY_MIDLE_MOTOROLA = -23;  
  61.      
  62.      private static final String SOFT_WORD = "SOFT";  
  63.       // Key management...
  64.     protected static final int DELETE_KEY_BLACKBERRY = 8;
  65.     static int  _keysPressed = 0;
  66.     static int  _keysCurrent  = 0;
  67.     static int _keyCode = 0;
  68.     /**
  69.      * Handles the key pressed event of the mobile.
  70.      * @param pKeyCode Value of the key being pressed down.
  71.      */
  72.      public static void init(Canvas canvas)
  73.      {
  74.          PLATFORM_NAME = getPlatform(canvas);  
  75.          KEY_SOFT_LEFT = getLeftSoftkeyCode(canvas);
  76.          KEY_SOFT_RIGHT= getRightSoftkeyCode(canvas);
  77.          KEY_SOFT_CENTER = getMiddleSoftkeyCode(canvas);
  78.          BACK_KEY = getDeleteKeyCode(canvas);
  79.          try {
  80.             String prop = FrameWorkMidlet.getInstance().getAppProperty("KeyPad-Type");
  81.             if(prop != null && prop.length() > 0)
  82.             {
  83.                 if(Util.equalsIgnoreCase(prop, "QWERTY"))
  84.                 {
  85.                     EditControl.setKeyPadType(EditControl.QWERTY_KEY_PAD);
  86.                 }
  87.             }
  88.          } catch (Exception e) {
  89.          }
  90.          
  91.      }
  92.      
  93.     
  94.     
  95.     
  96.      /** 
  97.       * define real key's C or DELETE code for current platform 
  98.       * 
  99.       * @return code 
  100.       */  
  101.      protected static int getDeleteKeyCode(Canvas canvas) {  
  102.          try {  
  103.              if (PLATFORM_NAME.equals(PLATFORM_MOTOROLA)) {  
  104.    
  105.              } else if (PLATFORM_NAME.equals(PLATFORM_NOKIA)) {  
  106.                  if (canvas.getKeyName(DELETE_KEY_SE).toUpperCase().indexOf("CLEAR") >= 0) {  
  107.                      return DELETE_KEY_NOKIA;  
  108.                  } else {  
  109.                      return DELETE_KEY_NOKIA;  
  110.                  }  
  111.              } else if (PLATFORM_NAME.equals(PLATFORM_SAMSUNG)) {  
  112.                  if (canvas.getKeyName(DELETE_KEY_SAMSUNG).toUpperCase().indexOf("CLEAR") >= 0) {  
  113.                      return DELETE_KEY_SAMSUNG;  
  114.                  }  
  115.              } else if (PLATFORM_NAME.equals(PLATFORM_SIEMENS)) {  
  116.              } else if (PLATFORM_NAME.equals(PLATFORM_SONY_ERICSSON)) {  
  117.                  if (canvas.getKeyName(DELETE_KEY_SE).toUpperCase().indexOf("CLEAR") >= 0) {  
  118.                      return DELETE_KEY_SE;  
  119.                  } else if (canvas.getKeyName(DELETE_KEY_SE).toUpperCase().indexOf("C") >= 0) {  
  120.                      return DELETE_KEY_SE;  
  121.                  } else {  
  122.                      return DELETE_KEY_SE;  
  123.                  }  
  124.              }  
  125.          } catch (Throwable e) {  
  126.              return DELETE_KEY_SE;  
  127.          }  
  128.          return -8;  
  129.      } 
  130.       /** 
  131.       * define real middle soft key code for current platform 
  132.       * 
  133.       * @return code 
  134.       */  
  135.      protected static int getMiddleSoftkeyCode(Canvas canvas) {  
  136.          try {  
  137.              if (PLATFORM_NAME.equals(PLATFORM_MOTOROLA)) {  
  138.                  if (canvas.getKeyName(SOFT_KEY_MIDLE_MOTOROLA).toUpperCase().indexOf("SOFT") >= 0) {  
  139.                      return SOFT_KEY_MIDLE_MOTOROLA;  
  140.                  }  
  141.              } else if (PLATFORM_NAME.equals(PLATFORM_NOKIA)) {  
  142.                  if (canvas.getKeyName(SOFT_KEY_MIDLE_NOKIA).toUpperCase().indexOf("SOFT") >= 0) {  
  143.                      return SOFT_KEY_MIDLE_NOKIA;  
  144.                  }  
  145.              } else if (PLATFORM_NAME.equals(PLATFORM_SAMSUNG)) {  
  146.              } else if (PLATFORM_NAME.equals(PLATFORM_SIEMENS)) {  
  147.              } else if (PLATFORM_NAME.equals(PLATFORM_SONY_ERICSSON)) {  
  148.                  return INTERNET_KEY_SE;  
  149.              }  
  150.          } catch (Throwable e) {  
  151.          }  
  152.          return Canvas.FIRE;  
  153.      }  
  154.       /** 
  155.       * define real right soft key code for current platform 
  156.       * 
  157.       * @return code 
  158.       */  
  159.      protected static int getRightSoftkeyCode(Canvas canvas) {  
  160.          int keyCode = -7;  
  161.          try {  
  162.              if (PLATFORM_NAME.equals(PLATFORM_MOTOROLA)) {  
  163.    
  164.                  String rightSoftMoto1 = "";  
  165.                  try {  
  166.                      rightSoftMoto1 = canvas.getKeyName(SOFT_KEY_LEFT_MOTOROLA1).toUpperCase();  
  167.                  } catch (IllegalArgumentException ilae) {  
  168.  //                    ilae.printStackTrace();  
  169.                  }  
  170.                  String rightSoftMoto = "";  
  171.                  try {  
  172.                      rightSoftMoto = canvas.getKeyName(SOFT_KEY_RIGHT_MOTOROLA).toUpperCase();  
  173.                  } catch (IllegalArgumentException ilae) {  
  174.  //                    ilae.printStackTrace();  
  175.                  }  
  176.                  String rightSoftMoto2 = "";  
  177.                  try {  
  178.                      rightSoftMoto2 = canvas.getKeyName(SOFT_KEY_RIGHT_MOTOROLA1).toUpperCase();  
  179.                  } catch (IllegalArgumentException ilae) {  
  180.  //                    ilae.printStackTrace();  
  181.                  }  
  182.                  if (rightSoftMoto.indexOf(SOFT_WORD) >= 0 && rightSoftMoto.indexOf("2") >= 0) {  
  183.                      return SOFT_KEY_RIGHT_MOTOROLA;  
  184.                  } else if (rightSoftMoto1.indexOf(SOFT_WORD) >= 0 && rightSoftMoto1.indexOf("2") >= 0) {  
  185.                      return SOFT_KEY_RIGHT_MOTOROLA;  
  186.                  } else if (rightSoftMoto2.indexOf(SOFT_WORD) >= 0 && rightSoftMoto2.indexOf("2") >= 0) {  
  187.                      return SOFT_KEY_RIGHT_MOTOROLA1;  
  188.                  } else if (rightSoftMoto.indexOf(SOFT_WORD) >= 0 && rightSoftMoto.indexOf("RIGHT") >= 0) {  
  189.                      return SOFT_KEY_LEFT_MOTOROLA;  
  190.                  } else if (rightSoftMoto1.indexOf(SOFT_WORD) >= 0 && rightSoftMoto1.indexOf("RIGHT") >= 0) {  
  191.                      return SOFT_KEY_RIGHT_MOTOROLA1;  
  192.                  } else if (rightSoftMoto2.indexOf(SOFT_WORD) >= 0 && rightSoftMoto2.indexOf("RIGHT") >= 0) {  
  193.                      return SOFT_KEY_RIGHT_MOTOROLA;  
  194.                  }  
  195.    
  196.              } else if (PLATFORM_NAME.equals(PLATFORM_NOKIA)) {  
  197.                  return SOFT_KEY_RIGHT_NOKIA;  
  198.              } else if (PLATFORM_NAME.equals(PLATFORM_SAMSUNG)) {  
  199.  //                String rightSoftSamsung = adaptorCanvas.getKeyName(SOFT_KEY_RIGHT_SAMSUNG).toUpperCase();  
  200.  //                if (rightSoftSamsung.indexOf(SOFT_WORD) >= 0) {  
  201.  //                    if (rightSoftSamsung.indexOf("2") >= 0) {  
  202.                  return SOFT_KEY_RIGHT_SAMSUNG;  
  203.  //                    } else if (rightSoftSamsung.indexOf("RIGHT") >= 0) {  
  204.  //                        return SOFT_KEY_RIGHT_SAMSUNG;  
  205.  //                    }  
  206.  //                }  
  207.              } else if (PLATFORM_NAME.equals(PLATFORM_SIEMENS)) {  
  208.                  String rightSoftSiemens = canvas.getKeyName(SOFT_KEY_RIGHT_SIEMENS).toUpperCase();  
  209.                  if (rightSoftSiemens.indexOf(SOFT_WORD) >= 0) {  
  210.                      if (rightSoftSiemens.indexOf("4") >= 0) {  
  211.                          return SOFT_KEY_RIGHT_SIEMENS;  
  212.                      } else if (rightSoftSiemens.indexOf("RIGHT") >= 0) {  
  213.                          return SOFT_KEY_RIGHT_SIEMENS;  
  214.                      }  
  215.                  }  
  216.              } else if (PLATFORM_NAME.equals(PLATFORM_SONY_ERICSSON)) {  
  217.                  return SOFT_KEY_RIGHT_SE;  
  218.              } else if (PLATFORM_NAME.equals(PLATFORM_NOT_DEFINED)) {  
  219.                  for (int i = -125; i <= 125; i++) {  
  220.                      if (i == 0) {  
  221.                          i++;  
  222.                      }  
  223.                      String keyName = canvas.getKeyName(i).toUpperCase();  
  224.                      if (keyName.indexOf(SOFT_WORD) >= 0) {  
  225.                          if (keyName.indexOf("2") >= 0) {  
  226.                              keyCode = i;  
  227.                              break;  
  228.                          } else if (keyName.indexOf("4") >= 0) {  
  229.                              keyCode = i;  
  230.                              break;  
  231.                          } else if (keyName.indexOf("RIGHT") >= 0) {  
  232.                              keyCode = i;  
  233.                              break;  
  234.                          }  
  235.                      }  
  236.                  }  
  237.              }  
  238.          } catch (Throwable iaEx) {  
  239.              //if emulator  
  240.              return SOFT_KEY_RIGHT_NOKIA;  
  241.              //endif  
  242.          }  
  243.          return keyCode;  
  244.      } 
  245.        /** 
  246.       * define real left soft key code by platform 
  247.       * 
  248.       * @return code 
  249.       */  
  250.      protected static int getLeftSoftkeyCode(Canvas canvas) {  
  251.          int keyCode = -6;  
  252.          try {  
  253.              if (PLATFORM_NAME.equals(PLATFORM_MOTOROLA)) {  
  254.                  String softkeyLeftMoto = "";  
  255.                  try {  
  256.                      softkeyLeftMoto = canvas.getKeyName(SOFT_KEY_LEFT_MOTOROLA).toUpperCase();  
  257.                  } catch (IllegalArgumentException ilae) {  
  258.  //                    ilae.printStackTrace();  
  259.                  }  
  260.                  String softkeyLeftMoto1 = "";  
  261.                  try {  
  262.                      softkeyLeftMoto1 = canvas.getKeyName(SOFT_KEY_LEFT_MOTOROLA1).toUpperCase();  
  263.                  } catch (IllegalArgumentException ilae) {  
  264.  //                    ilae.printStackTrace();  
  265.                  }  
  266.                  String softkeyLeftMoto2 = "";  
  267.                  try {  
  268.                      softkeyLeftMoto2 = canvas.getKeyName(SOFT_KEY_LEFT_MOTOROLA2).toUpperCase();  
  269.                  } catch (IllegalArgumentException ilae) {  
  270.  //                    ilae.printStackTrace();  
  271.                  }
  272.                   
  273.                  if (softkeyLeftMoto.indexOf(SOFT_WORD) >= 0 && softkeyLeftMoto.indexOf("1") >= 0) {  
  274.                      return SOFT_KEY_LEFT_MOTOROLA;  
  275.                  } else if (softkeyLeftMoto1.indexOf(SOFT_WORD) >= 0 && softkeyLeftMoto1.indexOf("1") >= 0) {  
  276.                      return SOFT_KEY_LEFT_MOTOROLA1;  
  277.                  } else if (softkeyLeftMoto2.indexOf(SOFT_WORD) >= 0 && softkeyLeftMoto2.indexOf("1") >= 0) {  
  278.                      return SOFT_KEY_LEFT_MOTOROLA2;  
  279.                  } else if (softkeyLeftMoto.indexOf(SOFT_WORD) >= 0 && softkeyLeftMoto.indexOf("LEFT") >= 0) {  
  280.                      return SOFT_KEY_LEFT_MOTOROLA;  
  281.                  } else if (softkeyLeftMoto1.indexOf(SOFT_WORD) >= 0 && softkeyLeftMoto1.indexOf("LEFT") >= 0) {  
  282.                      return SOFT_KEY_LEFT_MOTOROLA1;  
  283.                  } else if (softkeyLeftMoto2.indexOf(SOFT_WORD) >= 0 && softkeyLeftMoto2.indexOf("LEFT") >= 0) {  
  284.                      return SOFT_KEY_LEFT_MOTOROLA2;  
  285.                  }  
  286.    
  287.              } else if (PLATFORM_NAME.equals(PLATFORM_NOKIA)) {  
  288.                  return SOFT_KEY_LEFT_NOKIA;  
  289.              } else if (PLATFORM_NAME.equals(PLATFORM_SAMSUNG)) {  
  290.  //                String leftkeySamsungName = adaptorCanvas.getKeyName(SOFT_KEY_LEFT_SAMSUNG).toUpperCase();  
  291.  //                if (leftkeySamsungName.indexOf(SOFT_WORD) >= 0) {  
  292.  //                    if (leftkeySamsungName.indexOf("1") >= 0) {  
  293.                  return SOFT_KEY_LEFT_SAMSUNG;  
  294.  //                    } else if (leftkeySamsungName.indexOf("LEFT") >= 0) {  
  295.  //                        return SOFT_KEY_LEFT_SAMSUNG;  
  296.  //                    }  
  297.  //                }  
  298.              } else if (PLATFORM_NAME.equals(PLATFORM_SIEMENS)) {  
  299.                  String leftKeySiemensName = canvas.getKeyName(SOFT_KEY_LEFT_SIEMENS).toUpperCase();  
  300.                  if (leftKeySiemensName.indexOf(SOFT_WORD) >= 0) {  
  301.                      if (leftKeySiemensName.indexOf("1") >= 0) {  
  302.                          return SOFT_KEY_LEFT_SIEMENS;  
  303.                      } else if (leftKeySiemensName.indexOf("LEFT") >= 0) {  
  304.                          return SOFT_KEY_LEFT_SIEMENS;  
  305.                      }  
  306.                  }  
  307.              } else if (PLATFORM_NAME.equals(PLATFORM_SONY_ERICSSON)) {  
  308.                  return SOFT_KEY_LEFT_SE;  
  309.              } else if (PLATFORM_NAME.equals(PLATFORM_NOT_DEFINED)) {  
  310.                  //  
  311.                  for (int i = -125; i <= 125; i++) {  
  312.                      if (i == 0) {  
  313.                          i++;  
  314.                      }  
  315.  //                    System.out.println(getKeyName(i).toUpperCase());  
  316.                      final String s = canvas.getKeyName(i).toUpperCase();  
  317.                      if (s.indexOf(SOFT_WORD) >= 0) {  
  318.                          if (s.indexOf("1") >= 0) {  
  319.                              keyCode = i;  
  320.                              break;  
  321.                          }  
  322.                          if (s.indexOf("LEFT") >= 0) {  
  323.                              keyCode = i;  
  324.                              break;  
  325.                          }  
  326.                      }  
  327.                  }  
  328.              }  
  329.              if (keyCode == 0) {  
  330.                  //if emulator  
  331.                  return SOFT_KEY_LEFT_NOKIA;  
  332.                  //endif  
  333.              }  
  334.          } catch (Throwable iaEx) {  
  335.              //if emulator  
  336.              return SOFT_KEY_LEFT_NOKIA;  
  337.              //endif  
  338.          }  
  339.          return keyCode;  
  340.      }  
  341.       /** 
  342.       * Returns mobile phone platform 
  343.       * 
  344.       * @return name mobile phone platform 
  345.       */  
  346.      private static String getPlatform(Canvas canvas) {  
  347.          // detecting NOKIA or SonyEricsson  
  348.          try {  
  349.              final String currentPlatform = System.getProperty("microedition.platform");  
  350.              if (currentPlatform.indexOf("Nokia") != -1) {  
  351.                  return PLATFORM_NOKIA;  
  352.              } else if (currentPlatform.indexOf("SonyEricsson") != -1) {  
  353.                  return PLATFORM_SONY_ERICSSON;  
  354.              }  
  355.          } catch (Throwable ex) {  
  356.          }  
  357.          // detecting SAMSUNG  
  358.          try {  
  359.              Class.forName("com.samsung.util.Vibration");  
  360.              return PLATFORM_SAMSUNG;  
  361.          } catch (Throwable ex) {  
  362.          }  
  363.          // detecting MOTOROLA  
  364.          try {  
  365.              Class.forName("com.motorola.multimedia.Vibrator");  
  366.              return PLATFORM_MOTOROLA;  
  367.          } catch (Throwable ex) {  
  368.              try {  
  369.                  Class.forName("com.motorola.graphics.j3d.Effect3D");  
  370.                  return PLATFORM_MOTOROLA;  
  371.              } catch (Throwable ex2) {  
  372.                  try {  
  373.                      Class.forName("com.motorola.multimedia.Lighting");  
  374.                      return PLATFORM_MOTOROLA;  
  375.                  } catch (Throwable ex3) {  
  376.                      try {  
  377.                          Class.forName("com.motorola.multimedia.FunLight");  
  378.                          return PLATFORM_MOTOROLA;  
  379.                      } catch (Throwable ex4) {  
  380.                      }  
  381.                  }  
  382.              }  
  383.          }  
  384.          try {  
  385.              if (canvas.getKeyName(SOFT_KEY_LEFT_MOTOROLA).toUpperCase().indexOf(SOFT_WORD) > -1) {  
  386.                  return PLATFORM_MOTOROLA;  
  387.              }  
  388.          } catch (Throwable e) {  
  389.              try {  
  390.                  if (canvas.getKeyName(SOFT_KEY_LEFT_MOTOROLA1).toUpperCase().indexOf(SOFT_WORD) > -1) {  
  391.                      return PLATFORM_MOTOROLA;  
  392.                  }  
  393.              } catch (Throwable e1) {  
  394.                  try {  
  395.                      if (canvas.getKeyName(SOFT_KEY_LEFT_MOTOROLA2).toUpperCase().indexOf(SOFT_WORD) > -1) {  
  396.                          return PLATFORM_MOTOROLA;  
  397.                      }  
  398.                  } catch (Throwable e2) {  
  399.                  }  
  400.              }  
  401.          }  
  402.          // detecting SIEMENS  
  403.          try {  
  404.              Class.forName("com.siemens.mp.io.File");  
  405.              return PLATFORM_SIEMENS;  
  406.          } catch (Throwable ex) {  
  407.          }  
  408.          // detecting LG  
  409.          try {  
  410.              Class.forName("mmpp.media.MediaPlayer");  
  411.              return PLATFORM_LG;  
  412.          } catch (Throwable ex) {  
  413.              try {  
  414.                  Class.forName("mmpp.phone.Phone");  
  415.                  return PLATFORM_LG;  
  416.              } catch (Throwable ex1) {  
  417.                  try {  
  418.                      Class.forName("mmpp.lang.MathFP");  
  419.                      return PLATFORM_LG;  
  420.                  } catch (Throwable ex2) {  
  421.                      try {  
  422.                          Class.forName("mmpp.media.BackLight");  
  423.                          return PLATFORM_LG;  
  424.                      } catch (Throwable ex3) {  
  425.                      }  
  426.                  }  
  427.              }  
  428.          }  
  429.          return PLATFORM_NOT_DEFINED;  
  430.      }  
  431.   protected static boolean isNumericKeyPad(Canvas canvas)
  432.   {
  433.      
  434.       try {
  435.             for (int i = 65; i < (65 + 26); i++)
  436.             {
  437.               canvas.getKeyName(i);
  438.             }
  439.             if(canvas.getGameAction((int)'A') == Canvas.LEFT && canvas.getGameAction((int)'D') == Canvas.RIGHT && canvas.getGameAction((int)'W') == Canvas.UP && canvas.getGameAction((int)'Z') == Canvas.DOWN)
  440.             {
  441.                 return false;
  442.             }
  443.             String platform = System.getProperty("microedition.platform"); 
  444.             for(int devCnt=0; devCnt<_SQwertyDevices.length; devCnt++){
  445.                 if(platform.indexOf(_SQwertyDevices[devCnt]) != -1){
  446.                     return false;
  447.                 }
  448.             }
  449.             return true;
  450.       } catch (Exception e) {
  451.            return true;
  452.       }
  453.   }
  454. }