package com.android.mediaframeworktest.integration; import static org.junit.Assert.assertNotNull; import android.content.Context; import android.content.pm.FeatureInfo; import android.content.pm.PackageManager; import android.hardware.ICameraService; import android.os.IBinder; import android.os.ServiceManager; import android.util.Log; public class CameraBinderTestUtils { private final ICameraService mCameraService; private int mGuessedNumCameras; static final String CAMERA_SERVICE_BINDER_NAME = "media.camera"; protected static final int USE_CALLING_UID = -1; protected static final int BAD_VALUE = -22; protected static final int INVALID_OPERATION = -38; protected static final int ALREADY_EXISTS = -17; public static final int NO_ERROR = 0; public static final int EOPNOTSUPP = -95; private final Context mContext; public CameraBinderTestUtils(Context context) { mContext = context; guessNumCameras(); IBinder cameraServiceBinder = ServiceManager .getService(CameraBinderTestUtils.CAMERA_SERVICE_BINDER_NAME); assertNotNull("Camera service IBinder should not be null", cameraServiceBinder); this.mCameraService = ICameraService.Stub.asInterface(cameraServiceBinder); assertNotNull("Camera service should not be null", getCameraService()); } private void guessNumCameras() { /** * Why do we need this? This way we have no dependency on getNumCameras * actually working. On most systems there are only 0, 1, or 2 cameras, * and this covers that 'usual case'. On other systems there might be 3+ * cameras, but this will at least check the first 2. */ this.mGuessedNumCameras = 0; // Front facing camera if (CameraBinderTestUtils.isFeatureAvailable(mContext, PackageManager.FEATURE_CAMERA_FRONT)) { this.mGuessedNumCameras = getGuessedNumCameras() + 1; } // Back facing camera if (CameraBinderTestUtils.isFeatureAvailable(mContext, PackageManager.FEATURE_CAMERA)) { this.mGuessedNumCameras = getGuessedNumCameras() + 1; } // Any facing camera if (getGuessedNumCameras() == 0 && CameraBinderTestUtils.isFeatureAvailable(mContext, PackageManager.FEATURE_CAMERA_ANY)) { this.mGuessedNumCameras = getGuessedNumCameras() + 1; } Log.v(CameraBinderTest.TAG, "Guessing there are at least " + getGuessedNumCameras() + " cameras"); } final static public boolean isFeatureAvailable(Context context, String feature) { final PackageManager packageManager = context.getPackageManager(); final FeatureInfo[] featuresList = packageManager.getSystemAvailableFeatures(); for (FeatureInfo f : featuresList) { if (f.name != null && f.name.equals(feature)) { return true; } } return false; } ICameraService getCameraService() { return mCameraService; } int getGuessedNumCameras() { return mGuessedNumCameras; } }