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