diff options
-rwxr-xr-x | api/system-current.txt | 13 | ||||
-rw-r--r-- | core/api/system-current.txt | 13 | ||||
-rw-r--r-- | telephony/java/android/telephony/ims/AudioCodecAttributes.aidl | 20 | ||||
-rw-r--r-- | telephony/java/android/telephony/ims/AudioCodecAttributes.java | 131 | ||||
-rw-r--r-- | telephony/java/android/telephony/ims/ImsStreamMediaProfile.java | 37 |
5 files changed, 208 insertions, 6 deletions
diff --git a/api/system-current.txt b/api/system-current.txt index 5ea8e438d064..dc90877569d5 100755 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -11735,6 +11735,17 @@ package android.telephony.euicc { package android.telephony.ims { + public final class AudioCodecAttributes implements android.os.Parcelable { + ctor public AudioCodecAttributes(float, @NonNull android.util.Range<java.lang.Float>, float, @NonNull android.util.Range<java.lang.Float>); + method public int describeContents(); + method public float getBandwidthKhz(); + method @NonNull public android.util.Range<java.lang.Float> getBandwidthRangeKhz(); + method public float getBitrateKbps(); + method @NonNull public android.util.Range<java.lang.Float> getBitrateRangeKbps(); + method public void writeToParcel(@NonNull android.os.Parcel, int); + field @NonNull public static final android.os.Parcelable.Creator<android.telephony.ims.AudioCodecAttributes> CREATOR; + } + public final class ImsCallForwardInfo implements android.os.Parcelable { ctor public ImsCallForwardInfo(int, int, int, int, @NonNull String, int); method public int describeContents(); @@ -12103,6 +12114,7 @@ package android.telephony.ims { ctor public ImsStreamMediaProfile(int, int, int, int, int); method public void copyFrom(android.telephony.ims.ImsStreamMediaProfile); method public int describeContents(); + method @Nullable public android.telephony.ims.AudioCodecAttributes getAudioCodecAttributes(); method public int getAudioDirection(); method public int getAudioQuality(); method public int getRttMode(); @@ -12110,6 +12122,7 @@ package android.telephony.ims { method public int getVideoQuality(); method public boolean isReceivingRttAudio(); method public boolean isRttCall(); + method public void setAudioCodecAttributes(@NonNull android.telephony.ims.AudioCodecAttributes); method public void setReceivingRttAudio(boolean); method public void setRttMode(int); method public void writeToParcel(android.os.Parcel, int); diff --git a/core/api/system-current.txt b/core/api/system-current.txt index 7db113db8e7e..8b1e65fe3641 100644 --- a/core/api/system-current.txt +++ b/core/api/system-current.txt @@ -10617,6 +10617,17 @@ package android.telephony.euicc { package android.telephony.ims { + public final class AudioCodecAttributes implements android.os.Parcelable { + ctor public AudioCodecAttributes(float, @NonNull android.util.Range<java.lang.Float>, float, @NonNull android.util.Range<java.lang.Float>); + method public int describeContents(); + method public float getBandwidthKhz(); + method @NonNull public android.util.Range<java.lang.Float> getBandwidthRangeKhz(); + method public float getBitrateKbps(); + method @NonNull public android.util.Range<java.lang.Float> getBitrateRangeKbps(); + method public void writeToParcel(@NonNull android.os.Parcel, int); + field @NonNull public static final android.os.Parcelable.Creator<android.telephony.ims.AudioCodecAttributes> CREATOR; + } + public final class ImsCallForwardInfo implements android.os.Parcelable { ctor public ImsCallForwardInfo(int, int, int, int, @NonNull String, int); method public int describeContents(); @@ -10985,6 +10996,7 @@ package android.telephony.ims { ctor public ImsStreamMediaProfile(int, int, int, int, int); method public void copyFrom(android.telephony.ims.ImsStreamMediaProfile); method public int describeContents(); + method @Nullable public android.telephony.ims.AudioCodecAttributes getAudioCodecAttributes(); method public int getAudioDirection(); method public int getAudioQuality(); method public int getRttMode(); @@ -10992,6 +11004,7 @@ package android.telephony.ims { method public int getVideoQuality(); method public boolean isReceivingRttAudio(); method public boolean isRttCall(); + method public void setAudioCodecAttributes(@NonNull android.telephony.ims.AudioCodecAttributes); method public void setReceivingRttAudio(boolean); method public void setRttMode(int); method public void writeToParcel(android.os.Parcel, int); diff --git a/telephony/java/android/telephony/ims/AudioCodecAttributes.aidl b/telephony/java/android/telephony/ims/AudioCodecAttributes.aidl new file mode 100644 index 000000000000..bbab548bcd37 --- /dev/null +++ b/telephony/java/android/telephony/ims/AudioCodecAttributes.aidl @@ -0,0 +1,20 @@ +/* + * Copyright (c) 2020 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +package android.telephony.ims; + +parcelable AudioCodecAttributes; diff --git a/telephony/java/android/telephony/ims/AudioCodecAttributes.java b/telephony/java/android/telephony/ims/AudioCodecAttributes.java new file mode 100644 index 000000000000..7b6ab00b93e4 --- /dev/null +++ b/telephony/java/android/telephony/ims/AudioCodecAttributes.java @@ -0,0 +1,131 @@ +/* + * Copyright (C) 2020 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.telephony.ims; + +import android.annotation.NonNull; +import android.annotation.SystemApi; +import android.os.Parcel; +import android.os.Parcelable; +import android.util.Range; + +/** + * Parcelable object to handle audio codec attributes. + * It provides the audio codec bitrate, bandwidth and their upper/lower bound. + * + * @hide + */ +@SystemApi +public final class AudioCodecAttributes implements Parcelable { + // The audio codec bitrate in kbps. + private float mBitrateKbps; + // The range of the audio codec bitrate in kbps. + private Range<Float> mBitrateRangeKbps; + // The audio codec bandwidth in kHz. + private float mBandwidthKhz; + // The range of the audio codec bandwidth in kHz. + private Range<Float> mBandwidthRangeKhz; + + + /** + * Constructor. + * + * @param bitrateKbps The audio codec bitrate in kbps. + * @param bitrateRangeKbps The range of the audio codec bitrate in kbps. + * @param bandwidthKhz The audio codec bandwidth in kHz. + * @param bandwidthRangeKhz The range of the audio codec bandwidth in kHz. + */ + + public AudioCodecAttributes(float bitrateKbps, @NonNull Range<Float> bitrateRangeKbps, + float bandwidthKhz, @NonNull Range<Float> bandwidthRangeKhz) { + mBitrateKbps = bitrateKbps; + mBitrateRangeKbps = bitrateRangeKbps; + mBandwidthKhz = bandwidthKhz; + mBandwidthRangeKhz = bandwidthRangeKhz; + } + + private AudioCodecAttributes(Parcel in) { + mBitrateKbps = in.readFloat(); + mBitrateRangeKbps = new Range<>(in.readFloat(), in.readFloat()); + mBandwidthKhz = in.readFloat(); + mBandwidthRangeKhz = new Range<>(in.readFloat(), in.readFloat()); + } + + @Override + public void writeToParcel(@NonNull Parcel out, int flags) { + out.writeFloat(mBitrateKbps); + out.writeFloat(mBitrateRangeKbps.getLower()); + out.writeFloat(mBitrateRangeKbps.getUpper()); + out.writeFloat(mBandwidthKhz); + out.writeFloat(mBandwidthRangeKhz.getLower()); + out.writeFloat(mBandwidthRangeKhz.getUpper()); + } + + @Override + public int describeContents() { + return 0; + } + + public static final @NonNull Creator<AudioCodecAttributes> CREATOR = + new Creator<AudioCodecAttributes>() { + @Override + public AudioCodecAttributes createFromParcel(Parcel in) { + return new AudioCodecAttributes(in); + } + + @Override + public AudioCodecAttributes[] newArray(int size) { + return new AudioCodecAttributes[size]; + } + }; + + /** + * @return the exact value of the audio codec bitrate in kbps. + */ + public float getBitrateKbps() { + return mBitrateKbps; + } + + /** + * @return the range of the audio codec bitrate in kbps + */ + public @NonNull Range<Float> getBitrateRangeKbps() { + return mBitrateRangeKbps; + } + + /** + * @return the exact value of the audio codec bandwidth in kHz. + */ + public float getBandwidthKhz() { + return mBandwidthKhz; + } + + /** + * @return the range of the audio codec bandwidth in kHz. + */ + public @NonNull Range<Float> getBandwidthRangeKhz() { + return mBandwidthRangeKhz; + } + + @NonNull + @Override + public String toString() { + return "{ bitrateKbps=" + mBitrateKbps + + ", bitrateRangeKbps=" + mBitrateRangeKbps + + ", bandwidthKhz=" + mBandwidthKhz + + ", bandwidthRangeKhz=" + mBandwidthRangeKhz + " }"; + } +} diff --git a/telephony/java/android/telephony/ims/ImsStreamMediaProfile.java b/telephony/java/android/telephony/ims/ImsStreamMediaProfile.java index 131cb1a505fb..4aca48b58582 100644 --- a/telephony/java/android/telephony/ims/ImsStreamMediaProfile.java +++ b/telephony/java/android/telephony/ims/ImsStreamMediaProfile.java @@ -17,6 +17,7 @@ package android.telephony.ims; import android.annotation.NonNull; +import android.annotation.Nullable; import android.annotation.SystemApi; import android.compat.annotation.UnsupportedAppUsage; import android.os.Parcel; @@ -89,6 +90,9 @@ public final class ImsStreamMediaProfile implements Parcelable { /** @hide */ @UnsupportedAppUsage public int mAudioDirection; + // Audio codec attributes + private AudioCodecAttributes mAudioCodecAttributes; + // Video related information /** @hide */ public int mVideoQuality; @@ -190,6 +194,7 @@ public final class ImsStreamMediaProfile implements Parcelable { public void copyFrom(ImsStreamMediaProfile profile) { mAudioQuality = profile.mAudioQuality; mAudioDirection = profile.mAudioDirection; + mAudioCodecAttributes = profile.mAudioCodecAttributes; mVideoQuality = profile.mVideoQuality; mVideoDirection = profile.mVideoDirection; mRttMode = profile.mRttMode; @@ -198,12 +203,13 @@ public final class ImsStreamMediaProfile implements Parcelable { @NonNull @Override public String toString() { - return "{ audioQuality=" + mAudioQuality + - ", audioDirection=" + mAudioDirection + - ", videoQuality=" + mVideoQuality + - ", videoDirection=" + mVideoDirection + - ", rttMode=" + mRttMode + - ", hasRttAudioSpeech=" + mIsReceivingRttAudio + " }"; + return "{ audioQuality=" + mAudioQuality + + ", audioDirection=" + mAudioDirection + + ", audioCodecAttribute=" + mAudioCodecAttributes + + ", videoQuality=" + mVideoQuality + + ", videoDirection=" + mVideoDirection + + ", rttMode=" + mRttMode + + ", hasRttAudioSpeech=" + mIsReceivingRttAudio + " }"; } @Override @@ -215,6 +221,7 @@ public final class ImsStreamMediaProfile implements Parcelable { public void writeToParcel(Parcel out, int flags) { out.writeInt(mAudioQuality); out.writeInt(mAudioDirection); + out.writeTypedObject(mAudioCodecAttributes, flags); out.writeInt(mVideoQuality); out.writeInt(mVideoDirection); out.writeInt(mRttMode); @@ -224,6 +231,7 @@ public final class ImsStreamMediaProfile implements Parcelable { private void readFromParcel(Parcel in) { mAudioQuality = in.readInt(); mAudioDirection = in.readInt(); + mAudioCodecAttributes = in.readTypedObject(AudioCodecAttributes.CREATOR); mVideoQuality = in.readInt(); mVideoDirection = in.readInt(); mRttMode = in.readInt(); @@ -274,6 +282,23 @@ public final class ImsStreamMediaProfile implements Parcelable { return mAudioDirection; } + /** + * Get the audio codec attributes {@link AudioCodecAttributes} which may be {@code null} if + * ImsService doesn't support this information. + * @return audio codec attributes + */ + public @Nullable AudioCodecAttributes getAudioCodecAttributes() { + return mAudioCodecAttributes; + } + + /** + * Set the audio codec attributes {@link AudioCodecAttributes} which includes bitrate and + * bandwidth information. + */ + public void setAudioCodecAttributes(@NonNull AudioCodecAttributes audioCodecAttributes) { + mAudioCodecAttributes = audioCodecAttributes; + } + public int getVideoQuality() { return mVideoQuality; } |