Home | History | Annotate | Download | only in browser
      1 // Copyright 2014 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 package org.chromium.content.browser;
      6 
      7 import android.content.Context;
      8 import android.content.pm.FeatureInfo;
      9 import android.os.Build;
     10 import android.view.MotionEvent;
     11 
     12 /**
     13  * Support S-Pen event detection and conversion.
     14  */
     15 public final class SPenSupport {
     16 
     17     // These values are obtained from Samsung.
     18     private static final int SPEN_ACTION_DOWN = 211;
     19     private static final int SPEN_ACTION_UP = 212;
     20     private static final int SPEN_ACTION_MOVE = 213;
     21     private static final int SPEN_ACTION_CANCEL = 214;
     22     private static Boolean sIsSPenSupported;
     23 
     24     /**
     25      * @return Whether SPen is supported on the device.
     26      */
     27     public static boolean isSPenSupported(Context context) {
     28         if (sIsSPenSupported == null) {
     29             sIsSPenSupported = detectSPenSupport(context);
     30         }
     31         return sIsSPenSupported.booleanValue();
     32     }
     33 
     34     private static boolean detectSPenSupport(Context context) {
     35         if (!"SAMSUNG".equalsIgnoreCase(Build.MANUFACTURER)) {
     36             return false;
     37         }
     38 
     39         final FeatureInfo[] infos = context.getPackageManager().getSystemAvailableFeatures();
     40         for (FeatureInfo info : infos) {
     41             if ("com.sec.feature.spen_usp".equalsIgnoreCase(info.name)) {
     42                 return true;
     43             }
     44         }
     45         return false;
     46     }
     47 
     48     /**
     49      * Convert SPen event action into normal event action.
     50      *
     51      * @param eventActionMasked Input event action. It is assumed that it is masked as the values
     52                                 cannot be ORed.
     53      * @return Event action after the conversion.
     54      */
     55     public static int convertSPenEventAction(int eventActionMasked) {
     56         // S-Pen support: convert to normal stylus event handling
     57         switch (eventActionMasked) {
     58             case SPEN_ACTION_DOWN:
     59                 return MotionEvent.ACTION_DOWN;
     60             case SPEN_ACTION_UP:
     61                 return MotionEvent.ACTION_UP;
     62             case SPEN_ACTION_MOVE:
     63                 return MotionEvent.ACTION_MOVE;
     64             case SPEN_ACTION_CANCEL:
     65                 return MotionEvent.ACTION_CANCEL;
     66             default:
     67                 return eventActionMasked;
     68         }
     69     }
     70 }
     71