diff --git a/telecomm/java/android/telecom/Call.java b/telecomm/java/android/telecom/Call.java index 65117055045ce..eab13afedb772 100644 --- a/telecomm/java/android/telecom/Call.java +++ b/telecomm/java/android/telecom/Call.java @@ -253,6 +253,7 @@ public final class Call { private final PhoneAccountHandle mAccountHandle; private final int mCallCapabilities; private final int mCallProperties; + private final int mSupportedAudioRoutes; private final DisconnectCause mDisconnectCause; private final long mConnectTimeMillis; private final GatewayInfo mGatewayInfo; @@ -447,6 +448,15 @@ public final class Call { return mCallProperties; } + /** + * @return a bitmask of the audio routes available for the call. + * + * @hide + */ + public int getSupportedAudioRoutes() { + return mSupportedAudioRoutes; + } + /** * @return For a {@link #STATE_DISCONNECTED} {@code Call}, the disconnect cause expressed * by {@link android.telecom.DisconnectCause}. @@ -513,6 +523,7 @@ public final class Call { Objects.equals(mAccountHandle, d.mAccountHandle) && Objects.equals(mCallCapabilities, d.mCallCapabilities) && Objects.equals(mCallProperties, d.mCallProperties) && + Objects.equals(mSupportedAudioRoutes, d.mSupportedAudioRoutes) && Objects.equals(mDisconnectCause, d.mDisconnectCause) && Objects.equals(mConnectTimeMillis, d.mConnectTimeMillis) && Objects.equals(mGatewayInfo, d.mGatewayInfo) && @@ -534,6 +545,7 @@ public final class Call { Objects.hashCode(mAccountHandle) + Objects.hashCode(mCallCapabilities) + Objects.hashCode(mCallProperties) + + Objects.hashCode(mSupportedAudioRoutes) + Objects.hashCode(mDisconnectCause) + Objects.hashCode(mConnectTimeMillis) + Objects.hashCode(mGatewayInfo) + @@ -552,6 +564,7 @@ public final class Call { PhoneAccountHandle accountHandle, int capabilities, int properties, + int audioRoutes, DisconnectCause disconnectCause, long connectTimeMillis, GatewayInfo gatewayInfo, @@ -566,6 +579,7 @@ public final class Call { mAccountHandle = accountHandle; mCallCapabilities = capabilities; mCallProperties = properties; + mSupportedAudioRoutes = audioRoutes; mDisconnectCause = disconnectCause; mConnectTimeMillis = connectTimeMillis; mGatewayInfo = gatewayInfo; @@ -1008,6 +1022,7 @@ public final class Call { parcelableCall.getAccountHandle(), parcelableCall.getCapabilities(), parcelableCall.getProperties(), + parcelableCall.getSupportedAudioRoutes(), parcelableCall.getDisconnectCause(), parcelableCall.getConnectTimeMillis(), parcelableCall.getGatewayInfo(), diff --git a/telecomm/java/android/telecom/CallAudioState.java b/telecomm/java/android/telecom/CallAudioState.java index 2b1672209a3df..f601d8b545ac9 100644 --- a/telecomm/java/android/telecom/CallAudioState.java +++ b/telecomm/java/android/telecom/CallAudioState.java @@ -44,8 +44,12 @@ public final class CallAudioState implements Parcelable { */ public static final int ROUTE_WIRED_OR_EARPIECE = ROUTE_EARPIECE | ROUTE_WIRED_HEADSET; - /** Bit mask of all possible audio routes. */ - private static final int ROUTE_ALL = ROUTE_EARPIECE | ROUTE_BLUETOOTH | ROUTE_WIRED_HEADSET | + /** + * Bit mask of all possible audio routes. + * + * @hide + **/ + public static final int ROUTE_ALL = ROUTE_EARPIECE | ROUTE_BLUETOOTH | ROUTE_WIRED_HEADSET | ROUTE_SPEAKER; private final boolean isMuted; diff --git a/telecomm/java/android/telecom/Connection.java b/telecomm/java/android/telecom/Connection.java index 520a1d7254e74..a9c1bf5809d48 100644 --- a/telecomm/java/android/telecom/Connection.java +++ b/telecomm/java/android/telecom/Connection.java @@ -416,6 +416,7 @@ public abstract class Connection extends Conferenceable { public void onRingbackRequested(Connection c, boolean ringback) {} public void onDestroyed(Connection c) {} public void onConnectionCapabilitiesChanged(Connection c, int capabilities) {} + public void onSupportedAudioRoutesChanged(Connection c, int supportedAudioRoutes) {} public void onVideoProviderChanged( Connection c, VideoProvider videoProvider) {} public void onAudioModeIsVoipChanged(Connection c, boolean isVoip) {} @@ -1082,6 +1083,7 @@ public abstract class Connection extends Conferenceable { private int mCallerDisplayNamePresentation; private boolean mRingbackRequested = false; private int mConnectionCapabilities; + private int mSupportedAudioRoutes = CallAudioState.ROUTE_ALL; private VideoProvider mVideoProvider; private boolean mAudioModeIsVoip; private long mConnectTimeMillis = Conference.CONNECT_TIME_NOT_SPECIFIED; @@ -1305,6 +1307,15 @@ public abstract class Connection extends Conferenceable { return mConnectionCapabilities; } + /** + * Returns the connection's supported audio routes. + * + * @hide + */ + public final int getSupportedAudioRoutes() { + return mSupportedAudioRoutes; + } + /** * Sets the value of the {@link #getAddress()} property. * @@ -1501,6 +1512,22 @@ public abstract class Connection extends Conferenceable { } } + /** + * Sets the supported audio routes. + * + * @param supportedAudioRoutes the supported audio routes as a bitmask. + * See {@link CallAudioState} + * @hide + */ + public final void setSupportedAudioRoutes(int supportedAudioRoutes) { + if (mSupportedAudioRoutes != supportedAudioRoutes) { + mSupportedAudioRoutes = supportedAudioRoutes; + for (Listener l : mListeners) { + l.onSupportedAudioRoutesChanged(this, mSupportedAudioRoutes); + } + } + } + /** * Tears down the Connection object. */ diff --git a/telecomm/java/android/telecom/ConnectionService.java b/telecomm/java/android/telecom/ConnectionService.java index ceaa1bfb2754e..9738a26b21a91 100644 --- a/telecomm/java/android/telecom/ConnectionService.java +++ b/telecomm/java/android/telecom/ConnectionService.java @@ -669,6 +669,7 @@ public abstract class ConnectionService extends Service { request.getAccountHandle(), connection.getState(), connection.getConnectionCapabilities(), + connection.getSupportedAudioRoutes(), connection.getAddress(), connection.getAddressPresentation(), connection.getCallerDisplayName(), @@ -1011,6 +1012,7 @@ public abstract class ConnectionService extends Service { phoneAccountHandle, connection.getState(), connection.getConnectionCapabilities(), + connection.getSupportedAudioRoutes(), connection.getAddress(), connection.getAddressPresentation(), connection.getCallerDisplayName(), diff --git a/telecomm/java/android/telecom/ParcelableCall.java b/telecomm/java/android/telecom/ParcelableCall.java index 8cf4aebe840e0..599c210585f47 100644 --- a/telecomm/java/android/telecom/ParcelableCall.java +++ b/telecomm/java/android/telecom/ParcelableCall.java @@ -39,6 +39,7 @@ public final class ParcelableCall implements Parcelable { private final List mCannedSmsResponses; private final int mCapabilities; private final int mProperties; + private final int mSupportedAudioRoutes; private final long mConnectTimeMillis; private final Uri mHandle; private final int mHandlePresentation; @@ -64,6 +65,7 @@ public final class ParcelableCall implements Parcelable { List cannedSmsResponses, int capabilities, int properties, + int supportedAudioRoutes, long connectTimeMillis, Uri handle, int handlePresentation, @@ -86,6 +88,7 @@ public final class ParcelableCall implements Parcelable { mCannedSmsResponses = cannedSmsResponses; mCapabilities = capabilities; mProperties = properties; + mSupportedAudioRoutes = supportedAudioRoutes; mConnectTimeMillis = connectTimeMillis; mHandle = handle; mHandlePresentation = handlePresentation; @@ -137,6 +140,11 @@ public final class ParcelableCall implements Parcelable { /** Bitmask of properties of the call. */ public int getProperties() { return mProperties; } + /** Bitmask of supported routes of the call */ + public int getSupportedAudioRoutes() { + return mSupportedAudioRoutes; + } + /** The time that the call switched to the active state. */ public long getConnectTimeMillis() { return mConnectTimeMillis; @@ -291,6 +299,7 @@ public final class ParcelableCall implements Parcelable { source.readList(conferenceableCallIds, classLoader); Bundle intentExtras = source.readBundle(classLoader); Bundle extras = source.readBundle(classLoader); + int supportedAudioRoutes = source.readInt(); return new ParcelableCall( id, state, @@ -298,6 +307,7 @@ public final class ParcelableCall implements Parcelable { cannedSmsResponses, capabilities, properties, + supportedAudioRoutes, connectTimeMillis, handle, handlePresentation, @@ -354,6 +364,7 @@ public final class ParcelableCall implements Parcelable { destination.writeList(mConferenceableCallIds); destination.writeBundle(mIntentExtras); destination.writeBundle(mExtras); + destination.writeInt(mSupportedAudioRoutes); } @Override diff --git a/telecomm/java/android/telecom/ParcelableConnection.java b/telecomm/java/android/telecom/ParcelableConnection.java index fe0a4d8eef3d8..3ce917600e823 100644 --- a/telecomm/java/android/telecom/ParcelableConnection.java +++ b/telecomm/java/android/telecom/ParcelableConnection.java @@ -36,6 +36,7 @@ public final class ParcelableConnection implements Parcelable { private final PhoneAccountHandle mPhoneAccount; private final int mState; private final int mConnectionCapabilities; + private final int mSupportedAudioRoutes; private final Uri mAddress; private final int mAddressPresentation; private final String mCallerDisplayName; @@ -55,6 +56,7 @@ public final class ParcelableConnection implements Parcelable { PhoneAccountHandle phoneAccount, int state, int capabilities, + int supportedAudioRoutes, Uri address, int addressPresentation, String callerDisplayName, @@ -71,6 +73,7 @@ public final class ParcelableConnection implements Parcelable { mPhoneAccount = phoneAccount; mState = state; mConnectionCapabilities = capabilities; + mSupportedAudioRoutes = supportedAudioRoutes; mAddress = address; mAddressPresentation = addressPresentation; mCallerDisplayName = callerDisplayName; @@ -99,6 +102,10 @@ public final class ParcelableConnection implements Parcelable { return mConnectionCapabilities; } + public int getSupportedAudioRoutes() { + return mSupportedAudioRoutes; + } + public Uri getHandle() { return mAddress; } @@ -189,11 +196,13 @@ public final class ParcelableConnection implements Parcelable { List conferenceableConnectionIds = new ArrayList<>(); source.readStringList(conferenceableConnectionIds); Bundle extras = source.readBundle(classLoader); + int supportedAudioRoutes = source.readInt(); return new ParcelableConnection( phoneAccount, state, capabilities, + supportedAudioRoutes, address, addressPresentation, callerDisplayName, @@ -241,5 +250,6 @@ public final class ParcelableConnection implements Parcelable { destination.writeParcelable(mDisconnectCause, 0); destination.writeStringList(mConferenceableConnectionIds); destination.writeBundle(mExtras); + destination.writeInt(mSupportedAudioRoutes); } } diff --git a/telecomm/java/android/telecom/PhoneAccount.java b/telecomm/java/android/telecom/PhoneAccount.java index b64043c6e07a7..e7f5e3c3c3e5d 100644 --- a/telecomm/java/android/telecom/PhoneAccount.java +++ b/telecomm/java/android/telecom/PhoneAccount.java @@ -17,15 +17,6 @@ package android.telecom; import android.annotation.SystemApi; -import android.content.ComponentName; -import android.content.Context; -import android.content.pm.PackageManager; -import android.content.res.Resources.NotFoundException; -import android.graphics.Bitmap; -import android.graphics.Color; -import android.graphics.drawable.BitmapDrawable; -import android.graphics.drawable.ColorDrawable; -import android.graphics.drawable.Drawable; import android.graphics.drawable.Icon; import android.net.Uri; import android.os.Parcel; @@ -36,7 +27,6 @@ import java.lang.String; import java.util.ArrayList; import java.util.Collections; import java.util.List; -import java.util.MissingResourceException; /** * Represents a distinct method to place or receive a phone call. Apps which can place calls and @@ -167,6 +157,7 @@ public final class PhoneAccount implements Parcelable { private final CharSequence mLabel; private final CharSequence mShortDescription; private final List mSupportedUriSchemes; + private final int mSupportedAudioRoutes; private final Icon mIcon; private boolean mIsEnabled; @@ -174,10 +165,12 @@ public final class PhoneAccount implements Parcelable { * Helper class for creating a {@link PhoneAccount}. */ public static class Builder { + private PhoneAccountHandle mAccountHandle; private Uri mAddress; private Uri mSubscriptionAddress; private int mCapabilities; + private int mSupportedAudioRoutes = CallAudioState.ROUTE_ALL; private int mHighlightColor = NO_HIGHLIGHT_COLOR; private CharSequence mLabel; private CharSequence mShortDescription; @@ -210,6 +203,7 @@ public final class PhoneAccount implements Parcelable { mSupportedUriSchemes.addAll(phoneAccount.getSupportedUriSchemes()); mIcon = phoneAccount.getIcon(); mIsEnabled = phoneAccount.isEnabled(); + mSupportedAudioRoutes = phoneAccount.getSupportedAudioRoutes(); } /** @@ -319,6 +313,18 @@ public final class PhoneAccount implements Parcelable { return this; } + /** + * Sets the audio routes supported by this {@link PhoneAccount}. + * + * @param routes bit mask of available routes. + * @return The builder. + * @hide + */ + public Builder setSupportedAudioRoutes(int routes) { + mSupportedAudioRoutes = routes; + return this; + } + /** * Creates an instance of a {@link PhoneAccount} based on the current builder settings. * @@ -340,6 +346,7 @@ public final class PhoneAccount implements Parcelable { mLabel, mShortDescription, mSupportedUriSchemes, + mSupportedAudioRoutes, mIsEnabled); } } @@ -354,6 +361,7 @@ public final class PhoneAccount implements Parcelable { CharSequence label, CharSequence shortDescription, List supportedUriSchemes, + int supportedAudioRoutes, boolean isEnabled) { mAccountHandle = account; mAddress = address; @@ -364,6 +372,7 @@ public final class PhoneAccount implements Parcelable { mLabel = label; mShortDescription = shortDescription; mSupportedUriSchemes = Collections.unmodifiableList(supportedUriSchemes); + mSupportedAudioRoutes = supportedAudioRoutes; mIsEnabled = isEnabled; } @@ -462,6 +471,15 @@ public final class PhoneAccount implements Parcelable { return mSupportedUriSchemes; } + /** + * The audio routes supported by this {@code PhoneAccount}. + * + * @hide + */ + public int getSupportedAudioRoutes() { + return mSupportedAudioRoutes; + } + /** * The icon to represent this {@code PhoneAccount}. * @@ -561,6 +579,7 @@ public final class PhoneAccount implements Parcelable { mIcon.writeToParcel(out, flags); } out.writeByte((byte) (mIsEnabled ? 1 : 0)); + out.writeInt(mSupportedAudioRoutes); } public static final Creator CREATOR @@ -603,6 +622,7 @@ public final class PhoneAccount implements Parcelable { mIcon = null; } mIsEnabled = in.readByte() == 1; + mSupportedAudioRoutes = in.readInt(); } @Override @@ -613,6 +633,8 @@ public final class PhoneAccount implements Parcelable { .append(mAccountHandle) .append(" Capabilities: ") .append(mCapabilities) + .append(" Audio Routes: ") + .append(mSupportedAudioRoutes) .append(" Schemes: "); for (String scheme : mSupportedUriSchemes) { sb.append(scheme)