Loading core/api/current.txt +13 −2 Original line number Diff line number Diff line Loading @@ -42166,6 +42166,15 @@ package android.telephony.ims { field public static final int EXTRA_CODE_CALL_RETRY_SILENT_REDIAL = 2; // 0x2 } public final class ImsRegistrationAttributes implements android.os.Parcelable { method public int describeContents(); method public int getAttributeFlags(); method @NonNull public java.util.Set<java.lang.String> getFeatureTags(); method public int getTransportType(); method public void writeToParcel(@NonNull android.os.Parcel, int); field @NonNull public static final android.os.Parcelable.Creator<android.telephony.ims.ImsRegistrationAttributes> CREATOR; } public class RcsUceAdapter { method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public boolean isUceSettingEnabled() throws android.telephony.ims.ImsException; } Loading @@ -42182,8 +42191,10 @@ package android.telephony.ims { public static class RegistrationManager.RegistrationCallback { ctor public RegistrationManager.RegistrationCallback(); method public void onRegistered(int); method public void onRegistering(int); method @Deprecated public void onRegistered(int); method public void onRegistered(@NonNull android.telephony.ims.ImsRegistrationAttributes); method @Deprecated public void onRegistering(int); method public void onRegistering(@NonNull android.telephony.ims.ImsRegistrationAttributes); method public void onTechnologyChangeFailed(int, @NonNull android.telephony.ims.ImsReasonInfo); method public void onUnregistered(@NonNull android.telephony.ims.ImsReasonInfo); } core/api/system-current.txt +14 −0 Original line number Diff line number Diff line Loading @@ -11552,6 +11552,8 @@ package android.telephony.ims { @Deprecated public static class ImsMmTelManager.RegistrationCallback extends android.telephony.ims.RegistrationManager.RegistrationCallback { ctor @Deprecated public ImsMmTelManager.RegistrationCallback(); method @Deprecated public void onRegistered(int); method @Deprecated public void onRegistering(int); } public class ImsRcsManager { Loading @@ -11569,6 +11571,16 @@ package android.telephony.ims { field public static final String EXTRA_MSG_SERVICE_NOT_AUTHORIZED = "Forbidden. Not Authorized for Service"; } public final class ImsRegistrationAttributes implements android.os.Parcelable { method public int getRegistrationTechnology(); } public static final class ImsRegistrationAttributes.Builder { ctor public ImsRegistrationAttributes.Builder(int); method @NonNull public android.telephony.ims.ImsRegistrationAttributes build(); method @NonNull public android.telephony.ims.ImsRegistrationAttributes.Builder setFeatureTags(@NonNull java.util.Set<java.lang.String>); } public class ImsService extends android.app.Service { ctor public ImsService(); method public android.telephony.ims.feature.MmTelFeature createMmTelFeature(int); Loading Loading @@ -12352,7 +12364,9 @@ package android.telephony.ims.stub { ctor public ImsRegistrationImplBase(); method public final void onDeregistered(android.telephony.ims.ImsReasonInfo); method public final void onRegistered(int); method public final void onRegistered(@NonNull android.telephony.ims.ImsRegistrationAttributes); method public final void onRegistering(int); method public final void onRegistering(@NonNull android.telephony.ims.ImsRegistrationAttributes); method public final void onSubscriberAssociatedUriChanged(android.net.Uri[]); method public final void onTechnologyChangeFailed(int, android.telephony.ims.ImsReasonInfo); method public void triggerFullNetworkRegistration(@IntRange(from=100, to=699) int, @Nullable String); telephony/java/android/telephony/ims/ImsRegistrationAttributes.aidl 0 → 100644 +19 −0 Original line number Diff line number Diff line /* * Copyright (c) 2021 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 ImsRegistrationAttributes; telephony/java/android/telephony/ims/ImsRegistrationAttributes.java 0 → 100644 +219 −0 Original line number Diff line number Diff line /* * Copyright (C) 2021 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.Nullable; import android.annotation.SystemApi; import android.os.Parcel; import android.os.Parcelable; import android.telephony.AccessNetworkConstants; import android.telephony.ims.stub.ImsRegistrationImplBase; import android.util.ArraySet; import java.util.ArrayList; import java.util.Collections; import java.util.Objects; import java.util.Set; /** * Contains the attributes associated with the current IMS registration. */ public final class ImsRegistrationAttributes implements Parcelable { /** * Builder for creating {@link ImsRegistrationAttributes} instances. * @hide */ @SystemApi public static final class Builder { private final int mRegistrationTech; private Set<String> mFeatureTags = Collections.emptySet(); /** * Build a new instance of {@link ImsRegistrationAttributes}. * * @param registrationTech The Radio Access Technology that IMS is registered on. */ public Builder(@ImsRegistrationImplBase.ImsRegistrationTech int registrationTech) { mRegistrationTech = registrationTech; } /** * Optional IMS feature tags included in this IMS registration. * @param tags A set of Strings containing the MMTEL and RCS feature tags associated with * the IMS registration. This information is used for services such as the UCE * service to ascertain the complete IMS registration state to ensure the SIP * PUBLISH is accurate. The format of the set of feature tags must be one feature * tag key and value per entry. Each feature tag will contain the feature tag name * and string value (if applicable), even if they have the same feature tag name. * For example, * {@code +g.3gpp.icsi-ref="urn%3Aurn-7%3A3gpp-service.ims.icsi.oma.cpm.msg, * urn%3Aurn-7%3A3gpp-service.ims.icsi.oma.cpm.session", +g.gsma.callcomposer} must * be split into three feature tag entries: * {@code {+g.3gpp.icsi-ref="urn%3Aurn-7%3A3gpp-service.ims.icsi.oma.cpm.msg", * +g.3gpp.icsi-ref="urn%3Aurn-7%3A3gpp-service.ims.icsi.oma.cpm.session", * +g.gsma.callcomposer}}. */ public @NonNull Builder setFeatureTags(@NonNull Set<String> tags) { if (tags == null) { throw new IllegalArgumentException("feature tag set must not be null"); } mFeatureTags = new ArraySet<>(tags); return this; } /** * @return A new instance created from this builder. */ public @NonNull ImsRegistrationAttributes build() { return new ImsRegistrationAttributes(mRegistrationTech, RegistrationManager.getAccessType(mRegistrationTech), 0 /* No attributes in AOSP */, mFeatureTags); } } private final int mRegistrationTech; private final int mTransportType; private final int mImsAttributeFlags; private final ArrayList<String> mFeatureTags; /** * Create a new {@link ImsRegistrationAttributes} instance. * * @param registrationTech The technology that IMS has been registered on. * @param transportType The transport type that IMS has been registered on. * @param imsAttributeFlags The attributes associated with the IMS registration. * @param featureTags The feature tags included in the IMS registration. * @see Builder * @hide */ public ImsRegistrationAttributes( @ImsRegistrationImplBase.ImsRegistrationTech int registrationTech, @AccessNetworkConstants.TransportType int transportType, int imsAttributeFlags, @Nullable Set<String> featureTags) { mRegistrationTech = registrationTech; mTransportType = transportType; mImsAttributeFlags = imsAttributeFlags; mFeatureTags = new ArrayList<>(featureTags); } /**@hide*/ public ImsRegistrationAttributes(Parcel source) { mRegistrationTech = source.readInt(); mTransportType = source.readInt(); mImsAttributeFlags = source.readInt(); mFeatureTags = new ArrayList<>(); source.readList(mFeatureTags, null /*classloader*/); } /** * @return The Radio Access Technology that the IMS registration has been registered over. * @hide */ @SystemApi public @ImsRegistrationImplBase.ImsRegistrationTech int getRegistrationTechnology() { return mRegistrationTech; } /** * @return The access network transport type that IMS has been registered over. */ public @AccessNetworkConstants.TransportType int getTransportType() { return mTransportType; } /** * @return A bit-mask containing attributes associated with the IMS registration. */ public int getAttributeFlags() { return mImsAttributeFlags; } /** * Gets the Set of feature tags associated with the current IMS registration, if the IMS * service supports supplying this information. * <p> * The format of the set of feature tags will be one feature tag key and value per entry and * will potentially contain MMTEL and RCS feature tags, depending the configuration of the IMS * service associated with the registration indications. Each feature tag will contain the * feature tag name and string value (if applicable), even if they have the same feature tag * name. For example, {@code +g.3gpp.icsi-ref="urn%3Aurn-7%3A3gpp-service.ims.icsi.oma.cpm.msg, * urn%3Aurn-7%3A3gpp-service.ims.icsi.oma.cpm.session", +g.gsma.callcomposer} will be split * into three feature tag entries: * {@code {+g.3gpp.icsi-ref="urn%3Aurn-7%3A3gpp-service.ims.icsi.oma.cpm.msg", * +g.3gpp.icsi-ref="urn%3Aurn-7%3A3gpp-service.ims.icsi.oma.cpm.session", * +g.gsma.callcomposer}}. * @return The Set of feature tags associated with the current IMS registration. */ public @NonNull Set<String> getFeatureTags() { if (mFeatureTags == null) { return Collections.emptySet(); } return new ArraySet<>(mFeatureTags); } @Override public int describeContents() { return 0; } @Override public void writeToParcel(@NonNull Parcel dest, int flags) { dest.writeInt(mRegistrationTech); dest.writeInt(mTransportType); dest.writeInt(mImsAttributeFlags); dest.writeList(mFeatureTags); } public static final @NonNull Creator<ImsRegistrationAttributes> CREATOR = new Creator<ImsRegistrationAttributes>() { @Override public ImsRegistrationAttributes createFromParcel(Parcel source) { return new ImsRegistrationAttributes(source); } @Override public ImsRegistrationAttributes[] newArray(int size) { return new ImsRegistrationAttributes[size]; } }; @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; ImsRegistrationAttributes that = (ImsRegistrationAttributes) o; return mRegistrationTech == that.mRegistrationTech && mTransportType == that.mTransportType && mImsAttributeFlags == that.mImsAttributeFlags && Objects.equals(mFeatureTags, that.mFeatureTags); } @Override public int hashCode() { return Objects.hash(mRegistrationTech, mTransportType, mImsAttributeFlags, mFeatureTags); } @Override public String toString() { return "ImsRegistrationAttributes { transportType= " + mTransportType + ", attributeFlags=" + mImsAttributeFlags + ", featureTags=[" + mFeatureTags + "]}"; } } telephony/java/android/telephony/ims/RegistrationManager.java +47 −21 Original line number Diff line number Diff line Loading @@ -71,7 +71,6 @@ public interface RegistrationManager { */ int REGISTRATION_STATE_REGISTERED = 2; /**@hide*/ // Translate ImsRegistrationImplBase API to new AccessNetworkConstant because WLAN // and WWAN are more accurate constants. Loading @@ -79,7 +78,8 @@ public interface RegistrationManager { new HashMap<Integer, Integer>() {{ // Map NONE to -1 to make sure that we handle the REGISTRATION_TECH_NONE // case, since it is defined. put(ImsRegistrationImplBase.REGISTRATION_TECH_NONE, -1); put(ImsRegistrationImplBase.REGISTRATION_TECH_NONE, AccessNetworkConstants.TRANSPORT_TYPE_INVALID); put(ImsRegistrationImplBase.REGISTRATION_TECH_LTE, AccessNetworkConstants.TRANSPORT_TYPE_WWAN); put(ImsRegistrationImplBase.REGISTRATION_TECH_IWLAN, Loading @@ -102,6 +102,20 @@ public interface RegistrationManager { } } /** * @param regtech The registration technology. * @return The Access Network type from registration technology. * @hide */ static int getAccessType(int regtech) { if (!RegistrationManager.IMS_REG_TO_ACCESS_TYPE_MAP.containsKey(regtech)) { Log.w("RegistrationManager", "getAccessType - invalid regType returned: " + regtech); return AccessNetworkConstants.TRANSPORT_TYPE_INVALID; } return RegistrationManager.IMS_REG_TO_ACCESS_TYPE_MAP.get(regtech); } /** * Callback class for receiving IMS network Registration callback events. * @see #registerImsRegistrationCallback(Executor, RegistrationCallback) Loading @@ -119,26 +133,24 @@ public interface RegistrationManager { } @Override public void onRegistered(int imsRadioTech) { public void onRegistered(ImsRegistrationAttributes attr) { if (mLocalCallback == null) return; long callingIdentity = Binder.clearCallingIdentity(); try { mExecutor.execute(() -> mLocalCallback.onRegistered(getAccessType(imsRadioTech))); mExecutor.execute(() -> mLocalCallback.onRegistered(attr)); } finally { restoreCallingIdentity(callingIdentity); } } @Override public void onRegistering(int imsRadioTech) { public void onRegistering(ImsRegistrationAttributes attr) { if (mLocalCallback == null) return; long callingIdentity = Binder.clearCallingIdentity(); try { mExecutor.execute(() -> mLocalCallback.onRegistering(getAccessType(imsRadioTech))); mExecutor.execute(() -> mLocalCallback.onRegistering(attr)); } finally { restoreCallingIdentity(callingIdentity); } Loading Loading @@ -183,15 +195,6 @@ public interface RegistrationManager { private void setExecutor(Executor executor) { mExecutor = executor; } private static int getAccessType(int regType) { if (!RegistrationManager.IMS_REG_TO_ACCESS_TYPE_MAP.containsKey(regType)) { Log.w("RegistrationManager", "RegistrationBinder - invalid regType returned: " + regType); return -1; } return RegistrationManager.IMS_REG_TO_ACCESS_TYPE_MAP.get(regType); } } private final RegistrationBinder mBinder = new RegistrationBinder(this); Loading @@ -200,18 +203,41 @@ public interface RegistrationManager { * Notifies the framework when the IMS Provider is registered to the IMS network. * * @param imsTransportType the radio access technology. * @deprecated Use {@link #onRegistered(ImsRegistrationAttributes)} instead. */ public void onRegistered(@AccessNetworkConstants.TransportType int imsTransportType) { } /** * Notifies the framework when the IMS Provider is registered to the IMS network * with corresponding attributes. * * @param attributes The attributes associated with this IMS registration. */ public void onRegistered(@NonNull ImsRegistrationAttributes attributes) { // Default impl to keep backwards compatibility with old implementations onRegistered(attributes.getTransportType()); } /** * Notifies the framework when the IMS Provider is trying to register the IMS network. * * @param imsTransportType the radio access technology. * @deprecated Use {@link #onRegistering(ImsRegistrationAttributes)} instead. */ public void onRegistering(@AccessNetworkConstants.TransportType int imsTransportType) { } /** * Notifies the framework when the IMS Provider is trying to register the IMS network. * * @param attributes The attributes associated with this IMS registration. */ public void onRegistering(@NonNull ImsRegistrationAttributes attributes) { // Default impl to keep backwards compatibility with old implementations onRegistering(attributes.getTransportType()); } /** * Notifies the framework when the IMS Provider is unregistered from the IMS network. * Loading Loading
core/api/current.txt +13 −2 Original line number Diff line number Diff line Loading @@ -42166,6 +42166,15 @@ package android.telephony.ims { field public static final int EXTRA_CODE_CALL_RETRY_SILENT_REDIAL = 2; // 0x2 } public final class ImsRegistrationAttributes implements android.os.Parcelable { method public int describeContents(); method public int getAttributeFlags(); method @NonNull public java.util.Set<java.lang.String> getFeatureTags(); method public int getTransportType(); method public void writeToParcel(@NonNull android.os.Parcel, int); field @NonNull public static final android.os.Parcelable.Creator<android.telephony.ims.ImsRegistrationAttributes> CREATOR; } public class RcsUceAdapter { method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public boolean isUceSettingEnabled() throws android.telephony.ims.ImsException; } Loading @@ -42182,8 +42191,10 @@ package android.telephony.ims { public static class RegistrationManager.RegistrationCallback { ctor public RegistrationManager.RegistrationCallback(); method public void onRegistered(int); method public void onRegistering(int); method @Deprecated public void onRegistered(int); method public void onRegistered(@NonNull android.telephony.ims.ImsRegistrationAttributes); method @Deprecated public void onRegistering(int); method public void onRegistering(@NonNull android.telephony.ims.ImsRegistrationAttributes); method public void onTechnologyChangeFailed(int, @NonNull android.telephony.ims.ImsReasonInfo); method public void onUnregistered(@NonNull android.telephony.ims.ImsReasonInfo); }
core/api/system-current.txt +14 −0 Original line number Diff line number Diff line Loading @@ -11552,6 +11552,8 @@ package android.telephony.ims { @Deprecated public static class ImsMmTelManager.RegistrationCallback extends android.telephony.ims.RegistrationManager.RegistrationCallback { ctor @Deprecated public ImsMmTelManager.RegistrationCallback(); method @Deprecated public void onRegistered(int); method @Deprecated public void onRegistering(int); } public class ImsRcsManager { Loading @@ -11569,6 +11571,16 @@ package android.telephony.ims { field public static final String EXTRA_MSG_SERVICE_NOT_AUTHORIZED = "Forbidden. Not Authorized for Service"; } public final class ImsRegistrationAttributes implements android.os.Parcelable { method public int getRegistrationTechnology(); } public static final class ImsRegistrationAttributes.Builder { ctor public ImsRegistrationAttributes.Builder(int); method @NonNull public android.telephony.ims.ImsRegistrationAttributes build(); method @NonNull public android.telephony.ims.ImsRegistrationAttributes.Builder setFeatureTags(@NonNull java.util.Set<java.lang.String>); } public class ImsService extends android.app.Service { ctor public ImsService(); method public android.telephony.ims.feature.MmTelFeature createMmTelFeature(int); Loading Loading @@ -12352,7 +12364,9 @@ package android.telephony.ims.stub { ctor public ImsRegistrationImplBase(); method public final void onDeregistered(android.telephony.ims.ImsReasonInfo); method public final void onRegistered(int); method public final void onRegistered(@NonNull android.telephony.ims.ImsRegistrationAttributes); method public final void onRegistering(int); method public final void onRegistering(@NonNull android.telephony.ims.ImsRegistrationAttributes); method public final void onSubscriberAssociatedUriChanged(android.net.Uri[]); method public final void onTechnologyChangeFailed(int, android.telephony.ims.ImsReasonInfo); method public void triggerFullNetworkRegistration(@IntRange(from=100, to=699) int, @Nullable String);
telephony/java/android/telephony/ims/ImsRegistrationAttributes.aidl 0 → 100644 +19 −0 Original line number Diff line number Diff line /* * Copyright (c) 2021 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 ImsRegistrationAttributes;
telephony/java/android/telephony/ims/ImsRegistrationAttributes.java 0 → 100644 +219 −0 Original line number Diff line number Diff line /* * Copyright (C) 2021 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.Nullable; import android.annotation.SystemApi; import android.os.Parcel; import android.os.Parcelable; import android.telephony.AccessNetworkConstants; import android.telephony.ims.stub.ImsRegistrationImplBase; import android.util.ArraySet; import java.util.ArrayList; import java.util.Collections; import java.util.Objects; import java.util.Set; /** * Contains the attributes associated with the current IMS registration. */ public final class ImsRegistrationAttributes implements Parcelable { /** * Builder for creating {@link ImsRegistrationAttributes} instances. * @hide */ @SystemApi public static final class Builder { private final int mRegistrationTech; private Set<String> mFeatureTags = Collections.emptySet(); /** * Build a new instance of {@link ImsRegistrationAttributes}. * * @param registrationTech The Radio Access Technology that IMS is registered on. */ public Builder(@ImsRegistrationImplBase.ImsRegistrationTech int registrationTech) { mRegistrationTech = registrationTech; } /** * Optional IMS feature tags included in this IMS registration. * @param tags A set of Strings containing the MMTEL and RCS feature tags associated with * the IMS registration. This information is used for services such as the UCE * service to ascertain the complete IMS registration state to ensure the SIP * PUBLISH is accurate. The format of the set of feature tags must be one feature * tag key and value per entry. Each feature tag will contain the feature tag name * and string value (if applicable), even if they have the same feature tag name. * For example, * {@code +g.3gpp.icsi-ref="urn%3Aurn-7%3A3gpp-service.ims.icsi.oma.cpm.msg, * urn%3Aurn-7%3A3gpp-service.ims.icsi.oma.cpm.session", +g.gsma.callcomposer} must * be split into three feature tag entries: * {@code {+g.3gpp.icsi-ref="urn%3Aurn-7%3A3gpp-service.ims.icsi.oma.cpm.msg", * +g.3gpp.icsi-ref="urn%3Aurn-7%3A3gpp-service.ims.icsi.oma.cpm.session", * +g.gsma.callcomposer}}. */ public @NonNull Builder setFeatureTags(@NonNull Set<String> tags) { if (tags == null) { throw new IllegalArgumentException("feature tag set must not be null"); } mFeatureTags = new ArraySet<>(tags); return this; } /** * @return A new instance created from this builder. */ public @NonNull ImsRegistrationAttributes build() { return new ImsRegistrationAttributes(mRegistrationTech, RegistrationManager.getAccessType(mRegistrationTech), 0 /* No attributes in AOSP */, mFeatureTags); } } private final int mRegistrationTech; private final int mTransportType; private final int mImsAttributeFlags; private final ArrayList<String> mFeatureTags; /** * Create a new {@link ImsRegistrationAttributes} instance. * * @param registrationTech The technology that IMS has been registered on. * @param transportType The transport type that IMS has been registered on. * @param imsAttributeFlags The attributes associated with the IMS registration. * @param featureTags The feature tags included in the IMS registration. * @see Builder * @hide */ public ImsRegistrationAttributes( @ImsRegistrationImplBase.ImsRegistrationTech int registrationTech, @AccessNetworkConstants.TransportType int transportType, int imsAttributeFlags, @Nullable Set<String> featureTags) { mRegistrationTech = registrationTech; mTransportType = transportType; mImsAttributeFlags = imsAttributeFlags; mFeatureTags = new ArrayList<>(featureTags); } /**@hide*/ public ImsRegistrationAttributes(Parcel source) { mRegistrationTech = source.readInt(); mTransportType = source.readInt(); mImsAttributeFlags = source.readInt(); mFeatureTags = new ArrayList<>(); source.readList(mFeatureTags, null /*classloader*/); } /** * @return The Radio Access Technology that the IMS registration has been registered over. * @hide */ @SystemApi public @ImsRegistrationImplBase.ImsRegistrationTech int getRegistrationTechnology() { return mRegistrationTech; } /** * @return The access network transport type that IMS has been registered over. */ public @AccessNetworkConstants.TransportType int getTransportType() { return mTransportType; } /** * @return A bit-mask containing attributes associated with the IMS registration. */ public int getAttributeFlags() { return mImsAttributeFlags; } /** * Gets the Set of feature tags associated with the current IMS registration, if the IMS * service supports supplying this information. * <p> * The format of the set of feature tags will be one feature tag key and value per entry and * will potentially contain MMTEL and RCS feature tags, depending the configuration of the IMS * service associated with the registration indications. Each feature tag will contain the * feature tag name and string value (if applicable), even if they have the same feature tag * name. For example, {@code +g.3gpp.icsi-ref="urn%3Aurn-7%3A3gpp-service.ims.icsi.oma.cpm.msg, * urn%3Aurn-7%3A3gpp-service.ims.icsi.oma.cpm.session", +g.gsma.callcomposer} will be split * into three feature tag entries: * {@code {+g.3gpp.icsi-ref="urn%3Aurn-7%3A3gpp-service.ims.icsi.oma.cpm.msg", * +g.3gpp.icsi-ref="urn%3Aurn-7%3A3gpp-service.ims.icsi.oma.cpm.session", * +g.gsma.callcomposer}}. * @return The Set of feature tags associated with the current IMS registration. */ public @NonNull Set<String> getFeatureTags() { if (mFeatureTags == null) { return Collections.emptySet(); } return new ArraySet<>(mFeatureTags); } @Override public int describeContents() { return 0; } @Override public void writeToParcel(@NonNull Parcel dest, int flags) { dest.writeInt(mRegistrationTech); dest.writeInt(mTransportType); dest.writeInt(mImsAttributeFlags); dest.writeList(mFeatureTags); } public static final @NonNull Creator<ImsRegistrationAttributes> CREATOR = new Creator<ImsRegistrationAttributes>() { @Override public ImsRegistrationAttributes createFromParcel(Parcel source) { return new ImsRegistrationAttributes(source); } @Override public ImsRegistrationAttributes[] newArray(int size) { return new ImsRegistrationAttributes[size]; } }; @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; ImsRegistrationAttributes that = (ImsRegistrationAttributes) o; return mRegistrationTech == that.mRegistrationTech && mTransportType == that.mTransportType && mImsAttributeFlags == that.mImsAttributeFlags && Objects.equals(mFeatureTags, that.mFeatureTags); } @Override public int hashCode() { return Objects.hash(mRegistrationTech, mTransportType, mImsAttributeFlags, mFeatureTags); } @Override public String toString() { return "ImsRegistrationAttributes { transportType= " + mTransportType + ", attributeFlags=" + mImsAttributeFlags + ", featureTags=[" + mFeatureTags + "]}"; } }
telephony/java/android/telephony/ims/RegistrationManager.java +47 −21 Original line number Diff line number Diff line Loading @@ -71,7 +71,6 @@ public interface RegistrationManager { */ int REGISTRATION_STATE_REGISTERED = 2; /**@hide*/ // Translate ImsRegistrationImplBase API to new AccessNetworkConstant because WLAN // and WWAN are more accurate constants. Loading @@ -79,7 +78,8 @@ public interface RegistrationManager { new HashMap<Integer, Integer>() {{ // Map NONE to -1 to make sure that we handle the REGISTRATION_TECH_NONE // case, since it is defined. put(ImsRegistrationImplBase.REGISTRATION_TECH_NONE, -1); put(ImsRegistrationImplBase.REGISTRATION_TECH_NONE, AccessNetworkConstants.TRANSPORT_TYPE_INVALID); put(ImsRegistrationImplBase.REGISTRATION_TECH_LTE, AccessNetworkConstants.TRANSPORT_TYPE_WWAN); put(ImsRegistrationImplBase.REGISTRATION_TECH_IWLAN, Loading @@ -102,6 +102,20 @@ public interface RegistrationManager { } } /** * @param regtech The registration technology. * @return The Access Network type from registration technology. * @hide */ static int getAccessType(int regtech) { if (!RegistrationManager.IMS_REG_TO_ACCESS_TYPE_MAP.containsKey(regtech)) { Log.w("RegistrationManager", "getAccessType - invalid regType returned: " + regtech); return AccessNetworkConstants.TRANSPORT_TYPE_INVALID; } return RegistrationManager.IMS_REG_TO_ACCESS_TYPE_MAP.get(regtech); } /** * Callback class for receiving IMS network Registration callback events. * @see #registerImsRegistrationCallback(Executor, RegistrationCallback) Loading @@ -119,26 +133,24 @@ public interface RegistrationManager { } @Override public void onRegistered(int imsRadioTech) { public void onRegistered(ImsRegistrationAttributes attr) { if (mLocalCallback == null) return; long callingIdentity = Binder.clearCallingIdentity(); try { mExecutor.execute(() -> mLocalCallback.onRegistered(getAccessType(imsRadioTech))); mExecutor.execute(() -> mLocalCallback.onRegistered(attr)); } finally { restoreCallingIdentity(callingIdentity); } } @Override public void onRegistering(int imsRadioTech) { public void onRegistering(ImsRegistrationAttributes attr) { if (mLocalCallback == null) return; long callingIdentity = Binder.clearCallingIdentity(); try { mExecutor.execute(() -> mLocalCallback.onRegistering(getAccessType(imsRadioTech))); mExecutor.execute(() -> mLocalCallback.onRegistering(attr)); } finally { restoreCallingIdentity(callingIdentity); } Loading Loading @@ -183,15 +195,6 @@ public interface RegistrationManager { private void setExecutor(Executor executor) { mExecutor = executor; } private static int getAccessType(int regType) { if (!RegistrationManager.IMS_REG_TO_ACCESS_TYPE_MAP.containsKey(regType)) { Log.w("RegistrationManager", "RegistrationBinder - invalid regType returned: " + regType); return -1; } return RegistrationManager.IMS_REG_TO_ACCESS_TYPE_MAP.get(regType); } } private final RegistrationBinder mBinder = new RegistrationBinder(this); Loading @@ -200,18 +203,41 @@ public interface RegistrationManager { * Notifies the framework when the IMS Provider is registered to the IMS network. * * @param imsTransportType the radio access technology. * @deprecated Use {@link #onRegistered(ImsRegistrationAttributes)} instead. */ public void onRegistered(@AccessNetworkConstants.TransportType int imsTransportType) { } /** * Notifies the framework when the IMS Provider is registered to the IMS network * with corresponding attributes. * * @param attributes The attributes associated with this IMS registration. */ public void onRegistered(@NonNull ImsRegistrationAttributes attributes) { // Default impl to keep backwards compatibility with old implementations onRegistered(attributes.getTransportType()); } /** * Notifies the framework when the IMS Provider is trying to register the IMS network. * * @param imsTransportType the radio access technology. * @deprecated Use {@link #onRegistering(ImsRegistrationAttributes)} instead. */ public void onRegistering(@AccessNetworkConstants.TransportType int imsTransportType) { } /** * Notifies the framework when the IMS Provider is trying to register the IMS network. * * @param attributes The attributes associated with this IMS registration. */ public void onRegistering(@NonNull ImsRegistrationAttributes attributes) { // Default impl to keep backwards compatibility with old implementations onRegistering(attributes.getTransportType()); } /** * Notifies the framework when the IMS Provider is unregistered from the IMS network. * Loading