101b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee/*
201b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee * Copyright (C) 2014 The Android Open Source Project
301b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee *
401b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee * Licensed under the Apache License, Version 2.0 (the "License");
501b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee * you may not use this file except in compliance with the License.
601b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee * You may obtain a copy of the License at
701b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee *
801b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee *      http://www.apache.org/licenses/LICENSE-2.0
901b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee *
1001b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee * Unless required by applicable law or agreed to in writing, software
1101b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee * distributed under the License is distributed on an "AS IS" BASIS,
1201b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1301b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee * See the License for the specific language governing permissions and
1401b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee * limitations under the License
1501b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee */
1601b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee
1701b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Leepackage com.android.ims.internal;
1801b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee
1901b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Leeimport android.os.Handler;
2001b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Leeimport android.os.IBinder;
2101b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Leeimport android.os.Looper;
2201b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Leeimport android.os.Message;
2301b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Leeimport android.os.RemoteException;
243ddaa6ec08d417d2848775ad3b5b01b865a9c891Tyler Gunnimport android.telecom.CameraCapabilities;
253ddaa6ec08d417d2848775ad3b5b01b865a9c891Tyler Gunnimport android.telecom.Connection;
263ddaa6ec08d417d2848775ad3b5b01b865a9c891Tyler Gunnimport android.telecom.VideoProfile;
2701b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Leeimport android.view.Surface;
2801b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee
2901b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Leeimport com.android.internal.os.SomeArgs;
3001b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee
3101b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee/**
32ed7fbd60ee7f2d72d7bdf78718663774f526a1bcIhab Awad * Subclass implementation of {@link Connection.VideoProvider}. This intermediates and
3301b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee * communicates with the actual implementation of the video call provider in the IMS service; it is
3401b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee * in essence, a wrapper around the IMS's video call provider implementation.
3501b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee *
3601b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee * This class maintains a binder by which the ImsVideoCallProvider's implementation can communicate
3701b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee * its intent to invoke callbacks. In this class, the message across this binder is handled, and
3801b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee * the superclass's methods are used to execute the callbacks.
3901b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee *
4001b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee * @hide
4101b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee */
42ed7fbd60ee7f2d72d7bdf78718663774f526a1bcIhab Awadpublic class ImsVideoCallProviderWrapper extends Connection.VideoProvider {
4301b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee    private static final int MSG_RECEIVE_SESSION_MODIFY_REQUEST = 1;
4401b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee    private static final int MSG_RECEIVE_SESSION_MODIFY_RESPONSE = 2;
4501b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee    private static final int MSG_HANDLE_CALL_SESSION_EVENT = 3;
4601b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee    private static final int MSG_CHANGE_PEER_DIMENSIONS = 4;
4701b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee    private static final int MSG_CHANGE_CALL_DATA_USAGE = 5;
4801b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee    private static final int MSG_CHANGE_CAMERA_CAPABILITIES = 6;
4901b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee
5001b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee    private final IImsVideoCallProvider mVideoCallProvider;
5101b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee    private final ImsVideoCallCallback mBinder;
5201b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee
5301b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee    private IBinder.DeathRecipient mDeathRecipient = new IBinder.DeathRecipient() {
5401b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee        @Override
5501b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee        public void binderDied() {
5601b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee            mVideoCallProvider.asBinder().unlinkToDeath(this, 0);
5701b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee        }
5801b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee    };
5901b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee
6001b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee    /**
6101b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee     * IImsVideoCallCallback stub implementation.
6201b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee     */
6301b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee    private final class ImsVideoCallCallback extends IImsVideoCallCallback.Stub {
6401b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee        @Override
65ed7fbd60ee7f2d72d7bdf78718663774f526a1bcIhab Awad        public void receiveSessionModifyRequest(VideoProfile VideoProfile) {
6601b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee            mHandler.obtainMessage(MSG_RECEIVE_SESSION_MODIFY_REQUEST,
67ed7fbd60ee7f2d72d7bdf78718663774f526a1bcIhab Awad                    VideoProfile).sendToTarget();
6801b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee        }
6901b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee
7001b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee        @Override
7101b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee        public void receiveSessionModifyResponse(
72ed7fbd60ee7f2d72d7bdf78718663774f526a1bcIhab Awad                int status, VideoProfile requestProfile, VideoProfile responseProfile) {
7301b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee            SomeArgs args = SomeArgs.obtain();
7401b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee            args.arg1 = status;
7501b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee            args.arg2 = requestProfile;
7601b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee            args.arg3 = responseProfile;
7701b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee            mHandler.obtainMessage(MSG_RECEIVE_SESSION_MODIFY_RESPONSE, args).sendToTarget();
7801b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee        }
7901b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee
8001b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee        @Override
8101b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee        public void handleCallSessionEvent(int event) {
8201b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee            mHandler.obtainMessage(MSG_HANDLE_CALL_SESSION_EVENT, event).sendToTarget();
8301b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee        }
8401b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee
8501b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee        @Override
8601b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee        public void changePeerDimensions(int width, int height) {
8701b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee            SomeArgs args = SomeArgs.obtain();
8801b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee            args.arg1 = width;
8901b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee            args.arg2 = height;
9001b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee            mHandler.obtainMessage(MSG_CHANGE_PEER_DIMENSIONS, args).sendToTarget();
9101b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee        }
9201b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee
9301b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee        @Override
9401b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee        public void changeCallDataUsage(int dataUsage) {
9501b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee            mHandler.obtainMessage(MSG_CHANGE_CALL_DATA_USAGE, dataUsage).sendToTarget();
9601b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee        }
9701b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee
9801b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee        @Override
99ed7fbd60ee7f2d72d7bdf78718663774f526a1bcIhab Awad        public void changeCameraCapabilities(CameraCapabilities cameraCapabilities) {
10001b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee            mHandler.obtainMessage(MSG_CHANGE_CAMERA_CAPABILITIES,
10101b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee                    cameraCapabilities).sendToTarget();
10201b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee        }
10301b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee    }
10401b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee
10501b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee    /** Default handler used to consolidate binder method calls onto a single thread. */
10601b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee    private final Handler mHandler = new Handler(Looper.getMainLooper()) {
10701b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee        @Override
10801b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee        public void handleMessage(Message msg) {
10901b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee            SomeArgs args;
11001b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee            switch (msg.what) {
11101b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee                case MSG_RECEIVE_SESSION_MODIFY_REQUEST:
112ed7fbd60ee7f2d72d7bdf78718663774f526a1bcIhab Awad                    receiveSessionModifyRequest((VideoProfile) msg.obj);
11301b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee                    break;
11401b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee                case MSG_RECEIVE_SESSION_MODIFY_RESPONSE:
11501b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee                    args = (SomeArgs) msg.obj;
11601b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee                    try {
11701b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee                        int status = (int) args.arg1;
118ed7fbd60ee7f2d72d7bdf78718663774f526a1bcIhab Awad                        VideoProfile requestProfile = (VideoProfile) args.arg2;
119ed7fbd60ee7f2d72d7bdf78718663774f526a1bcIhab Awad                        VideoProfile responseProfile = (VideoProfile) args.arg3;
12001b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee
12101b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee                        receiveSessionModifyResponse(status, requestProfile, responseProfile);
12201b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee                    } finally {
12301b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee                        args.recycle();
12401b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee                    }
12501b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee                    break;
12601b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee                case MSG_HANDLE_CALL_SESSION_EVENT:
12701b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee                    handleCallSessionEvent((int) msg.obj);
12801b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee                    break;
12901b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee                case MSG_CHANGE_PEER_DIMENSIONS:
13001b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee                    args = (SomeArgs) msg.obj;
13101b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee                    try {
13201b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee                        int width = (int) args.arg1;
13301b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee                        int height = (int) args.arg2;
13401b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee                        changePeerDimensions(width, height);
13501b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee                    } finally {
13601b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee                        args.recycle();
13701b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee                    }
13801b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee                    break;
13901b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee                case MSG_CHANGE_CALL_DATA_USAGE:
14001b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee                    changeCallDataUsage(msg.arg1);
14101b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee                    break;
14201b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee                case MSG_CHANGE_CAMERA_CAPABILITIES:
143ed7fbd60ee7f2d72d7bdf78718663774f526a1bcIhab Awad                    changeCameraCapabilities((CameraCapabilities) msg.obj);
14401b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee                    break;
14501b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee                default:
14601b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee                    break;
14701b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee            }
14801b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee        }
14901b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee    };
15001b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee
15101b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee    /**
15201b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee     * Instantiates an instance of the ImsVideoCallProvider, taking in the binder for IMS's video
15301b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee     * call provider implementation.
15401b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee     *
155ed7fbd60ee7f2d72d7bdf78718663774f526a1bcIhab Awad     * @param VideoProvider
15601b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee     */
157ed7fbd60ee7f2d72d7bdf78718663774f526a1bcIhab Awad    public ImsVideoCallProviderWrapper(IImsVideoCallProvider VideoProvider)
15801b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee            throws RemoteException {
159ed7fbd60ee7f2d72d7bdf78718663774f526a1bcIhab Awad        mVideoCallProvider = VideoProvider;
16001b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee        mVideoCallProvider.asBinder().linkToDeath(mDeathRecipient, 0);
16101b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee
16201b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee        mBinder = new ImsVideoCallCallback();
16301b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee        mVideoCallProvider.setCallback(mBinder);
16401b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee    }
16501b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee
16601b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee    /** @inheritDoc */
16701b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee    public void onSetCamera(String cameraId) {
16801b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee        try {
16901b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee            mVideoCallProvider.setCamera(cameraId);
17001b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee        } catch (RemoteException e) {
17101b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee        }
17201b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee    }
17301b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee
17401b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee    /** @inheritDoc */
17501b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee    public void onSetPreviewSurface(Surface surface) {
17601b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee        try {
17701b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee            mVideoCallProvider.setPreviewSurface(surface);
17801b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee        } catch (RemoteException e) {
17901b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee        }
18001b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee    }
18101b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee
18201b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee    /** @inheritDoc */
18301b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee    public void onSetDisplaySurface(Surface surface) {
18401b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee        try {
18501b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee            mVideoCallProvider.setDisplaySurface(surface);
18601b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee        } catch (RemoteException e) {
18701b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee        }
18801b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee    }
18901b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee
19001b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee    /** @inheritDoc */
19101b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee    public void onSetDeviceOrientation(int rotation) {
19201b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee        try {
19301b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee            mVideoCallProvider.setDeviceOrientation(rotation);
19401b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee        } catch (RemoteException e) {
19501b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee        }
19601b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee    }
19701b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee
19801b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee    /** @inheritDoc */
19901b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee    public void onSetZoom(float value) {
20001b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee        try {
20101b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee            mVideoCallProvider.setZoom(value);
20201b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee        } catch (RemoteException e) {
20301b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee        }
20401b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee    }
20501b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee
20601b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee    /** @inheritDoc */
207ed7fbd60ee7f2d72d7bdf78718663774f526a1bcIhab Awad    public void onSendSessionModifyRequest(VideoProfile requestProfile) {
20801b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee        try {
20901b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee            mVideoCallProvider.sendSessionModifyRequest(requestProfile);
21001b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee        } catch (RemoteException e) {
21101b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee        }
21201b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee    }
21301b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee
21401b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee    /** @inheritDoc */
215ed7fbd60ee7f2d72d7bdf78718663774f526a1bcIhab Awad    public void onSendSessionModifyResponse(VideoProfile responseProfile) {
21601b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee        try {
21701b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee            mVideoCallProvider.sendSessionModifyResponse(responseProfile);
21801b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee        } catch (RemoteException e) {
21901b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee        }
22001b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee    }
22101b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee
22201b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee    /** @inheritDoc */
22301b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee    public void onRequestCameraCapabilities() {
22401b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee        try {
22501b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee            mVideoCallProvider.requestCameraCapabilities();
22601b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee        } catch (RemoteException e) {
22701b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee        }
22801b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee    }
22901b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee
23001b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee    /** @inheritDoc */
23101b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee    public void onRequestCallDataUsage() {
23201b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee        try {
23301b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee            mVideoCallProvider.requestCallDataUsage();
23401b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee        } catch (RemoteException e) {
23501b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee        }
23601b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee    }
23701b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee
23801b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee    /** @inheritDoc */
23901b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee    public void onSetPauseImage(String uri) {
24001b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee        try {
24101b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee            mVideoCallProvider.setPauseImage(uri);
24201b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee        } catch (RemoteException e) {
24301b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee        }
24401b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee    }
24501b4ea445b5cdc6c1b32153d4f0216f429ede8afAndrew Lee}