Home | History | Annotate | Download | only in integration
      1 
      2 package com.android.mediaframeworktest.integration;
      3 
      4 import static org.junit.Assert.assertNotNull;
      5 
      6 import android.content.Context;
      7 import android.content.pm.FeatureInfo;
      8 import android.content.pm.PackageManager;
      9 import android.hardware.ICameraService;
     10 import android.os.IBinder;
     11 import android.os.ServiceManager;
     12 import android.util.Log;
     13 
     14 public class CameraBinderTestUtils {
     15     private final ICameraService mCameraService;
     16     private int mGuessedNumCameras;
     17 
     18     static final String CAMERA_SERVICE_BINDER_NAME = "media.camera";
     19 
     20     protected static final int USE_CALLING_UID = -1;
     21     protected static final int BAD_VALUE = -22;
     22     protected static final int INVALID_OPERATION = -38;
     23     protected static final int ALREADY_EXISTS = -17;
     24     public static final int NO_ERROR = 0;
     25     public static final int EOPNOTSUPP = -95;
     26     private final Context mContext;
     27 
     28     public CameraBinderTestUtils(Context context) {
     29 
     30         mContext = context;
     31 
     32         guessNumCameras();
     33 
     34         IBinder cameraServiceBinder = ServiceManager
     35                 .getService(CameraBinderTestUtils.CAMERA_SERVICE_BINDER_NAME);
     36         assertNotNull("Camera service IBinder should not be null", cameraServiceBinder);
     37 
     38         this.mCameraService = ICameraService.Stub.asInterface(cameraServiceBinder);
     39         assertNotNull("Camera service should not be null", getCameraService());
     40     }
     41 
     42     private void guessNumCameras() {
     43 
     44         /**
     45          * Why do we need this? This way we have no dependency on getNumCameras
     46          * actually working. On most systems there are only 0, 1, or 2 cameras,
     47          * and this covers that 'usual case'. On other systems there might be 3+
     48          * cameras, but this will at least check the first 2.
     49          */
     50         this.mGuessedNumCameras = 0;
     51 
     52         // Front facing camera
     53         if (CameraBinderTestUtils.isFeatureAvailable(mContext,
     54                 PackageManager.FEATURE_CAMERA_FRONT)) {
     55             this.mGuessedNumCameras = getGuessedNumCameras() + 1;
     56         }
     57 
     58         // Back facing camera
     59         if (CameraBinderTestUtils.isFeatureAvailable(mContext,
     60                 PackageManager.FEATURE_CAMERA)) {
     61             this.mGuessedNumCameras = getGuessedNumCameras() + 1;
     62         }
     63 
     64         // Any facing camera
     65         if (getGuessedNumCameras() == 0
     66                 && CameraBinderTestUtils.isFeatureAvailable(mContext,
     67                         PackageManager.FEATURE_CAMERA_ANY)) {
     68             this.mGuessedNumCameras = getGuessedNumCameras() + 1;
     69         }
     70 
     71         Log.v(CameraBinderTest.TAG, "Guessing there are at least " + getGuessedNumCameras()
     72                 + " cameras");
     73     }
     74 
     75     final static public boolean isFeatureAvailable(Context context, String feature) {
     76         final PackageManager packageManager = context.getPackageManager();
     77         final FeatureInfo[] featuresList = packageManager.getSystemAvailableFeatures();
     78         for (FeatureInfo f : featuresList) {
     79             if (f.name != null && f.name.equals(feature)) {
     80                 return true;
     81             }
     82         }
     83 
     84         return false;
     85     }
     86 
     87     ICameraService getCameraService() {
     88         return mCameraService;
     89     }
     90 
     91     int getGuessedNumCameras() {
     92         return mGuessedNumCameras;
     93     }
     94 }
     95