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

This commit is contained in:
Brad Ebinger
2021-03-12 19:30:30 +00:00
committed by Gerrit Code Review
4 changed files with 132 additions and 0 deletions

View File

@@ -9356,6 +9356,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.";

View File

@@ -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);

View File

@@ -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;
import android.text.TextUtils;
@@ -45,6 +46,15 @@ public final class RcsContactPresenceTuple implements Parcelable {
private static final String LOG_TAG = "RcsContactPresenceTuple";
/**
* 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>
@@ -336,6 +346,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 + '}';
}
}
/**
@@ -539,4 +556,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();
}
}

View File

@@ -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;
@@ -345,4 +346,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();
}
}