Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit bebb17b6 authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "IMS-VT: Enable Video conferencing."

parents c03505e7 643c5ba6
Loading
Loading
Loading
Loading
+48 −0
Original line number Diff line number Diff line
@@ -17,10 +17,12 @@
package android.telecom;

import android.annotation.SystemApi;
import android.telecom.Connection.VideoProvider;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Locale;
import java.util.Set;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.CopyOnWriteArraySet;
@@ -42,6 +44,8 @@ public abstract class Conference implements IConferenceable {
                Conference conference, List<Connection> conferenceableConnections) {}
        public void onDestroyed(Conference conference) {}
        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<>();
@@ -122,6 +126,22 @@ public abstract class Conference implements IConferenceable {
        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.
     */
@@ -246,6 +266,7 @@ public abstract class Conference implements IConferenceable {
     * @return True if the connection was successfully added.
     */
    public final boolean addConnection(Connection connection) {
        Log.d(this, "Connection=%s, connection=", connection);
        if (connection != null && !mChildConnections.contains(connection)) {
            if (connection.setConference(this)) {
                mChildConnections.add(connection);
@@ -292,6 +313,22 @@ public abstract class Conference implements IConferenceable {
        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() {
        for (Listener l : mListeners) {
            l.onConferenceableConnectionsChanged(this, getConferenceableConnections());
@@ -401,4 +438,15 @@ public abstract class Conference implements IConferenceable {
        }
        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());
    }
}
+26 −1
Original line number Diff line number Diff line
@@ -437,6 +437,21 @@ public abstract class ConnectionService extends Service {
                    PhoneCapabilities.toString(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() {
@@ -539,6 +554,8 @@ public abstract class ConnectionService extends Service {
        @Override
        public void onVideoProviderChanged(Connection c, Connection.VideoProvider videoProvider) {
            String id = mIdByConnection.get(c);
            Log.d(this, "onVideoProviderChanged: Connection: %s, VideoProvider: %s", c,
                    videoProvider);
            mAdapter.setVideoProvider(id, videoProvider);
        }

@@ -939,6 +956,8 @@ public abstract class ConnectionService extends Service {
     * @param conference The new conference object.
     */
    public final void addConference(Conference conference) {
        Log.d(this, "addConference: conference=%s", conference);

        String id = addConferenceInternal(conference);
        if (id != null) {
            List<String> connectionIds = new ArrayList<>(2);
@@ -951,8 +970,14 @@ public abstract class ConnectionService extends Service {
                    conference.getPhoneAccountHandle(),
                    conference.getState(),
                    conference.getCapabilities(),
                    connectionIds);
                    connectionIds,
                    conference.getVideoProvider() == null ?
                            null : conference.getVideoProvider().getInterface(),
                    conference.getVideoState()
                    );
            mAdapter.addConferenceCall(id, parcelableConference);
            mAdapter.setVideoProvider(id, conference.getVideoProvider());
            mAdapter.setVideoState(id, conference.getVideoState());

            // Go through any child calls and set the parent.
            for (Connection connection : conference.getConnections()) {
+30 −2
Original line number Diff line number Diff line
@@ -22,6 +22,8 @@ import android.os.Parcelable;
import java.util.ArrayList;
import java.util.List;

import com.android.internal.telecom.IVideoProvider;

/**
 * A parcelable representation of a conference connection.
 * @hide
@@ -32,16 +34,23 @@ public final class ParcelableConference implements Parcelable {
    private int mState;
    private int mCapabilities;
    private List<String> mConnectionIds;
    private final IVideoProvider mVideoProvider;
    private final int mVideoState;


    public ParcelableConference(
            PhoneAccountHandle phoneAccount,
            int state,
            int capabilities,
            List<String> connectionIds) {
            List<String> connectionIds,
            IVideoProvider videoProvider,
            int videoState) {
        mPhoneAccount = phoneAccount;
        mState = state;
        mCapabilities = capabilities;
        mConnectionIds = connectionIds;
        mVideoProvider = videoProvider;
        mVideoState = videoState;
    }

    @Override
@@ -55,6 +64,10 @@ public final class ParcelableConference implements Parcelable {
                .append(PhoneCapabilities.toString(mCapabilities))
                .append(", children: ")
                .append(mConnectionIds)
                .append(", VideoState: ")
                .append(mVideoState)
                .append(", VideoProvider: ")
                .append(mVideoProvider)
                .toString();
    }

@@ -74,6 +87,14 @@ public final class ParcelableConference implements Parcelable {
        return mConnectionIds;
    }

    public IVideoProvider getVideoProvider() {
        return mVideoProvider;
    }

    public int getVideoState() {
        return mVideoState;
    }

    public static final Parcelable.Creator<ParcelableConference> CREATOR =
            new Parcelable.Creator<ParcelableConference> () {
        @Override
@@ -84,8 +105,12 @@ public final class ParcelableConference implements Parcelable {
            int capabilities = source.readInt();
            List<String> connectionIds = new ArrayList<>(2);
            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
@@ -107,5 +132,8 @@ public final class ParcelableConference implements Parcelable {
        destination.writeInt(mState);
        destination.writeInt(mCapabilities);
        destination.writeList(mConnectionIds);
        destination.writeStrongBinder(
                mVideoProvider != null ? mVideoProvider.asBinder() : null);
        destination.writeInt(mVideoState);
    }
}