170725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin 270725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkinpackage com.android.mediaframeworktest.integration; 370725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin 470725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkinimport static org.junit.Assert.assertNotNull; 58ea56f68517ffa42bd5f43ab67f4ebfcfcb0cd23Lazar Trsicimport static android.system.OsConstants.*; 670725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin 770725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkinimport android.content.Context; 870725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkinimport android.content.pm.FeatureInfo; 970725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkinimport android.content.pm.PackageManager; 1070725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkinimport android.hardware.ICameraService; 1170725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkinimport android.os.IBinder; 1270725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkinimport android.os.ServiceManager; 1370725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkinimport android.util.Log; 1470725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin 1570725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkinpublic class CameraBinderTestUtils { 1670725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin private final ICameraService mCameraService; 1770725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin private int mGuessedNumCameras; 1870725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin 1970725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin static final String CAMERA_SERVICE_BINDER_NAME = "media.camera"; 2070725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin 21d7bf1778df666e82268d1e4549d248ce3dfc9665Igor Murashkin public static final int NO_ERROR = 0; 2270725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin private final Context mContext; 2370725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin 2470725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin public CameraBinderTestUtils(Context context) { 2570725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin 2670725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin mContext = context; 2770725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin 2870725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin guessNumCameras(); 2970725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin 3070725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin IBinder cameraServiceBinder = ServiceManager 3170725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin .getService(CameraBinderTestUtils.CAMERA_SERVICE_BINDER_NAME); 3270725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin assertNotNull("Camera service IBinder should not be null", cameraServiceBinder); 3370725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin 3470725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin this.mCameraService = ICameraService.Stub.asInterface(cameraServiceBinder); 3570725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin assertNotNull("Camera service should not be null", getCameraService()); 3670725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin } 3770725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin 3870725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin private void guessNumCameras() { 3970725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin 4070725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin /** 4170725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin * Why do we need this? This way we have no dependency on getNumCameras 4270725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin * actually working. On most systems there are only 0, 1, or 2 cameras, 4370725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin * and this covers that 'usual case'. On other systems there might be 3+ 4470725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin * cameras, but this will at least check the first 2. 4570725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin */ 4670725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin this.mGuessedNumCameras = 0; 4770725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin 4870725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin // Front facing camera 4970725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin if (CameraBinderTestUtils.isFeatureAvailable(mContext, 5070725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin PackageManager.FEATURE_CAMERA_FRONT)) { 5170725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin this.mGuessedNumCameras = getGuessedNumCameras() + 1; 5270725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin } 5370725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin 5470725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin // Back facing camera 5570725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin if (CameraBinderTestUtils.isFeatureAvailable(mContext, 5670725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin PackageManager.FEATURE_CAMERA)) { 5770725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin this.mGuessedNumCameras = getGuessedNumCameras() + 1; 5870725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin } 5970725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin 6070725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin // Any facing camera 6170725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin if (getGuessedNumCameras() == 0 6270725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin && CameraBinderTestUtils.isFeatureAvailable(mContext, 6370725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin PackageManager.FEATURE_CAMERA_ANY)) { 6470725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin this.mGuessedNumCameras = getGuessedNumCameras() + 1; 6570725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin } 6670725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin 6770725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin Log.v(CameraBinderTest.TAG, "Guessing there are at least " + getGuessedNumCameras() 6870725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin + " cameras"); 6970725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin } 7070725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin 7170725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin final static public boolean isFeatureAvailable(Context context, String feature) { 7270725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin final PackageManager packageManager = context.getPackageManager(); 7370725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin final FeatureInfo[] featuresList = packageManager.getSystemAvailableFeatures(); 7470725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin for (FeatureInfo f : featuresList) { 7570725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin if (f.name != null && f.name.equals(feature)) { 7670725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin return true; 7770725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin } 7870725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin } 7970725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin 8070725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin return false; 8170725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin } 8270725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin 8370725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin ICameraService getCameraService() { 8470725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin return mCameraService; 8570725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin } 8670725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin 8770725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin int getGuessedNumCameras() { 8870725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin return mGuessedNumCameras; 8970725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin } 9070725500dcf3b666b43d50563d64705aab58d2d3Igor Murashkin} 91