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

Commit d53dc11b authored by Tyler Gunn's avatar Tyler Gunn Committed by Automerger Merge Worker
Browse files

Merge "Ensure conference state is posted to Telecom for new conferences." am: 2e46eac0

Change-Id: I03b8dbca60d71aaeb03ff700482a45d35e34f6d3
parents 737a8abc 2e46eac0
Loading
Loading
Loading
Loading
+18 −2
Original line number Diff line number Diff line
@@ -106,6 +106,7 @@ public abstract class Conference extends Conferenceable {
    private int mCallerDisplayNamePresentation;
    private int mCallDirection;
    private boolean mRingbackRequested = false;
    private boolean mIsMultiparty = true;

    private final Connection.Listener mConnectionDeathListener = new Connection.Listener() {
        @Override
@@ -998,8 +999,8 @@ public abstract class Conference extends Conferenceable {
    public void onExtrasChanged(Bundle extras) {}

    /**
     * Set whether Telecom should treat this {@link Conference} as a conference call or if it
     * should treat it as a single-party call.
     * Set whether Telecom should treat this {@link Conference} as a multiparty conference call or
     * if it should treat it as a single-party call.
     * This method is used as part of a workaround regarding IMS conference calls and user
     * expectation.  In IMS, once a conference is formed, the UE is connected to an IMS conference
     * server.  If all participants of the conference drop out of the conference except for one, the
@@ -1020,6 +1021,7 @@ public abstract class Conference extends Conferenceable {
    @TestApi
    @RequiresPermission(MODIFY_PHONE_STATE)
    public void setConferenceState(boolean isConference) {
        mIsMultiparty = isConference;
        for (Listener l : mListeners) {
            l.onConferenceStateChanged(this, isConference);
        }
@@ -1043,6 +1045,20 @@ public abstract class Conference extends Conferenceable {
        }
    }

    /**
     * Determines if the {@link Conference} is considered "multiparty" or not.  By default all
     * conferences are considered multiparty.  A multiparty conference is one where there are
     * multiple conference participants (other than the host) in the conference.
     * This is tied to {@link #setConferenceState(boolean)}, which is used for some use cases to
     * have a conference appear as if it is a standalone call, in which case the conference will
     * no longer be multiparty.
     * @return {@code true} if conference is treated as a conference (i.e. it is multiparty),
     * {@code false} if it should emulate a standalone call (i.e. not multiparty).
     * @hide
     */
    public boolean isMultiparty() {
        return mIsMultiparty;
    }

    /**
     * Sets the address of this {@link Conference}.  Used when {@link #setConferenceState(boolean)}
+5 −0
Original line number Diff line number Diff line
@@ -2505,6 +2505,11 @@ public abstract class ConnectionService extends Service {
            mAdapter.addConferenceCall(id, parcelableConference);
            mAdapter.setVideoProvider(id, conference.getVideoProvider());
            mAdapter.setVideoState(id, conference.getVideoState());
            // In some instances a conference can start its life as a standalone call with just a
            // single participant; ensure we signal to Telecom in this case.
            if (!conference.isMultiparty()) {
                mAdapter.setConferenceState(id, conference.isMultiparty());
            }

            // Go through any child calls and set the parent.
            for (Connection connection : conference.getConnections()) {