MockVideoProvider.java revision a0a43d51041c9efbe04f7c65236c9e90c3e79346
1/*
2 * Copyright (C) 2015 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License
15 */
16
17package com.android.server.telecom.tests;
18
19import org.mockito.Mockito;
20
21import android.net.Uri;
22import android.telecom.Connection;
23import android.telecom.Connection.VideoProvider;
24import android.telecom.InCallService;
25import android.telecom.InCallService.VideoCall;
26import android.telecom.Log;
27import android.telecom.VideoProfile;
28import android.view.Surface;
29
30/**
31 * Provides a mock implementation of a video provider.
32 */
33public class MockVideoProvider extends VideoProvider {
34    public static final String CAMERA_NONE = "none";
35    public static final String CAMERA_FRONT = "front";
36    public static final String CAMERA_BACK = "back";
37    public static final int CAMERA_FRONT_DIMENSIONS = 1024;
38    public static final int CAMERA_BACK_DIMENSIONS = 2048;
39    public static final long DATA_USAGE = 1024;
40    public static final int PEER_DIMENSIONS = 4096;
41    public static final int DEVICE_ORIENTATION_UNDEFINED = -1;
42    public static final float ZOOM_UNDEFINED = -1.0f;
43
44    private Surface mPreviewSurface = null;
45    private Surface mDisplaySurface = null;
46    private int mDeviceOrientation = DEVICE_ORIENTATION_UNDEFINED;
47    private float mZoom = ZOOM_UNDEFINED;
48    private VideoProfile mSessionModifyResponse = null;
49    private Uri mPauseImage = null;
50
51    /**
52     * Responds to a request to set the camera by reporting the new camera information via the
53     * {@link #changeCameraCapabilities(VideoProfile.CameraCapabilities)} API.
54     *
55     * @param cameraId The id of the camera (use ids as reported by
56     */
57    @Override
58    public void onSetCamera(String cameraId) {
59        handleCameraChange(cameraId);
60    }
61
62    /**
63     * Stores the preview surface set via the {@link VideoCall#setPreviewSurface(Surface)} API for
64     * retrieval using {@link #getPreviewSurface()}.
65     *
66     * @param surface The {@link Surface}.
67     */
68    @Override
69    public void onSetPreviewSurface(Surface surface) {
70        mPreviewSurface = surface;
71    }
72
73    /**
74     * Stores the display surface set via the {@link VideoCall#setDisplaySurface(Surface)} API for
75     * retrieval using {@link #getDisplaySurface()}.
76     *
77     * @param surface The {@link Surface}.
78     */
79    @Override
80    public void onSetDisplaySurface(Surface surface) {
81        mDisplaySurface = surface;
82    }
83
84    /**
85     * Stores the device orientation set via the {@link VideoCall#setDeviceOrientation(int)} API for
86     * retrieval using {@link #getDeviceOrientation()}.
87     *
88     * @param rotation The device orientation, in degrees.
89     */
90    @Override
91    public void onSetDeviceOrientation(int rotation) {
92        mDeviceOrientation = rotation;
93    }
94
95    /**
96     * Stores the zoom level set via the {@link VideoCall#setZoom(float)} API for retrieval using
97     * {@link #getZoom()}.
98     *
99     * @param value The camera zoom.
100     */
101    @Override
102    public void onSetZoom(float value) {
103        mZoom = value;
104    }
105
106    /**
107     * Responds to any incoming session modify request by accepting the requested profile.
108     *
109     * @param fromProfile The video profile prior to the request.
110     * @param toProfile The video profile with the requested changes made.
111     */
112    @Override
113    public void onSendSessionModifyRequest(VideoProfile fromProfile, VideoProfile toProfile) {
114        super.receiveSessionModifyResponse(VideoProvider.SESSION_MODIFY_REQUEST_SUCCESS,
115                fromProfile, toProfile);
116    }
117
118    /**
119     * Stores session modify responses received via the
120     * {@link VideoCall#sendSessionModifyResponse(VideoProfile)} API for retrieval via
121     * {@link #getSessionModifyResponse()}.
122     *
123     * @param responseProfile The response video profile.
124     */
125    @Override
126    public void onSendSessionModifyResponse(VideoProfile responseProfile) {
127        mSessionModifyResponse = responseProfile;
128    }
129
130    /**
131     * Responds to requests for camera capabilities by reporting the front camera capabilities.
132     */
133    @Override
134    public void onRequestCameraCapabilities() {
135        handleCameraChange(CAMERA_FRONT);
136    }
137
138    /**
139     * Responds to all requests for data usage by reporting {@link #DATA_USAGE}.
140     */
141    @Override
142    public void onRequestConnectionDataUsage() {
143        super.setCallDataUsage(DATA_USAGE);
144    }
145
146    /**
147     * Stores pause image URIs received via the {@link VideoCall#setPauseImage(Uri)} API for
148     * retrieval via {@link #getPauseImage()}.
149     *
150     * @param uri URI of image to display.
151     */
152    @Override
153    public void onSetPauseImage(Uri uri) {
154        mPauseImage = uri;
155    }
156
157    /**
158     * Handles a change to the current camera selection.  Responds by reporting the capabilities of
159     * the camera.
160     */
161    private void handleCameraChange(String cameraId) {
162        if (CAMERA_FRONT.equals(cameraId)) {
163            super.changeCameraCapabilities(new VideoProfile.CameraCapabilities(
164                    CAMERA_FRONT_DIMENSIONS, CAMERA_FRONT_DIMENSIONS));
165        } else if (CAMERA_BACK.equals(cameraId)) {
166            super.changeCameraCapabilities(new VideoProfile.CameraCapabilities(
167                    CAMERA_BACK_DIMENSIONS, CAMERA_BACK_DIMENSIONS));
168        } else {
169            // If the camera is nulled, we will send back a "camera ready" event so that the unit
170            // test has something to wait for.
171            super.handleCallSessionEvent(VideoProvider.SESSION_EVENT_CAMERA_READY);
172        }
173    }
174
175    /**
176     * Retrieves the last preview surface sent to the provider.
177     *
178     * @return the surface.
179     */
180    public Surface getPreviewSurface() {
181        return mPreviewSurface;
182    }
183
184    /**
185     * Retrieves the last display surface sent to the provider.
186     *
187     * @return the surface.
188     */
189    public Surface getDisplaySurface() {
190        return mDisplaySurface;
191    }
192
193    /**
194     * Retrieves the last device orientation sent to the provider.
195     *
196     * @return the orientation.
197     */
198    public int getDeviceOrientation() {
199        return mDeviceOrientation;
200    }
201
202    /**
203     * Retrieves the last zoom sent to the provider.
204     *
205     * @return the zoom.
206     */
207    public float getZoom() {
208        return mZoom;
209    }
210
211    /**
212     * Retrieves the last session modify response sent to the provider.
213     *
214     * @return the session modify response.
215     */
216    public VideoProfile getSessionModifyResponse() {
217        return mSessionModifyResponse;
218    }
219
220    /**
221     * Retrieves the last pause image sent to the provider.
222     *
223     * @return the pause image URI.
224     */
225    public Uri getPauseImage() {
226        return mPauseImage;
227    }
228
229    /**
230     * Sends a mock session modify request via the provider.
231     */
232    public void sendMockSessionModifyRequest() {
233        super.receiveSessionModifyRequest(new VideoProfile(VideoProfile.STATE_BIDIRECTIONAL));
234    }
235
236    /**
237     * Sends a mock session event via the provider.
238     *
239     * @param event the event.
240     */
241    public void sendMockSessionEvent(int event) {
242        super.handleCallSessionEvent(event);
243    }
244
245    /**
246     * Sends a mock peer dimension change via the provider.
247     *
248     * @param width The new width.
249     * @param height The new height.
250     */
251    public void sendMockPeerDimensions(int width, int height) {
252        super.changePeerDimensions(width, height);
253    }
254
255    /**
256     * Sends a mock video quality change via the provider.
257     *
258     * @param videoQuality the video quality.
259     */
260    public void sendMockVideoQuality(int videoQuality) {
261        super.changeVideoQuality(videoQuality);
262    }
263}
264