summaryrefslogtreecommitdiffstats
path: root/telecomm/java/android/telecom/VideoCallImpl.java
diff options
context:
space:
mode:
authorTyler Gunn <tgunn@google.com>2014-09-12 22:16:17 -0700
committerTyler Gunn <tgunn@google.com>2014-09-12 22:16:17 -0700
commitef9f6f957d897ea0ed82114185b8fa3fefd4917b (patch)
tree4aff42f3d54f4454e598f27829c4983ba808afa7 /telecomm/java/android/telecom/VideoCallImpl.java
parent4b5c2d3cfc8aec4ab90097734a3556a0d0c0e68d (diff)
downloadframeworks_base-ef9f6f957d897ea0ed82114185b8fa3fefd4917b.zip
frameworks_base-ef9f6f957d897ea0ed82114185b8fa3fefd4917b.tar.gz
frameworks_base-ef9f6f957d897ea0ed82114185b8fa3fefd4917b.tar.bz2
Renaming Telecomm to Telecom.
- Changing package from android.telecomm to android.telecom - Changing package from com.android.telecomm to com.android.server.telecomm. - Renaming TelecommManager to TelecomManager. Bug: 17364651 Change-Id: I192cb5d189f55db012ea72ee82ccc5aedbc21638
Diffstat (limited to 'telecomm/java/android/telecom/VideoCallImpl.java')
-rw-r--r--telecomm/java/android/telecom/VideoCallImpl.java247
1 files changed, 247 insertions, 0 deletions
diff --git a/telecomm/java/android/telecom/VideoCallImpl.java b/telecomm/java/android/telecom/VideoCallImpl.java
new file mode 100644
index 0000000..925058e
--- /dev/null
+++ b/telecomm/java/android/telecom/VideoCallImpl.java
@@ -0,0 +1,247 @@
+/*
+ * Copyright (C) 2014 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+
+package android.telecom;
+
+import android.os.Handler;
+import android.os.IBinder;
+import android.os.Looper;
+import android.os.Message;
+import android.os.RemoteException;
+import android.telecom.InCallService.VideoCall;
+import android.view.Surface;
+
+import com.android.internal.os.SomeArgs;
+import com.android.internal.telecom.IVideoCallback;
+import com.android.internal.telecom.IVideoProvider;
+
+/**
+ * Implementation of a Video Call, which allows InCallUi to communicate commands to the underlying
+ * {@link Connection.VideoProvider}, and direct callbacks from the
+ * {@link Connection.VideoProvider} to the appropriate {@link VideoCall.Listener}.
+ *
+ * {@hide}
+ */
+public class VideoCallImpl extends VideoCall {
+ private static final int MSG_RECEIVE_SESSION_MODIFY_REQUEST = 1;
+ private static final int MSG_RECEIVE_SESSION_MODIFY_RESPONSE = 2;
+ private static final int MSG_HANDLE_CALL_SESSION_EVENT = 3;
+ private static final int MSG_CHANGE_PEER_DIMENSIONS = 4;
+ private static final int MSG_CHANGE_CALL_DATA_USAGE = 5;
+ private static final int MSG_CHANGE_CAMERA_CAPABILITIES = 6;
+
+ private final IVideoProvider mVideoProvider;
+ private final VideoCallListenerBinder mBinder;
+ private VideoCall.Listener mVideoCallListener;
+
+ private IBinder.DeathRecipient mDeathRecipient = new IBinder.DeathRecipient() {
+ @Override
+ public void binderDied() {
+ mVideoProvider.asBinder().unlinkToDeath(this, 0);
+ }
+ };
+
+ /**
+ * IVideoCallback stub implementation.
+ */
+ private final class VideoCallListenerBinder extends IVideoCallback.Stub {
+ @Override
+ public void receiveSessionModifyRequest(VideoProfile videoProfile) {
+ mHandler.obtainMessage(MSG_RECEIVE_SESSION_MODIFY_REQUEST,
+ videoProfile).sendToTarget();
+ }
+
+ @Override
+ public void receiveSessionModifyResponse(int status, VideoProfile requestProfile,
+ VideoProfile responseProfile) {
+ SomeArgs args = SomeArgs.obtain();
+ args.arg1 = status;
+ args.arg2 = requestProfile;
+ args.arg3 = responseProfile;
+ mHandler.obtainMessage(MSG_RECEIVE_SESSION_MODIFY_RESPONSE, args).sendToTarget();
+ }
+
+ @Override
+ public void handleCallSessionEvent(int event) {
+ mHandler.obtainMessage(MSG_HANDLE_CALL_SESSION_EVENT, event).sendToTarget();
+ }
+
+ @Override
+ public void changePeerDimensions(int width, int height) {
+ SomeArgs args = SomeArgs.obtain();
+ args.arg1 = width;
+ args.arg2 = height;
+ mHandler.obtainMessage(MSG_CHANGE_PEER_DIMENSIONS, args).sendToTarget();
+ }
+
+ @Override
+ public void changeCallDataUsage(int dataUsage) {
+ mHandler.obtainMessage(MSG_CHANGE_CALL_DATA_USAGE, dataUsage).sendToTarget();
+ }
+
+ @Override
+ public void changeCameraCapabilities(CameraCapabilities cameraCapabilities) {
+ mHandler.obtainMessage(MSG_CHANGE_CAMERA_CAPABILITIES,
+ cameraCapabilities).sendToTarget();
+ }
+ }
+
+ /** Default handler used to consolidate binder method calls onto a single thread. */
+ private final Handler mHandler = new Handler(Looper.getMainLooper()) {
+ @Override
+ public void handleMessage(Message msg) {
+ if (mVideoCallListener == null) {
+ return;
+ }
+
+ SomeArgs args;
+ switch (msg.what) {
+ case MSG_RECEIVE_SESSION_MODIFY_REQUEST:
+ mVideoCallListener.onSessionModifyRequestReceived((VideoProfile) msg.obj);
+ break;
+ case MSG_RECEIVE_SESSION_MODIFY_RESPONSE:
+ args = (SomeArgs) msg.obj;
+ try {
+ int status = (int) args.arg1;
+ VideoProfile requestProfile = (VideoProfile) args.arg2;
+ VideoProfile responseProfile = (VideoProfile) args.arg3;
+
+ mVideoCallListener.onSessionModifyResponseReceived(
+ status, requestProfile, responseProfile);
+ } finally {
+ args.recycle();
+ }
+ break;
+ case MSG_HANDLE_CALL_SESSION_EVENT:
+ mVideoCallListener.onCallSessionEvent((int) msg.obj);
+ break;
+ case MSG_CHANGE_PEER_DIMENSIONS:
+ args = (SomeArgs) msg.obj;
+ try {
+ int width = (int) args.arg1;
+ int height = (int) args.arg2;
+ mVideoCallListener.onPeerDimensionsChanged(width, height);
+ } finally {
+ args.recycle();
+ }
+ break;
+ case MSG_CHANGE_CALL_DATA_USAGE:
+ mVideoCallListener.onCallDataUsageChanged(msg.arg1);
+ break;
+ case MSG_CHANGE_CAMERA_CAPABILITIES:
+ mVideoCallListener.onCameraCapabilitiesChanged(
+ (CameraCapabilities) msg.obj);
+ break;
+ default:
+ break;
+ }
+ }
+ };
+
+ /** {@hide} */
+ VideoCallImpl(IVideoProvider videoProvider) throws RemoteException {
+ mVideoProvider = videoProvider;
+ mVideoProvider.asBinder().linkToDeath(mDeathRecipient, 0);
+
+ mBinder = new VideoCallListenerBinder();
+ mVideoProvider.setVideoCallback(mBinder);
+ }
+
+ /** {@inheritDoc} */
+ public void setVideoCallListener(VideoCall.Listener videoCallListener) {
+ mVideoCallListener = videoCallListener;
+ }
+
+ /** {@inheritDoc} */
+ public void setCamera(String cameraId) {
+ try {
+ mVideoProvider.setCamera(cameraId);
+ } catch (RemoteException e) {
+ }
+ }
+
+ /** {@inheritDoc} */
+ public void setPreviewSurface(Surface surface) {
+ try {
+ mVideoProvider.setPreviewSurface(surface);
+ } catch (RemoteException e) {
+ }
+ }
+
+ /** {@inheritDoc} */
+ public void setDisplaySurface(Surface surface) {
+ try {
+ mVideoProvider.setDisplaySurface(surface);
+ } catch (RemoteException e) {
+ }
+ }
+
+ /** {@inheritDoc} */
+ public void setDeviceOrientation(int rotation) {
+ try {
+ mVideoProvider.setDeviceOrientation(rotation);
+ } catch (RemoteException e) {
+ }
+ }
+
+ /** {@inheritDoc} */
+ public void setZoom(float value) {
+ try {
+ mVideoProvider.setZoom(value);
+ } catch (RemoteException e) {
+ }
+ }
+
+ /** {@inheritDoc} */
+ public void sendSessionModifyRequest(VideoProfile requestProfile) {
+ try {
+ mVideoProvider.sendSessionModifyRequest(requestProfile);
+ } catch (RemoteException e) {
+ }
+ }
+
+ /** {@inheritDoc} */
+ public void sendSessionModifyResponse(VideoProfile responseProfile) {
+ try {
+ mVideoProvider.sendSessionModifyResponse(responseProfile);
+ } catch (RemoteException e) {
+ }
+ }
+
+ /** {@inheritDoc} */
+ public void requestCameraCapabilities() {
+ try {
+ mVideoProvider.requestCameraCapabilities();
+ } catch (RemoteException e) {
+ }
+ }
+
+ /** {@inheritDoc} */
+ public void requestCallDataUsage() {
+ try {
+ mVideoProvider.requestCallDataUsage();
+ } catch (RemoteException e) {
+ }
+ }
+
+ /** {@inheritDoc} */
+ public void setPauseImage(String uri) {
+ try {
+ mVideoProvider.setPauseImage(uri);
+ } catch (RemoteException e) {
+ }
+ }
+} \ No newline at end of file