121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger/* 221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * Copyright (C) 2017 The Android Open Source Project 321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * 421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * Licensed under the Apache License, Version 2.0 (the "License"); 521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * you may not use this file except in compliance with the License. 621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * You may obtain a copy of the License at 721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * 821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * http://www.apache.org/licenses/LICENSE-2.0 921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * 1021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * Unless required by applicable law or agreed to in writing, software 1121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * distributed under the License is distributed on an "AS IS" BASIS, 1221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * See the License for the specific language governing permissions and 1421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * limitations under the License 1521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger */ 1621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 1721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebingerpackage com.android.ims.internal; 1821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 1921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebingerimport android.net.Uri; 2021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebingerimport android.os.Handler; 2121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebingerimport android.os.Looper; 2221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebingerimport android.os.Message; 2321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebingerimport android.os.RemoteException; 2421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebingerimport android.telecom.Connection; 2521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebingerimport android.telecom.VideoProfile; 2621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebingerimport android.telecom.VideoProfile.CameraCapabilities; 2721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebingerimport android.view.Surface; 2821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 2921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebingerimport com.android.internal.os.SomeArgs; 3021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 3121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger/** 3221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * @hide 3321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger */ 3421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebingerpublic abstract class ImsVideoCallProvider { 3521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger private static final int MSG_SET_CALLBACK = 1; 3621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger private static final int MSG_SET_CAMERA = 2; 3721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger private static final int MSG_SET_PREVIEW_SURFACE = 3; 3821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger private static final int MSG_SET_DISPLAY_SURFACE = 4; 3921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger private static final int MSG_SET_DEVICE_ORIENTATION = 5; 4021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger private static final int MSG_SET_ZOOM = 6; 4121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger private static final int MSG_SEND_SESSION_MODIFY_REQUEST = 7; 4221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger private static final int MSG_SEND_SESSION_MODIFY_RESPONSE = 8; 4321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger private static final int MSG_REQUEST_CAMERA_CAPABILITIES = 9; 4421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger private static final int MSG_REQUEST_CALL_DATA_USAGE = 10; 4521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger private static final int MSG_SET_PAUSE_IMAGE = 11; 4621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 4721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger private final ImsVideoCallProviderBinder mBinder; 4821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 4921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger private IImsVideoCallCallback mCallback; 5021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 5121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger /** 5221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * Default handler used to consolidate binder method calls onto a single thread. 5321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger */ 5421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger private final Handler mProviderHandler = new Handler(Looper.getMainLooper()) { 5521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger @Override 5621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public void handleMessage(Message msg) { 5721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger switch (msg.what) { 5821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger case MSG_SET_CALLBACK: 5921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger mCallback = (IImsVideoCallCallback) msg.obj; 6021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger break; 6121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger case MSG_SET_CAMERA: 6221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger { 6321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger SomeArgs args = (SomeArgs) msg.obj; 6421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger try { 6521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger onSetCamera((String) args.arg1); 6621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger onSetCamera((String) args.arg1, args.argi1); 6721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } finally { 6821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger args.recycle(); 6921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 7021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger break; 7121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 7221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger case MSG_SET_PREVIEW_SURFACE: 7321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger onSetPreviewSurface((Surface) msg.obj); 7421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger break; 7521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger case MSG_SET_DISPLAY_SURFACE: 7621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger onSetDisplaySurface((Surface) msg.obj); 7721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger break; 7821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger case MSG_SET_DEVICE_ORIENTATION: 7921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger onSetDeviceOrientation(msg.arg1); 8021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger break; 8121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger case MSG_SET_ZOOM: 8221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger onSetZoom((Float) msg.obj); 8321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger break; 8421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger case MSG_SEND_SESSION_MODIFY_REQUEST: { 8521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger SomeArgs args = (SomeArgs) msg.obj; 8621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger try { 8721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger VideoProfile fromProfile = (VideoProfile) args.arg1; 8821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger VideoProfile toProfile = (VideoProfile) args.arg2; 8921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 9021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger onSendSessionModifyRequest(fromProfile, toProfile); 9121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } finally { 9221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger args.recycle(); 9321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 9421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger break; 9521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 9621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger case MSG_SEND_SESSION_MODIFY_RESPONSE: 9721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger onSendSessionModifyResponse((VideoProfile) msg.obj); 9821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger break; 9921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger case MSG_REQUEST_CAMERA_CAPABILITIES: 10021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger onRequestCameraCapabilities(); 10121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger break; 10221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger case MSG_REQUEST_CALL_DATA_USAGE: 10321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger onRequestCallDataUsage(); 10421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger break; 10521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger case MSG_SET_PAUSE_IMAGE: 10621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger onSetPauseImage((Uri) msg.obj); 10721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger break; 10821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger default: 10921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger break; 11021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 11121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 11221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger }; 11321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 11421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger /** 11521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * IImsVideoCallProvider stub implementation. 11621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger */ 11721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger private final class ImsVideoCallProviderBinder extends IImsVideoCallProvider.Stub { 11821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public void setCallback(IImsVideoCallCallback callback) { 11921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger mProviderHandler.obtainMessage(MSG_SET_CALLBACK, callback).sendToTarget(); 12021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 12121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 12221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public void setCamera(String cameraId, int uid) { 12321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger SomeArgs args = SomeArgs.obtain(); 12421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger args.arg1 = cameraId; 12521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger args.argi1 = uid; 12621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger mProviderHandler.obtainMessage(MSG_SET_CAMERA, args).sendToTarget(); 12721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 12821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 12921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public void setPreviewSurface(Surface surface) { 13021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger mProviderHandler.obtainMessage(MSG_SET_PREVIEW_SURFACE, surface).sendToTarget(); 13121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 13221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 13321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public void setDisplaySurface(Surface surface) { 13421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger mProviderHandler.obtainMessage(MSG_SET_DISPLAY_SURFACE, surface).sendToTarget(); 13521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 13621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 13721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public void setDeviceOrientation(int rotation) { 13821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger mProviderHandler.obtainMessage(MSG_SET_DEVICE_ORIENTATION, rotation, 0).sendToTarget(); 13921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 14021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 14121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public void setZoom(float value) { 14221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger mProviderHandler.obtainMessage(MSG_SET_ZOOM, value).sendToTarget(); 14321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 14421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 14521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public void sendSessionModifyRequest(VideoProfile fromProfile, VideoProfile toProfile) { 14621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger SomeArgs args = SomeArgs.obtain(); 14721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger args.arg1 = fromProfile; 14821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger args.arg2 = toProfile; 14921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger mProviderHandler.obtainMessage(MSG_SEND_SESSION_MODIFY_REQUEST, args).sendToTarget(); 15021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 15121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 15221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public void sendSessionModifyResponse(VideoProfile responseProfile) { 15321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger mProviderHandler.obtainMessage( 15421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger MSG_SEND_SESSION_MODIFY_RESPONSE, responseProfile).sendToTarget(); 15521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 15621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 15721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public void requestCameraCapabilities() { 15821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger mProviderHandler.obtainMessage(MSG_REQUEST_CAMERA_CAPABILITIES).sendToTarget(); 15921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 16021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 16121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public void requestCallDataUsage() { 16221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger mProviderHandler.obtainMessage(MSG_REQUEST_CALL_DATA_USAGE).sendToTarget(); 16321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 16421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 16521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public void setPauseImage(Uri uri) { 16621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger mProviderHandler.obtainMessage(MSG_SET_PAUSE_IMAGE, uri).sendToTarget(); 16721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 16821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 16921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 17021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public ImsVideoCallProvider() { 17121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger mBinder = new ImsVideoCallProviderBinder(); 17221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 17321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 17421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger /** 17521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * Returns binder object which can be used across IPC methods. 17621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger */ 17721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public final IImsVideoCallProvider getInterface() { 17821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger return mBinder; 17921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 18021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 18121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger /** @see Connection.VideoProvider#onSetCamera */ 18221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public abstract void onSetCamera(String cameraId); 18321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 18421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger /** 18521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * Similar to {@link #onSetCamera(String)}, except includes the UID of the calling process which 18621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * the IMS service uses when opening the camera. This ensures camera permissions are verified 18721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * by the camera service. 18821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * 18921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * @param cameraId The id of the camera to be opened. 19021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * @param uid The uid of the caller, used when opening the camera for permission verification. 19121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger * @see Connection.VideoProvider#onSetCamera 19221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger */ 19321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public void onSetCamera(String cameraId, int uid) { 19421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 19521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 19621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger /** @see Connection.VideoProvider#onSetPreviewSurface */ 19721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public abstract void onSetPreviewSurface(Surface surface); 19821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 19921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger /** @see Connection.VideoProvider#onSetDisplaySurface */ 20021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public abstract void onSetDisplaySurface(Surface surface); 20121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 20221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger /** @see Connection.VideoProvider#onSetDeviceOrientation */ 20321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public abstract void onSetDeviceOrientation(int rotation); 20421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 20521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger /** @see Connection.VideoProvider#onSetZoom */ 20621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public abstract void onSetZoom(float value); 20721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 20821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger /** @see Connection.VideoProvider#onSendSessionModifyRequest */ 20921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public abstract void onSendSessionModifyRequest(VideoProfile fromProfile, 21021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger VideoProfile toProfile); 21121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 21221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger /** @see Connection.VideoProvider#onSendSessionModifyResponse */ 21321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public abstract void onSendSessionModifyResponse(VideoProfile responseProfile); 21421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 21521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger /** @see Connection.VideoProvider#onRequestCameraCapabilities */ 21621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public abstract void onRequestCameraCapabilities(); 21721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 21821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger /** @see Connection.VideoProvider#onRequestCallDataUsage */ 21921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public abstract void onRequestCallDataUsage(); 22021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 22121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger /** @see Connection.VideoProvider#onSetPauseImage */ 22221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public abstract void onSetPauseImage(Uri uri); 22321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 22421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger /** @see Connection.VideoProvider#receiveSessionModifyRequest */ 22521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public void receiveSessionModifyRequest(VideoProfile VideoProfile) { 22621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger if (mCallback != null) { 22721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger try { 22821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger mCallback.receiveSessionModifyRequest(VideoProfile); 22921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } catch (RemoteException ignored) { 23021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 23121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 23221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 23321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 23421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger /** @see Connection.VideoProvider#receiveSessionModifyResponse */ 23521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public void receiveSessionModifyResponse( 23621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger int status, VideoProfile requestedProfile, VideoProfile responseProfile) { 23721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger if (mCallback != null) { 23821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger try { 23921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger mCallback.receiveSessionModifyResponse(status, requestedProfile, responseProfile); 24021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } catch (RemoteException ignored) { 24121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 24221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 24321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 24421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 24521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger /** @see Connection.VideoProvider#handleCallSessionEvent */ 24621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public void handleCallSessionEvent(int event) { 24721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger if (mCallback != null) { 24821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger try { 24921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger mCallback.handleCallSessionEvent(event); 25021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } catch (RemoteException ignored) { 25121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 25221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 25321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 25421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 25521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger /** @see Connection.VideoProvider#changePeerDimensions */ 25621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public void changePeerDimensions(int width, int height) { 25721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger if (mCallback != null) { 25821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger try { 25921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger mCallback.changePeerDimensions(width, height); 26021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } catch (RemoteException ignored) { 26121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 26221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 26321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 26421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 26521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger /** @see Connection.VideoProvider#changeCallDataUsage */ 26621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public void changeCallDataUsage(long dataUsage) { 26721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger if (mCallback != null) { 26821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger try { 26921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger mCallback.changeCallDataUsage(dataUsage); 27021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } catch (RemoteException ignored) { 27121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 27221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 27321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 27421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 27521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger /** @see Connection.VideoProvider#changeCameraCapabilities */ 27621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public void changeCameraCapabilities(CameraCapabilities CameraCapabilities) { 27721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger if (mCallback != null) { 27821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger try { 27921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger mCallback.changeCameraCapabilities(CameraCapabilities); 28021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } catch (RemoteException ignored) { 28121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 28221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 28321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 28421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger 28521013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger /** @see Connection.VideoProvider#changeVideoQuality */ 28621013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger public void changeVideoQuality(int videoQuality) { 28721013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger if (mCallback != null) { 28821013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger try { 28921013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger mCallback.changeVideoQuality(videoQuality); 29021013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } catch (RemoteException ignored) { 29121013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 29221013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 29321013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger } 29421013dcf1b1c0c740efba863b6b4962fe3da9095Brad Ebinger} 295