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;
}
}
|