Merge "Updates to TestconnectionService." into lmp-dev
diff --git a/tests/res/raw/test_pattern.mp4 b/tests/res/raw/test_pattern.mp4
new file mode 100644
index 0000000..401066f
--- /dev/null
+++ b/tests/res/raw/test_pattern.mp4
Binary files differ
diff --git a/tests/src/com/android/telecomm/testapps/TestConnectionService.java b/tests/src/com/android/telecomm/testapps/TestConnectionService.java
index 30cccc0..2d1084a 100644
--- a/tests/src/com/android/telecomm/testapps/TestConnectionService.java
+++ b/tests/src/com/android/telecomm/testapps/TestConnectionService.java
@@ -359,6 +359,9 @@
private void destroyCall(TestConnection connection) {
mCalls.remove(connection);
+ // Ensure any playing media and camera resources are released.
+ connection.stopAndCleanupMedia();
+
// Stops audio if there are no more calls.
if (mCalls.isEmpty() && mMediaPlayer != null && mMediaPlayer.isPlaying()) {
mMediaPlayer.stop();
@@ -455,6 +458,7 @@
// Assume all calls are video capable.
int capabilities = connection.getCallCapabilities();
capabilities |= CallCapabilities.SUPPORTS_VT_LOCAL;
+ capabilities |= CallCapabilities.ALL;
connection.setCallCapabilities(capabilities);
int videoState = isVideoCall ?
diff --git a/tests/src/com/android/telecomm/testapps/TestVideoCallProvider.java b/tests/src/com/android/telecomm/testapps/TestVideoCallProvider.java
index 1de06a0..2aca2fa 100644
--- a/tests/src/com/android/telecomm/testapps/TestVideoCallProvider.java
+++ b/tests/src/com/android/telecomm/testapps/TestVideoCallProvider.java
@@ -22,13 +22,16 @@
import com.android.telecomm.tests.R;
import android.content.Context;
+import android.graphics.SurfaceTexture;
import android.hardware.camera2.CameraAccessException;
import android.hardware.camera2.CameraCaptureSession;
+import android.hardware.camera2.CameraCharacteristics;
import android.hardware.camera2.CameraDevice;
import android.hardware.camera2.CameraManager;
import android.hardware.camera2.CaptureFailure;
import android.hardware.camera2.CaptureRequest;
import android.hardware.camera2.TotalCaptureResult;
+import android.hardware.camera2.params.StreamConfigurationMap;
import android.media.MediaPlayer;
import android.os.Handler;
import android.telecomm.CallCameraCapabilities;
@@ -37,8 +40,11 @@
import android.telecomm.VideoCallProfile;
import android.text.TextUtils;
import android.util.Log;
+import android.util.Size;
import android.view.Surface;
+import java.lang.IllegalArgumentException;
+import java.lang.String;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
@@ -47,7 +53,7 @@
* Implements the VideoCallProvider.
*/
public class TestVideoCallProvider extends ConnectionService.VideoCallProvider {
- private CallCameraCapabilities mCapabilities;
+ private CallCameraCapabilities mCameraCapabilities;
private Random random;
private Surface mDisplaySurface;
private Surface mPreviewSurface;
@@ -66,7 +72,6 @@
public TestVideoCallProvider(Context context) {
mContext = context;
- mCapabilities = new CallCameraCapabilities(false /* zoomSupported */, 0 /* maxZoom */);
random = new Random();
mCameraManager = (CameraManager) context.getSystemService(Context.CAMERA_SERVICE);
}
@@ -75,20 +80,22 @@
public void onSetCamera(String cameraId) {
log("Set camera to " + cameraId);
mCameraId = cameraId;
- if (mPreviewSurface != null && mCameraId != null) {
- startCamera(cameraId);
- }
+
+ stopCamera();
+ // Get the capabilities of the camera and send it back to the in-call UI.
+ setCameraCapabilities(mCameraId);
+ changeCameraCapabilities(mCameraCapabilities);
}
@Override
public void onSetPreviewSurface(Surface surface) {
log("Set preview surface " + (surface == null ? "unset" : "set"));
- mPreviewSurface = surface;
-
- if (mPreviewSurface == null) {
+ if (mPreviewSurface != null) {
stopCamera();
}
+ mPreviewSurface = surface;
+
if (!TextUtils.isEmpty(mCameraId) && mPreviewSurface != null) {
startCamera(mCameraId);
}
@@ -101,7 +108,8 @@
if (mDisplaySurface != null) {
if (mIncomingMediaPlayer == null) {
- mIncomingMediaPlayer = createMediaPlayer(mDisplaySurface, R.raw.test_video);
+ // For a Rick-Rolling good time use R.raw.test_video
+ mIncomingMediaPlayer = createMediaPlayer(mDisplaySurface, R.raw.test_pattern);
}
mIncomingMediaPlayer.setSurface(mDisplaySurface);
if (!mIncomingMediaPlayer.isPlaying()) {
@@ -117,7 +125,7 @@
@Override
public void onSetDeviceOrientation(int rotation) {
- log("Set device orientation");
+ log("Set device orientation " + rotation);
}
/**
@@ -127,14 +135,6 @@
@Override
public void onSetZoom(float value) {
log("Set zoom to " + value);
-
- if (value <= 0) {
- mCapabilities = new CallCameraCapabilities(false /* zoomSupported */, 0 /* maxZoom */);
- } else {
- mCapabilities = new CallCameraCapabilities(true /* zoomSupported */, value);
- }
-
- changeCameraCapabilities(mCapabilities);
}
/**
@@ -164,7 +164,7 @@
@Override
public void onRequestCameraCapabilities() {
log("Requested camera capabilities");
- changeCameraCapabilities(mCapabilities);
+ changeCameraCapabilities(mCameraCapabilities);
}
/**
@@ -307,4 +307,30 @@
CaptureFailure failure) {
}
}
+
+ /**
+ * Uses the camera manager to retrieve the camera capabilities for the chosen camera.
+ *
+ * @param cameraId The camera ID to get the capabilities for.
+ */
+ private void setCameraCapabilities(String cameraId) {
+ CameraManager cameraManager = (CameraManager) mContext.getSystemService(
+ Context.CAMERA_SERVICE);
+
+ CameraCharacteristics c = null;
+ try {
+ c = cameraManager.getCameraCharacteristics(cameraId);
+ } catch (IllegalArgumentException | CameraAccessException e) {
+ // Ignoring camera problems.
+ }
+ if (c != null) {
+ // Get the video size for the camera
+ StreamConfigurationMap map = c.get(
+ CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP);
+ Size previewSize = map.getOutputSizes(SurfaceTexture.class)[0];
+
+ mCameraCapabilities = new CallCameraCapabilities(true, 1.0f, previewSize.getWidth(),
+ previewSize.getHeight());
+ }
+ }
}