Loading telecomm/java/android/telecom/Conference.java +48 −0 Original line number Original line Diff line number Diff line Loading @@ -17,10 +17,12 @@ package android.telecom; package android.telecom; import android.annotation.SystemApi; import android.annotation.SystemApi; import android.telecom.Connection.VideoProvider; import java.util.ArrayList; import java.util.ArrayList; import java.util.Collections; import java.util.Collections; import java.util.List; import java.util.List; import java.util.Locale; import java.util.Set; import java.util.Set; import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.CopyOnWriteArraySet; import java.util.concurrent.CopyOnWriteArraySet; Loading @@ -42,6 +44,8 @@ public abstract class Conference implements IConferenceable { Conference conference, List<Connection> conferenceableConnections) {} Conference conference, List<Connection> conferenceableConnections) {} public void onDestroyed(Conference conference) {} public void onDestroyed(Conference conference) {} public void onCapabilitiesChanged(Conference conference, int capabilities) {} public void onCapabilitiesChanged(Conference conference, int capabilities) {} public void onVideoStateChanged(Conference c, int videoState) { } public void onVideoProviderChanged(Conference c, Connection.VideoProvider videoProvider) {} } } private final Set<Listener> mListeners = new CopyOnWriteArraySet<>(); private final Set<Listener> mListeners = new CopyOnWriteArraySet<>(); Loading Loading @@ -122,6 +126,22 @@ public abstract class Conference implements IConferenceable { return mAudioState; return mAudioState; } } /** * Returns VideoProvider of the primary call. This can be null. * @hide */ public VideoProvider getVideoProvider() { return null; } /** * Returns video state of the primary call. * @hide */ public int getVideoState() { return VideoProfile.VideoState.AUDIO_ONLY; } /** /** * Invoked when the Conference and all it's {@link Connection}s should be disconnected. * Invoked when the Conference and all it's {@link Connection}s should be disconnected. */ */ Loading Loading @@ -246,6 +266,7 @@ public abstract class Conference implements IConferenceable { * @return True if the connection was successfully added. * @return True if the connection was successfully added. */ */ public final boolean addConnection(Connection connection) { public final boolean addConnection(Connection connection) { Log.d(this, "Connection=%s, connection=", connection); if (connection != null && !mChildConnections.contains(connection)) { if (connection != null && !mChildConnections.contains(connection)) { if (connection.setConference(this)) { if (connection.setConference(this)) { mChildConnections.add(connection); mChildConnections.add(connection); Loading Loading @@ -292,6 +313,22 @@ public abstract class Conference implements IConferenceable { fireOnConferenceableConnectionsChanged(); fireOnConferenceableConnectionsChanged(); } } public final void setVideoState(Connection c, int videoState) { Log.d(this, "setVideoState Conference: %s Connection: %s VideoState: %s", this, c, videoState); for (Listener l : mListeners) { l.onVideoStateChanged(this, videoState); } } public final void setVideoProvider(Connection c, Connection.VideoProvider videoProvider) { Log.d(this, "setVideoProvider Conference: %s Connection: %s VideoState: %s", this, c, videoProvider); for (Listener l : mListeners) { l.onVideoProviderChanged(this, videoProvider); } } private final void fireOnConferenceableConnectionsChanged() { private final void fireOnConferenceableConnectionsChanged() { for (Listener l : mListeners) { for (Listener l : mListeners) { l.onConferenceableConnectionsChanged(this, getConferenceableConnections()); l.onConferenceableConnectionsChanged(this, getConferenceableConnections()); Loading Loading @@ -401,4 +438,15 @@ public abstract class Conference implements IConferenceable { } } mConferenceableConnections.clear(); mConferenceableConnections.clear(); } } @Override public String toString() { return String.format(Locale.US, "[State: %s,Capabilites: %s, VideoState: %s, VideoProvider: %s, ThisObject %s]", Connection.stateToString(mState), PhoneCapabilities.toString(mCapabilities), getVideoState(), getVideoProvider(), super.toString()); } } } telecomm/java/android/telecom/ConnectionService.java +26 −1 Original line number Original line Diff line number Diff line Loading @@ -437,6 +437,21 @@ public abstract class ConnectionService extends Service { PhoneCapabilities.toString(capabilities)); PhoneCapabilities.toString(capabilities)); mAdapter.setCallCapabilities(id, capabilities); mAdapter.setCallCapabilities(id, capabilities); } } @Override public void onVideoStateChanged(Conference c, int videoState) { String id = mIdByConference.get(c); Log.d(this, "onVideoStateChanged set video state %d", videoState); mAdapter.setVideoState(id, videoState); } @Override public void onVideoProviderChanged(Conference c, Connection.VideoProvider videoProvider) { String id = mIdByConference.get(c); Log.d(this, "onVideoProviderChanged: Connection: %s, VideoProvider: %s", c, videoProvider); mAdapter.setVideoProvider(id, videoProvider); } }; }; private final Connection.Listener mConnectionListener = new Connection.Listener() { private final Connection.Listener mConnectionListener = new Connection.Listener() { Loading Loading @@ -539,6 +554,8 @@ public abstract class ConnectionService extends Service { @Override @Override public void onVideoProviderChanged(Connection c, Connection.VideoProvider videoProvider) { public void onVideoProviderChanged(Connection c, Connection.VideoProvider videoProvider) { String id = mIdByConnection.get(c); String id = mIdByConnection.get(c); Log.d(this, "onVideoProviderChanged: Connection: %s, VideoProvider: %s", c, videoProvider); mAdapter.setVideoProvider(id, videoProvider); mAdapter.setVideoProvider(id, videoProvider); } } Loading Loading @@ -939,6 +956,8 @@ public abstract class ConnectionService extends Service { * @param conference The new conference object. * @param conference The new conference object. */ */ public final void addConference(Conference conference) { public final void addConference(Conference conference) { Log.d(this, "addConference: conference=%s", conference); String id = addConferenceInternal(conference); String id = addConferenceInternal(conference); if (id != null) { if (id != null) { List<String> connectionIds = new ArrayList<>(2); List<String> connectionIds = new ArrayList<>(2); Loading @@ -951,8 +970,14 @@ public abstract class ConnectionService extends Service { conference.getPhoneAccountHandle(), conference.getPhoneAccountHandle(), conference.getState(), conference.getState(), conference.getCapabilities(), conference.getCapabilities(), connectionIds); connectionIds, conference.getVideoProvider() == null ? null : conference.getVideoProvider().getInterface(), conference.getVideoState() ); mAdapter.addConferenceCall(id, parcelableConference); mAdapter.addConferenceCall(id, parcelableConference); mAdapter.setVideoProvider(id, conference.getVideoProvider()); mAdapter.setVideoState(id, conference.getVideoState()); // Go through any child calls and set the parent. // Go through any child calls and set the parent. for (Connection connection : conference.getConnections()) { for (Connection connection : conference.getConnections()) { Loading telecomm/java/android/telecom/ParcelableConference.java +30 −2 Original line number Original line Diff line number Diff line Loading @@ -22,6 +22,8 @@ import android.os.Parcelable; import java.util.ArrayList; import java.util.ArrayList; import java.util.List; import java.util.List; import com.android.internal.telecom.IVideoProvider; /** /** * A parcelable representation of a conference connection. * A parcelable representation of a conference connection. * @hide * @hide Loading @@ -32,16 +34,23 @@ public final class ParcelableConference implements Parcelable { private int mState; private int mState; private int mCapabilities; private int mCapabilities; private List<String> mConnectionIds; private List<String> mConnectionIds; private final IVideoProvider mVideoProvider; private final int mVideoState; public ParcelableConference( public ParcelableConference( PhoneAccountHandle phoneAccount, PhoneAccountHandle phoneAccount, int state, int state, int capabilities, int capabilities, List<String> connectionIds) { List<String> connectionIds, IVideoProvider videoProvider, int videoState) { mPhoneAccount = phoneAccount; mPhoneAccount = phoneAccount; mState = state; mState = state; mCapabilities = capabilities; mCapabilities = capabilities; mConnectionIds = connectionIds; mConnectionIds = connectionIds; mVideoProvider = videoProvider; mVideoState = videoState; } } @Override @Override Loading @@ -55,6 +64,10 @@ public final class ParcelableConference implements Parcelable { .append(PhoneCapabilities.toString(mCapabilities)) .append(PhoneCapabilities.toString(mCapabilities)) .append(", children: ") .append(", children: ") .append(mConnectionIds) .append(mConnectionIds) .append(", VideoState: ") .append(mVideoState) .append(", VideoProvider: ") .append(mVideoProvider) .toString(); .toString(); } } Loading @@ -74,6 +87,14 @@ public final class ParcelableConference implements Parcelable { return mConnectionIds; return mConnectionIds; } } public IVideoProvider getVideoProvider() { return mVideoProvider; } public int getVideoState() { return mVideoState; } public static final Parcelable.Creator<ParcelableConference> CREATOR = public static final Parcelable.Creator<ParcelableConference> CREATOR = new Parcelable.Creator<ParcelableConference> () { new Parcelable.Creator<ParcelableConference> () { @Override @Override Loading @@ -84,8 +105,12 @@ public final class ParcelableConference implements Parcelable { int capabilities = source.readInt(); int capabilities = source.readInt(); List<String> connectionIds = new ArrayList<>(2); List<String> connectionIds = new ArrayList<>(2); source.readList(connectionIds, classLoader); source.readList(connectionIds, classLoader); IVideoProvider videoCallProvider = IVideoProvider.Stub.asInterface(source.readStrongBinder()); int videoState = source.readInt(); return new ParcelableConference(phoneAccount, state, capabilities, connectionIds); return new ParcelableConference(phoneAccount, state, capabilities, connectionIds, videoCallProvider, videoState); } } @Override @Override Loading @@ -107,5 +132,8 @@ public final class ParcelableConference implements Parcelable { destination.writeInt(mState); destination.writeInt(mState); destination.writeInt(mCapabilities); destination.writeInt(mCapabilities); destination.writeList(mConnectionIds); destination.writeList(mConnectionIds); destination.writeStrongBinder( mVideoProvider != null ? mVideoProvider.asBinder() : null); destination.writeInt(mVideoState); } } } } Loading
telecomm/java/android/telecom/Conference.java +48 −0 Original line number Original line Diff line number Diff line Loading @@ -17,10 +17,12 @@ package android.telecom; package android.telecom; import android.annotation.SystemApi; import android.annotation.SystemApi; import android.telecom.Connection.VideoProvider; import java.util.ArrayList; import java.util.ArrayList; import java.util.Collections; import java.util.Collections; import java.util.List; import java.util.List; import java.util.Locale; import java.util.Set; import java.util.Set; import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.CopyOnWriteArraySet; import java.util.concurrent.CopyOnWriteArraySet; Loading @@ -42,6 +44,8 @@ public abstract class Conference implements IConferenceable { Conference conference, List<Connection> conferenceableConnections) {} Conference conference, List<Connection> conferenceableConnections) {} public void onDestroyed(Conference conference) {} public void onDestroyed(Conference conference) {} public void onCapabilitiesChanged(Conference conference, int capabilities) {} public void onCapabilitiesChanged(Conference conference, int capabilities) {} public void onVideoStateChanged(Conference c, int videoState) { } public void onVideoProviderChanged(Conference c, Connection.VideoProvider videoProvider) {} } } private final Set<Listener> mListeners = new CopyOnWriteArraySet<>(); private final Set<Listener> mListeners = new CopyOnWriteArraySet<>(); Loading Loading @@ -122,6 +126,22 @@ public abstract class Conference implements IConferenceable { return mAudioState; return mAudioState; } } /** * Returns VideoProvider of the primary call. This can be null. * @hide */ public VideoProvider getVideoProvider() { return null; } /** * Returns video state of the primary call. * @hide */ public int getVideoState() { return VideoProfile.VideoState.AUDIO_ONLY; } /** /** * Invoked when the Conference and all it's {@link Connection}s should be disconnected. * Invoked when the Conference and all it's {@link Connection}s should be disconnected. */ */ Loading Loading @@ -246,6 +266,7 @@ public abstract class Conference implements IConferenceable { * @return True if the connection was successfully added. * @return True if the connection was successfully added. */ */ public final boolean addConnection(Connection connection) { public final boolean addConnection(Connection connection) { Log.d(this, "Connection=%s, connection=", connection); if (connection != null && !mChildConnections.contains(connection)) { if (connection != null && !mChildConnections.contains(connection)) { if (connection.setConference(this)) { if (connection.setConference(this)) { mChildConnections.add(connection); mChildConnections.add(connection); Loading Loading @@ -292,6 +313,22 @@ public abstract class Conference implements IConferenceable { fireOnConferenceableConnectionsChanged(); fireOnConferenceableConnectionsChanged(); } } public final void setVideoState(Connection c, int videoState) { Log.d(this, "setVideoState Conference: %s Connection: %s VideoState: %s", this, c, videoState); for (Listener l : mListeners) { l.onVideoStateChanged(this, videoState); } } public final void setVideoProvider(Connection c, Connection.VideoProvider videoProvider) { Log.d(this, "setVideoProvider Conference: %s Connection: %s VideoState: %s", this, c, videoProvider); for (Listener l : mListeners) { l.onVideoProviderChanged(this, videoProvider); } } private final void fireOnConferenceableConnectionsChanged() { private final void fireOnConferenceableConnectionsChanged() { for (Listener l : mListeners) { for (Listener l : mListeners) { l.onConferenceableConnectionsChanged(this, getConferenceableConnections()); l.onConferenceableConnectionsChanged(this, getConferenceableConnections()); Loading Loading @@ -401,4 +438,15 @@ public abstract class Conference implements IConferenceable { } } mConferenceableConnections.clear(); mConferenceableConnections.clear(); } } @Override public String toString() { return String.format(Locale.US, "[State: %s,Capabilites: %s, VideoState: %s, VideoProvider: %s, ThisObject %s]", Connection.stateToString(mState), PhoneCapabilities.toString(mCapabilities), getVideoState(), getVideoProvider(), super.toString()); } } }
telecomm/java/android/telecom/ConnectionService.java +26 −1 Original line number Original line Diff line number Diff line Loading @@ -437,6 +437,21 @@ public abstract class ConnectionService extends Service { PhoneCapabilities.toString(capabilities)); PhoneCapabilities.toString(capabilities)); mAdapter.setCallCapabilities(id, capabilities); mAdapter.setCallCapabilities(id, capabilities); } } @Override public void onVideoStateChanged(Conference c, int videoState) { String id = mIdByConference.get(c); Log.d(this, "onVideoStateChanged set video state %d", videoState); mAdapter.setVideoState(id, videoState); } @Override public void onVideoProviderChanged(Conference c, Connection.VideoProvider videoProvider) { String id = mIdByConference.get(c); Log.d(this, "onVideoProviderChanged: Connection: %s, VideoProvider: %s", c, videoProvider); mAdapter.setVideoProvider(id, videoProvider); } }; }; private final Connection.Listener mConnectionListener = new Connection.Listener() { private final Connection.Listener mConnectionListener = new Connection.Listener() { Loading Loading @@ -539,6 +554,8 @@ public abstract class ConnectionService extends Service { @Override @Override public void onVideoProviderChanged(Connection c, Connection.VideoProvider videoProvider) { public void onVideoProviderChanged(Connection c, Connection.VideoProvider videoProvider) { String id = mIdByConnection.get(c); String id = mIdByConnection.get(c); Log.d(this, "onVideoProviderChanged: Connection: %s, VideoProvider: %s", c, videoProvider); mAdapter.setVideoProvider(id, videoProvider); mAdapter.setVideoProvider(id, videoProvider); } } Loading Loading @@ -939,6 +956,8 @@ public abstract class ConnectionService extends Service { * @param conference The new conference object. * @param conference The new conference object. */ */ public final void addConference(Conference conference) { public final void addConference(Conference conference) { Log.d(this, "addConference: conference=%s", conference); String id = addConferenceInternal(conference); String id = addConferenceInternal(conference); if (id != null) { if (id != null) { List<String> connectionIds = new ArrayList<>(2); List<String> connectionIds = new ArrayList<>(2); Loading @@ -951,8 +970,14 @@ public abstract class ConnectionService extends Service { conference.getPhoneAccountHandle(), conference.getPhoneAccountHandle(), conference.getState(), conference.getState(), conference.getCapabilities(), conference.getCapabilities(), connectionIds); connectionIds, conference.getVideoProvider() == null ? null : conference.getVideoProvider().getInterface(), conference.getVideoState() ); mAdapter.addConferenceCall(id, parcelableConference); mAdapter.addConferenceCall(id, parcelableConference); mAdapter.setVideoProvider(id, conference.getVideoProvider()); mAdapter.setVideoState(id, conference.getVideoState()); // Go through any child calls and set the parent. // Go through any child calls and set the parent. for (Connection connection : conference.getConnections()) { for (Connection connection : conference.getConnections()) { Loading
telecomm/java/android/telecom/ParcelableConference.java +30 −2 Original line number Original line Diff line number Diff line Loading @@ -22,6 +22,8 @@ import android.os.Parcelable; import java.util.ArrayList; import java.util.ArrayList; import java.util.List; import java.util.List; import com.android.internal.telecom.IVideoProvider; /** /** * A parcelable representation of a conference connection. * A parcelable representation of a conference connection. * @hide * @hide Loading @@ -32,16 +34,23 @@ public final class ParcelableConference implements Parcelable { private int mState; private int mState; private int mCapabilities; private int mCapabilities; private List<String> mConnectionIds; private List<String> mConnectionIds; private final IVideoProvider mVideoProvider; private final int mVideoState; public ParcelableConference( public ParcelableConference( PhoneAccountHandle phoneAccount, PhoneAccountHandle phoneAccount, int state, int state, int capabilities, int capabilities, List<String> connectionIds) { List<String> connectionIds, IVideoProvider videoProvider, int videoState) { mPhoneAccount = phoneAccount; mPhoneAccount = phoneAccount; mState = state; mState = state; mCapabilities = capabilities; mCapabilities = capabilities; mConnectionIds = connectionIds; mConnectionIds = connectionIds; mVideoProvider = videoProvider; mVideoState = videoState; } } @Override @Override Loading @@ -55,6 +64,10 @@ public final class ParcelableConference implements Parcelable { .append(PhoneCapabilities.toString(mCapabilities)) .append(PhoneCapabilities.toString(mCapabilities)) .append(", children: ") .append(", children: ") .append(mConnectionIds) .append(mConnectionIds) .append(", VideoState: ") .append(mVideoState) .append(", VideoProvider: ") .append(mVideoProvider) .toString(); .toString(); } } Loading @@ -74,6 +87,14 @@ public final class ParcelableConference implements Parcelable { return mConnectionIds; return mConnectionIds; } } public IVideoProvider getVideoProvider() { return mVideoProvider; } public int getVideoState() { return mVideoState; } public static final Parcelable.Creator<ParcelableConference> CREATOR = public static final Parcelable.Creator<ParcelableConference> CREATOR = new Parcelable.Creator<ParcelableConference> () { new Parcelable.Creator<ParcelableConference> () { @Override @Override Loading @@ -84,8 +105,12 @@ public final class ParcelableConference implements Parcelable { int capabilities = source.readInt(); int capabilities = source.readInt(); List<String> connectionIds = new ArrayList<>(2); List<String> connectionIds = new ArrayList<>(2); source.readList(connectionIds, classLoader); source.readList(connectionIds, classLoader); IVideoProvider videoCallProvider = IVideoProvider.Stub.asInterface(source.readStrongBinder()); int videoState = source.readInt(); return new ParcelableConference(phoneAccount, state, capabilities, connectionIds); return new ParcelableConference(phoneAccount, state, capabilities, connectionIds, videoCallProvider, videoState); } } @Override @Override Loading @@ -107,5 +132,8 @@ public final class ParcelableConference implements Parcelable { destination.writeInt(mState); destination.writeInt(mState); destination.writeInt(mCapabilities); destination.writeInt(mCapabilities); destination.writeList(mConnectionIds); destination.writeList(mConnectionIds); destination.writeStrongBinder( mVideoProvider != null ? mVideoProvider.asBinder() : null); destination.writeInt(mVideoState); } } } }