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

Commit 8605e2c1 authored by Brad Ebinger's avatar Brad Ebinger
Browse files

Add a new Config to map PIDF service-description to IMS Feature Tags

1) In order to support publishing carrier extenstions in the SIP PUBLISH
PIDF XML file, this change introduces a new carrier config that allows
a customizable mapping from service-description to IMS feature tag groups

2) Add better logging in dumpsys for SIP PUBLISH.

Bug: 180868933
Test: atest CtsTelephonyTestCases:ImsServiceTest
Merged-In: I69a7eed66591841df2c0bef043747b7fff3a48cf
Change-Id: I69a7eed66591841df2c0bef043747b7fff3a48cf
parent c1a548b1
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -9376,6 +9376,10 @@ package android.telephony {
    field public static final String KEY_SUPPORT_CDMA_1X_VOICE_CALLS_BOOL = "support_cdma_1x_voice_calls_bool";
  }
  public static final class CarrierConfigManager.Ims {
    field public static final String KEY_PUBLISH_SERVICE_DESC_FEATURE_TAG_MAP_OVERRIDE_STRING_ARRAY = "ims.publish_service_desc_feature_tag_map_override_string_array";
  }
  public static final class CarrierConfigManager.Wifi {
    field public static final String KEY_HOTSPOT_MAX_CLIENT_COUNT = "wifi.hotspot_maximum_client_count";
    field public static final String KEY_PREFIX = "wifi.";
+43 −0
Original line number Diff line number Diff line
@@ -33,7 +33,11 @@ import android.os.RemoteException;
import android.service.carrier.CarrierService;
import android.telecom.TelecomManager;
import android.telephony.ims.ImsReasonInfo;
import android.telephony.ims.ImsRegistrationAttributes;
import android.telephony.ims.ImsSsData;
import android.telephony.ims.SipDelegateManager;
import android.telephony.ims.feature.MmTelFeature;
import android.telephony.ims.feature.RcsFeature;

import com.android.internal.telephony.ICarrierConfigLoader;
import com.android.telephony.Rlog;
@@ -3940,6 +3944,43 @@ public class CarrierConfigManager {
        public static final String KEY_ENABLE_PRESENCE_PUBLISH_BOOL =
                KEY_PREFIX + "enable_presence_publish_bool";

        /**
         * Each string in this array contains a mapping between the service-id and version portion
         * of the service-description element and the associated IMS feature tag(s) that are
         * associated with each element (see RCC.07 Table 7).
         * <p>
         * Each string contains 3 parts, which define the mapping between service-description and
         * feature tag(s) that must be present in the IMS REGISTER for the RCS service to be
         * published as part of the RCS PUBLISH procedure:
         * [service-id]|[version]|[desc]|[feature_tag];[feature_tag];...
         * <ul>
         *   <li>[service-id]: the service-id element associated with the RCS capability.</li>
         *   <li>[version]: The version element associated with that service-id</li>
         *   <li>[desc]: The optional desecription element associated with that service-id</li>
         *   <li>[feature_tag];[feature_tag]: The list of all feature tags associated with this
         *       capability that MUST ALL be present in the IMS registration for this this
         *       capability to be published to the network.</li>
         * </ul>
         * <p>
         * Features managed by the framework will be considered capable when the ImsService reports
         * that those services are capable via the
         * {@link MmTelFeature#notifyCapabilitiesStatusChanged(MmTelFeature.MmTelCapabilities)} or
         * {@link RcsFeature#notifyCapabilitiesStatusChanged(RcsFeature.RcsImsCapabilities)} APIs.
         * For RCS services not managed by the framework, the capability of these services are
         * determined by looking at the feature tags associated with the IMS registration using the
         * {@link ImsRegistrationAttributes} API and mapping them to the service-description map.
         * <p>
         * The framework contains a default value of this key, which is based off of RCC.07
         * specification. Capabilities based of carrier extensions may be added to this list on a
         * carrier-by-carrier basis as required in order to support additional services in the
         * PUBLISH. If this list contains a service-id and version that overlaps with the default,
         * it will override the framework default.
         * @hide
         */
        @SystemApi
        public static final String KEY_PUBLISH_SERVICE_DESC_FEATURE_TAG_MAP_OVERRIDE_STRING_ARRAY =
                KEY_PREFIX + "publish_service_desc_feature_tag_map_override_string_array";

        /**
         * Flag indicating whether or not this carrier supports the exchange of phone numbers with
         * the carrier's RCS presence server in order to retrieve the RCS capabilities of requested
@@ -3999,6 +4040,8 @@ public class CarrierConfigManager {
            defaults.putInt(KEY_WIFI_OFF_DEFERRING_TIME_MILLIS_INT, 4000);
            defaults.putBoolean(KEY_IMS_SINGLE_REGISTRATION_REQUIRED_BOOL, false);
            defaults.putBoolean(KEY_ENABLE_PRESENCE_PUBLISH_BOOL, false);
            defaults.putStringArray(KEY_PUBLISH_SERVICE_DESC_FEATURE_TAG_MAP_OVERRIDE_STRING_ARRAY,
                    new String[] {});
            defaults.putBoolean(KEY_ENABLE_PRESENCE_CAPABILITY_EXCHANGE_BOOL, false);
            defaults.putBoolean(KEY_RCS_BULK_CAPABILITY_EXCHANGE_BOOL, false);
            defaults.putBoolean(KEY_ENABLE_PRESENCE_GROUP_SUBSCRIBE_BOOL, true);
+49 −0
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@ import android.annotation.Nullable;
import android.annotation.StringDef;
import android.annotation.SystemApi;
import android.net.Uri;
import android.os.Build;
import android.os.Parcel;
import android.os.Parcelable;

@@ -38,6 +39,15 @@ import java.util.List;
@SystemApi
public final class RcsContactPresenceTuple implements Parcelable {

    /**
     * The service ID used to indicate that service discovery via presence is available.
     * <p>
     * See RCC.07 v5.0 specification for more information.
     * @hide
     */
    public static final String SERVICE_ID_PRESENCE =
            "org.3gpp.urn:urn-7:3gpp-application.ims.iari.rcse.dp";

    /**
     * The service ID used to indicate that MMTEL service is available.
     * <p>
@@ -329,6 +339,13 @@ public final class RcsContactPresenceTuple implements Parcelable {
        public @NonNull @DuplexMode List<String> getUnsupportedDuplexModes() {
            return Collections.unmodifiableList(mUnsupportedDuplexModeList);
        }

        @Override
        public String toString() {
            return "servCaps{" + "a=" + mIsAudioCapable + ", v=" + mIsVideoCapable
                    + ", supported=" + mSupportedDuplexModeList + ", unsupported="
                    + mUnsupportedDuplexModeList + '}';
        }
    }

    /**
@@ -487,4 +504,36 @@ public final class RcsContactPresenceTuple implements Parcelable {
    public @Nullable ServiceCapabilities getServiceCapabilities() {
        return mServiceCapabilities;
    }

    @Override
    public String toString() {
        StringBuilder builder = new StringBuilder("{");
        if (Build.IS_ENG) {
            builder.append("u=");
            builder.append(mContactUri);
        } else {
            builder.append("u=");
            builder.append(mContactUri != null ? "XXX" : "null");
        }
        builder.append(", id=");
        builder.append(mServiceId);
        builder.append(", v=");
        builder.append(mServiceVersion);
        builder.append(", s=");
        builder.append(mStatus);
        if (mTimestamp != null) {
            builder.append(", timestamp=");
            builder.append(mTimestamp);
        }
        if (mServiceDescription != null) {
            builder.append(", servDesc=");
            builder.append(mServiceDescription);
        }
        if (mServiceCapabilities != null) {
            builder.append(", servCaps=");
            builder.append(mServiceCapabilities);
        }
        builder.append("}");
        return builder.toString();
    }
}
+36 −0
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@ import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SystemApi;
import android.net.Uri;
import android.os.Build;
import android.os.Parcel;
import android.os.Parcelable;

@@ -344,4 +345,39 @@ public final class RcsContactUceCapability implements Parcelable {
    public @NonNull Uri getContactUri() {
        return mContactUri;
    }

    @Override
    public String toString() {
        StringBuilder builder = new StringBuilder("RcsContactUceCapability");
        if (mCapabilityMechanism == CAPABILITY_MECHANISM_PRESENCE) {
            builder.append("(presence) {");
        } else if (mCapabilityMechanism == CAPABILITY_MECHANISM_OPTIONS) {
            builder.append("(options) {");
        } else {
            builder.append("(?) {");
        }
        if (Build.IS_ENG) {
            builder.append("uri=");
            builder.append(mContactUri);
        } else {
            builder.append("uri (isNull)=");
            builder.append(mContactUri != null ? "XXX" : "null");
        }
        builder.append(", sourceType=");
        builder.append(mSourceType);
        builder.append(", requestResult=");
        builder.append(mRequestResult);

        if (mCapabilityMechanism == CAPABILITY_MECHANISM_PRESENCE) {
            builder.append(", presenceTuples={");
            builder.append(mPresenceTuples);
            builder.append("}");
        } else if (mCapabilityMechanism == CAPABILITY_MECHANISM_OPTIONS) {
            builder.append(", featureTags={");
            builder.append(mFeatureTags);
            builder.append("}");
        }

        return builder.toString();
    }
}