blob: 0ac8672430aa39db04f797d112bd337c43b41215 [file] [log] [blame]
/*
* 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 com.android.ims.internal;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.os.RemoteException;
import android.telecomm.CameraCapabilities;
import android.telecomm.Connection;
import android.telecomm.VideoProfile;
import android.view.Surface;
public abstract class ImsVideoCallProvider {
private static final int MSG_SET_CALLBACK = 1;
private static final int MSG_SET_CAMERA = 2;
private static final int MSG_SET_PREVIEW_SURFACE = 3;
private static final int MSG_SET_DISPLAY_SURFACE = 4;
private static final int MSG_SET_DEVICE_ORIENTATION = 5;
private static final int MSG_SET_ZOOM = 6;
private static final int MSG_SEND_SESSION_MODIFY_REQUEST = 7;
private static final int MSG_SEND_SESSION_MODIFY_RESPONSE = 8;
private static final int MSG_REQUEST_CAMERA_CAPABILITIES = 9;
private static final int MSG_REQUEST_CALL_DATA_USAGE = 10;
private static final int MSG_SET_PAUSE_IMAGE = 11;
private final ImsVideoCallProviderBinder mBinder;
private IImsVideoCallCallback mCallback;
/**
* Default handler used to consolidate binder method calls onto a single thread.
*/
private final Handler mProviderHandler = new Handler(Looper.getMainLooper()) {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case MSG_SET_CALLBACK:
mCallback = (IImsVideoCallCallback) msg.obj;
break;
case MSG_SET_CAMERA:
onSetCamera((String) msg.obj);
break;
case MSG_SET_PREVIEW_SURFACE:
onSetPreviewSurface((Surface) msg.obj);
break;
case MSG_SET_DISPLAY_SURFACE:
onSetDisplaySurface((Surface) msg.obj);
break;
case MSG_SET_DEVICE_ORIENTATION:
onSetDeviceOrientation(msg.arg1);
break;
case MSG_SET_ZOOM:
onSetZoom((Float) msg.obj);
break;
case MSG_SEND_SESSION_MODIFY_REQUEST:
onSendSessionModifyRequest((VideoProfile) msg.obj);
break;
case MSG_SEND_SESSION_MODIFY_RESPONSE:
onSendSessionModifyResponse((VideoProfile) msg.obj);
break;
case MSG_REQUEST_CAMERA_CAPABILITIES:
onRequestCameraCapabilities();
break;
case MSG_REQUEST_CALL_DATA_USAGE:
onRequestCallDataUsage();
break;
case MSG_SET_PAUSE_IMAGE:
onSetPauseImage((String) msg.obj);
break;
default:
break;
}
}
};
/**
* IImsVideoCallProvider stub implementation.
*/
private final class ImsVideoCallProviderBinder extends IImsVideoCallProvider.Stub {
public void setCallback(IImsVideoCallCallback callback) {
mProviderHandler.obtainMessage(MSG_SET_CALLBACK, callback).sendToTarget();
}
public void setCamera(String cameraId) {
mProviderHandler.obtainMessage(MSG_SET_CAMERA, cameraId).sendToTarget();
}
public void setPreviewSurface(Surface surface) {
mProviderHandler.obtainMessage(MSG_SET_PREVIEW_SURFACE, surface).sendToTarget();
}
public void setDisplaySurface(Surface surface) {
mProviderHandler.obtainMessage(MSG_SET_DISPLAY_SURFACE, surface).sendToTarget();
}
public void setDeviceOrientation(int rotation) {
mProviderHandler.obtainMessage(MSG_SET_DEVICE_ORIENTATION, rotation).sendToTarget();
}
public void setZoom(float value) {
mProviderHandler.obtainMessage(MSG_SET_ZOOM, value).sendToTarget();
}
public void sendSessionModifyRequest(VideoProfile requestProfile) {
mProviderHandler.obtainMessage(
MSG_SEND_SESSION_MODIFY_REQUEST, requestProfile).sendToTarget();
}
public void sendSessionModifyResponse(VideoProfile responseProfile) {
mProviderHandler.obtainMessage(
MSG_SEND_SESSION_MODIFY_RESPONSE, responseProfile).sendToTarget();
}
public void requestCameraCapabilities() {
mProviderHandler.obtainMessage(MSG_REQUEST_CAMERA_CAPABILITIES).sendToTarget();
}
public void requestCallDataUsage() {
mProviderHandler.obtainMessage(MSG_REQUEST_CALL_DATA_USAGE).sendToTarget();
}
public void setPauseImage(String uri) {
mProviderHandler.obtainMessage(MSG_SET_PAUSE_IMAGE, uri).sendToTarget();
}
}
public ImsVideoCallProvider() {
mBinder = new ImsVideoCallProviderBinder();
}
/**
* Returns binder object which can be used across IPC methods.
*/
public final IImsVideoCallProvider getInterface() {
return mBinder;
}
/** @see Connection.VideoProvider#onSetCamera */
public abstract void onSetCamera(String cameraId);
/** @see Connection.VideoProvider#onSetPreviewSurface */
public abstract void onSetPreviewSurface(Surface surface);
/** @see Connection.VideoProvider#onSetDisplaySurface */
public abstract void onSetDisplaySurface(Surface surface);
/** @see Connection.VideoProvider#onSetDeviceOrientation */
public abstract void onSetDeviceOrientation(int rotation);
/** @see Connection.VideoProvider#onSetZoom */
public abstract void onSetZoom(float value);
/** @see Connection.VideoProvider#onSendSessionModifyRequest */
public abstract void onSendSessionModifyRequest(VideoProfile requestProfile);
/** @see Connection.VideoProvider#onSendSessionModifyResponse */
public abstract void onSendSessionModifyResponse(VideoProfile responseProfile);
/** @see Connection.VideoProvider#onRequestCameraCapabilities */
public abstract void onRequestCameraCapabilities();
/** @see Connection.VideoProvider#onRequestCallDataUsage */
public abstract void onRequestCallDataUsage();
/** @see Connection.VideoProvider#onSetPauseImage */
public abstract void onSetPauseImage(String uri);
/** @see Connection.VideoProvider#receiveSessionModifyRequest */
public void receiveSessionModifyRequest(VideoProfile VideoProfile) {
if (mCallback != null) {
try {
mCallback.receiveSessionModifyRequest(VideoProfile);
} catch (RemoteException ignored) {
}
}
}
/** @see Connection.VideoProvider#receiveSessionModifyResponse */
public void receiveSessionModifyResponse(
int status, VideoProfile requestedProfile, VideoProfile responseProfile) {
if (mCallback != null) {
try {
mCallback.receiveSessionModifyResponse(status, requestedProfile, responseProfile);
} catch (RemoteException ignored) {
}
}
}
/** @see Connection.VideoProvider#handleCallSessionEvent */
public void handleCallSessionEvent(int event) {
if (mCallback != null) {
try {
mCallback.handleCallSessionEvent(event);
} catch (RemoteException ignored) {
}
}
}
/** @see Connection.VideoProvider#changePeerDimensions */
public void changePeerDimensions(int width, int height) {
if (mCallback != null) {
try {
mCallback.changePeerDimensions(width, height);
} catch (RemoteException ignored) {
}
}
}
/** @see Connection.VideoProvider#changeCallDataUsage */
public void changeCallDataUsage(int dataUsage) {
if (mCallback != null) {
try {
mCallback.changeCallDataUsage(dataUsage);
} catch (RemoteException ignored) {
}
}
}
/** @see Connection.VideoProvider#changeCameraCapabilities */
public void changeCameraCapabilities(CameraCapabilities CameraCapabilities) {
if (mCallback != null) {
try {
mCallback.changeCameraCapabilities(CameraCapabilities);
} catch (RemoteException ignored) {
}
}
}
}