diff --git a/api/current.txt b/api/current.txt index 4f45614b95ef8..7632d8b4f46a5 100644 --- a/api/current.txt +++ b/api/current.txt @@ -27637,6 +27637,7 @@ package android.telecomm { method public void notifyIncomingCall(android.telecomm.CallInfo); method public void onPostDialWait(java.lang.String, java.lang.String); method public void setActive(java.lang.String); + method public void setCallVideoProvider(java.lang.String, android.telecomm.CallVideoProvider); method public void setDialing(java.lang.String); method public void setDisconnected(java.lang.String, int, java.lang.String); method public void setOnHold(java.lang.String); @@ -27703,6 +27704,11 @@ package android.telecomm { field public static final int SESSION_MODIFY_REQUEST_SUCCESS = 1; // 0x1 } + public abstract class CallVideoProvider { + ctor protected CallVideoProvider(); + method public abstract void setCamera(java.lang.String); + } + public class CallVideoProviderWrapper implements android.os.IBinder.DeathRecipient { method public void binderDied(); method public void setCamera(java.lang.String) throws android.os.RemoteException; @@ -27733,6 +27739,7 @@ package android.telecomm { method protected void onStopDtmfTone(); method protected void onUnhold(); method public final void setActive(); + method public final void setCallVideoProvider(android.telecomm.CallVideoProvider); method public final void setDestroyed(); method public final void setDialing(); method public final void setDisconnected(int, java.lang.String); @@ -27754,6 +27761,7 @@ package android.telecomm { method public abstract void onHandleChanged(android.telecomm.Connection, android.net.Uri); method public abstract void onParentConnectionChanged(android.telecomm.Connection, android.telecomm.Connection); method public abstract void onRequestingRingback(android.telecomm.Connection, boolean); + method public abstract void onSetCallVideoProvider(android.telecomm.Connection, android.telecomm.CallVideoProvider); method public abstract void onSignalChanged(android.telecomm.Connection, android.os.Bundle); method public abstract void onStateChanged(android.telecomm.Connection, int); } @@ -27767,6 +27775,7 @@ package android.telecomm { method public void onHandleChanged(android.telecomm.Connection, android.net.Uri); method public void onParentConnectionChanged(android.telecomm.Connection, android.telecomm.Connection); method public void onRequestingRingback(android.telecomm.Connection, boolean); + method public void onSetCallVideoProvider(android.telecomm.Connection, android.telecomm.CallVideoProvider); method public void onSignalChanged(android.telecomm.Connection, android.os.Bundle); method public void onStateChanged(android.telecomm.Connection, int); } diff --git a/telecomm/java/android/telecomm/CallServiceAdapter.java b/telecomm/java/android/telecomm/CallServiceAdapter.java index 31e37c4e59582..8412e806d6d18 100644 --- a/telecomm/java/android/telecomm/CallServiceAdapter.java +++ b/telecomm/java/android/telecomm/CallServiceAdapter.java @@ -23,6 +23,7 @@ import android.os.RemoteException; import com.android.internal.telecomm.ICallService; import com.android.internal.telecomm.ICallServiceAdapter; +import com.android.internal.telecomm.ICallVideoProvider; import com.android.internal.telecomm.RemoteServiceCallback; import java.util.ArrayList; @@ -338,4 +339,19 @@ public final class CallServiceAdapter implements DeathRecipient { } } } + + /** + * Sets the call video provider for a call. + * + * @param callId The unique ID of the call to set with the given call video provider. + * @param callVideoProvider The call video provider instance to set on the call. + */ + public void setCallVideoProvider(String callId, CallVideoProvider callVideoProvider) { + for (ICallServiceAdapter adapter : mAdapters) { + try { + adapter.setCallVideoProvider(callId, callVideoProvider.getInterface()); + } catch (RemoteException e) { + } + } + } } diff --git a/telecomm/java/android/telecomm/CallVideoProvider.java b/telecomm/java/android/telecomm/CallVideoProvider.java index 6126fca4f7265..4f593b94dcea7 100644 --- a/telecomm/java/android/telecomm/CallVideoProvider.java +++ b/telecomm/java/android/telecomm/CallVideoProvider.java @@ -25,7 +25,6 @@ import android.os.Message; import com.android.internal.telecomm.ICallVideoProvider; -/** @hide */ public abstract class CallVideoProvider { private static final int MSG_SET_CAMERA = 1; @@ -60,6 +59,14 @@ public abstract class CallVideoProvider { mBinder = new CallVideoProviderBinder(); } + /** + * Returns binder object which can be used across IPC methods. + * @hide + */ + public final ICallVideoProvider getInterface() { + return mBinder; + } + /** * Sets the camera to be used for video recording in a video call. * diff --git a/telecomm/java/android/telecomm/Connection.java b/telecomm/java/android/telecomm/Connection.java index e4992d00003c2..cf4e29af0dab9 100644 --- a/telecomm/java/android/telecomm/Connection.java +++ b/telecomm/java/android/telecomm/Connection.java @@ -18,6 +18,7 @@ package android.telecomm; import android.net.Uri; import android.os.Bundle; +import android.telecomm.CallVideoProvider; import java.util.ArrayList; import java.util.Collections; @@ -40,6 +41,7 @@ public abstract class Connection { void onDestroyed(Connection c); void onConferenceCapableChanged(Connection c, boolean isConferenceCapable); void onParentConnectionChanged(Connection c, Connection parent); + void onSetCallVideoProvider(Connection c, CallVideoProvider callVideoProvider); } public static class ListenerBase implements Listener { @@ -78,6 +80,10 @@ public abstract class Connection { /** ${inheritDoc} */ @Override public void onParentConnectionChanged(Connection c, Connection parent) {} + + /** {@inheritDoc} */ + @Override + public void onSetCallVideoProvider(Connection c, CallVideoProvider callVideoProvider) {} } public final class State { @@ -414,6 +420,16 @@ public abstract class Connection { setState(State.HOLDING); } + /** + * Sets the call video provider. + * @param callVideoProvider The call video provider. + */ + public final void setCallVideoProvider(CallVideoProvider callVideoProvider) { + for (Listener l : mListeners) { + l.onSetCallVideoProvider(this, callVideoProvider); + } + } + /** * Sets state to disconnected. This will first notify listeners with an * {@link Listener#onStateChanged(Connection, int)} event, then will fire an diff --git a/telecomm/java/android/telecomm/ConnectionService.java b/telecomm/java/android/telecomm/ConnectionService.java index 23b99fac05be4..4d525f20afd19 100644 --- a/telecomm/java/android/telecomm/ConnectionService.java +++ b/telecomm/java/android/telecomm/ConnectionService.java @@ -155,6 +155,12 @@ public abstract class ConnectionService extends CallService { String parentId = parent == null ? null : mIdByConnection.get(parent); getAdapter().setIsConferenced(id, parentId); } + + @Override + public void onSetCallVideoProvider(Connection c, CallVideoProvider callVideoProvider) { + String id = mIdByConnection.get(c); + getAdapter().setCallVideoProvider(id, callVideoProvider); + } }; @Override diff --git a/telecomm/java/android/telecomm/RemoteConnectionService.java b/telecomm/java/android/telecomm/RemoteConnectionService.java index 7658a76d56d34..64e58710e5a46 100644 --- a/telecomm/java/android/telecomm/RemoteConnectionService.java +++ b/telecomm/java/android/telecomm/RemoteConnectionService.java @@ -26,6 +26,7 @@ import android.text.TextUtils; import com.android.internal.telecomm.ICallService; import com.android.internal.telecomm.ICallServiceAdapter; +import com.android.internal.telecomm.ICallVideoProvider; import com.android.internal.telecomm.RemoteServiceCallback; import java.util.ArrayList; @@ -104,6 +105,12 @@ public class RemoteConnectionService implements DeathRecipient { } } + /** ${inheritDoc} */ + public void setCallVideoProvider( + String connectionId, ICallVideoProvider callVideoProvider) { + // not supported for remote connections. + } + /** ${inheritDoc} */ @Override public void setDialing(String connectionId) { diff --git a/telecomm/java/com/android/internal/telecomm/ICallServiceAdapter.aidl b/telecomm/java/com/android/internal/telecomm/ICallServiceAdapter.aidl index 373fb160ebd76..b81ef3745e339 100644 --- a/telecomm/java/com/android/internal/telecomm/ICallServiceAdapter.aidl +++ b/telecomm/java/com/android/internal/telecomm/ICallServiceAdapter.aidl @@ -19,6 +19,7 @@ package com.android.internal.telecomm; import android.telecomm.CallInfo; import android.telecomm.ConnectionRequest; +import com.android.internal.telecomm.ICallVideoProvider; import com.android.internal.telecomm.RemoteServiceCallback; /** @@ -62,4 +63,6 @@ oneway interface ICallServiceAdapter { void handoffCall(String callId); void queryRemoteConnectionServices(RemoteServiceCallback callback); + + void setCallVideoProvider(String callId, ICallVideoProvider callVideoProvider); }