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

Commit d037da75 authored by Hyunho Shin's avatar Hyunho Shin Committed by Android (Google) Code Review
Browse files

Merge changes from topic "SipDebugInfo"

* changes:
  Create a PublishAttributes class that tells the result of a publish request, including sip debug information.
  Create a SipDetails file and set it as a variable in ImsRegistrationAttributes.
parents b97834e4 3390d27b
Loading
Loading
Loading
Loading
+17 −0
Original line number Diff line number Diff line
@@ -45389,6 +45389,7 @@ package android.telephony.ims {
    method public int describeContents();
    method public int getAttributeFlags();
    method @NonNull public java.util.Set<java.lang.String> getFeatureTags();
    method @Nullable public android.telephony.ims.SipDetails getSipDetails();
    method public int getTransportType();
    method public void writeToParcel(@NonNull android.os.Parcel, int);
    field public static final int ATTR_EPDG_OVER_CELL_INTERNET = 1; // 0x1
@@ -45449,6 +45450,22 @@ package android.telephony.ims {
    method public void onUnregistered(@NonNull android.telephony.ims.ImsReasonInfo);
  }
  public final class SipDetails implements android.os.Parcelable {
    method public int describeContents();
    method public int getCSeq();
    method @Nullable public String getCallId();
    method public int getMethod();
    method public int getReasonHeaderCause();
    method @NonNull public String getReasonHeaderText();
    method public int getResponseCode();
    method @NonNull public String getResponsePhrase();
    method public void writeToParcel(@NonNull android.os.Parcel, int);
    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.ims.SipDetails> CREATOR;
    field public static final int METHOD_PUBLISH = 2; // 0x2
    field public static final int METHOD_REGISTER = 1; // 0x1
    field public static final int METHOD_SUBSCRIBE = 3; // 0x3
  }
}
package android.telephony.ims.feature {
+23 −4
Original line number Diff line number Diff line
@@ -15115,6 +15115,7 @@ package android.telephony.ims {
    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>);
    method @NonNull public android.telephony.ims.ImsRegistrationAttributes.Builder setSipDetails(@NonNull android.telephony.ims.SipDetails);
  }
  public class ImsService extends android.app.Service {
@@ -15401,6 +15402,15 @@ package android.telephony.ims {
    method public void onRemoved();
  }
  public final class PublishAttributes implements android.os.Parcelable {
    method public int describeContents();
    method @NonNull public java.util.List<android.telephony.ims.RcsContactPresenceTuple> getPresenceTuples();
    method public int getPublishState();
    method @Nullable public android.telephony.ims.SipDetails getSipDetails();
    method public void writeToParcel(@NonNull android.os.Parcel, int);
    field @NonNull public static final android.os.Parcelable.Creator<android.telephony.ims.PublishAttributes> CREATOR;
  }
  public final class RcsClientConfiguration implements android.os.Parcelable {
    ctor @Deprecated public RcsClientConfiguration(@NonNull String, @NonNull String, @NonNull String, @NonNull String);
    ctor public RcsClientConfiguration(@NonNull String, @NonNull String, @NonNull String, @NonNull String, boolean);
@@ -15563,7 +15573,8 @@ package android.telephony.ims {
  }
  public static interface RcsUceAdapter.OnPublishStateChangedListener {
    method public void onPublishStateChange(int);
    method @Deprecated public void onPublishStateChange(int);
    method public default void onPublishStateChange(@NonNull android.telephony.ims.PublishAttributes);
  }
  public interface RegistrationManager {
@@ -15572,6 +15583,10 @@ package android.telephony.ims {
    field public static final int SUGGESTED_ACTION_TRIGGER_PLMN_BLOCK_WITH_TIMEOUT = 2; // 0x2
  }
  public static class RegistrationManager.RegistrationCallback {
    method public void onUnregistered(@NonNull android.telephony.ims.ImsReasonInfo, @NonNull android.telephony.ims.SipDetails);
  }
  public final class RtpHeaderExtension implements android.os.Parcelable {
    ctor public RtpHeaderExtension(@IntRange(from=1, to=14) int, @NonNull byte[]);
    method public int describeContents();
@@ -15839,7 +15854,8 @@ package android.telephony.ims.feature {
package android.telephony.ims.stub {
  public interface CapabilityExchangeEventListener {
    method public default void onPublishUpdated(int, @NonNull String, int, @NonNull String) throws android.telephony.ims.ImsException;
    method @Deprecated public default void onPublishUpdated(int, @NonNull String, int, @NonNull String) throws android.telephony.ims.ImsException;
    method public default void onPublishUpdated(@NonNull android.telephony.ims.SipDetails) throws android.telephony.ims.ImsException;
    method public void onRemoteCapabilityRequest(@NonNull android.net.Uri, @NonNull java.util.Set<java.lang.String>, @NonNull android.telephony.ims.stub.CapabilityExchangeEventListener.OptionsRequestCallback) throws android.telephony.ims.ImsException;
    method public void onRequestPublishCapabilities(int) throws android.telephony.ims.ImsException;
    method public void onUnpublish() throws android.telephony.ims.ImsException;
@@ -15973,6 +15989,8 @@ package android.telephony.ims.stub {
    ctor public ImsRegistrationImplBase(@NonNull java.util.concurrent.Executor);
    method public final void onDeregistered(android.telephony.ims.ImsReasonInfo);
    method public final void onDeregistered(@Nullable android.telephony.ims.ImsReasonInfo, int, int);
    method public final void onDeregistered(@Nullable android.telephony.ims.ImsReasonInfo, @NonNull android.telephony.ims.SipDetails);
    method public final void onDeregistered(@Nullable android.telephony.ims.ImsReasonInfo, int, int, @NonNull android.telephony.ims.SipDetails);
    method public final void onRegistered(int);
    method public final void onRegistered(@NonNull android.telephony.ims.ImsRegistrationAttributes);
    method public final void onRegistering(int);
@@ -16060,8 +16078,9 @@ package android.telephony.ims.stub {
  public static interface RcsCapabilityExchangeImplBase.PublishResponseCallback {
    method public void onCommandError(int) throws android.telephony.ims.ImsException;
    method public void onNetworkResponse(@IntRange(from=100, to=699) int, @NonNull String) throws android.telephony.ims.ImsException;
    method public void onNetworkResponse(@IntRange(from=100, to=699) int, @NonNull String, @IntRange(from=100, to=699) int, @NonNull String) throws android.telephony.ims.ImsException;
    method @Deprecated public void onNetworkResponse(@IntRange(from=100, to=699) int, @NonNull String) throws android.telephony.ims.ImsException;
    method @Deprecated public void onNetworkResponse(@IntRange(from=100, to=699) int, @NonNull String, @IntRange(from=100, to=699) int, @NonNull String) throws android.telephony.ims.ImsException;
    method public default void onNetworkResponse(@NonNull android.telephony.ims.SipDetails) throws android.telephony.ims.ImsException;
  }
  public static interface RcsCapabilityExchangeImplBase.SubscribeResponseCallback {
+53 −5
Original line number Diff line number Diff line
@@ -65,6 +65,7 @@ public final class ImsRegistrationAttributes implements Parcelable {
    public static final class Builder {
        private final int mRegistrationTech;
        private Set<String> mFeatureTags = Collections.emptySet();
        private @Nullable SipDetails mSipDetails;

        /**
         * Build a new instance of {@link ImsRegistrationAttributes}.
@@ -99,6 +100,15 @@ public final class ImsRegistrationAttributes implements Parcelable {
            return this;
        }

        /**
         * Set the SIP information.
         * @param details The SIP information related to this IMS registration.
         */
        public @NonNull Builder setSipDetails(@NonNull SipDetails details) {
            mSipDetails = details;
            return this;
        }

        /**
         * @return A new instance created from this builder.
         */
@@ -106,7 +116,7 @@ public final class ImsRegistrationAttributes implements Parcelable {
            return new ImsRegistrationAttributes(mRegistrationTech,
                    RegistrationManager.getAccessType(mRegistrationTech),
                    getAttributeFlags(mRegistrationTech),
                    mFeatureTags);
                    mFeatureTags, mSipDetails);
        }

        /**
@@ -125,6 +135,28 @@ public final class ImsRegistrationAttributes implements Parcelable {
    private final int mTransportType;
    private final int mImsAttributeFlags;
    private final ArrayList<String> mFeatureTags;
    private final @Nullable SipDetails mSipDetails;
    /**
     * Create a new {@link ImsRegistrationAttributes} instance.
     * This is for backward compatibility.
     *
     * @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.
     * @hide
     */
    public ImsRegistrationAttributes(
            @ImsRegistrationImplBase.ImsRegistrationTech int registrationTech,
            @AccessNetworkConstants.TransportType int transportType,
            @ImsAttributeFlag int imsAttributeFlags,
            @Nullable Set<String> featureTags) {
        mRegistrationTech = registrationTech;
        mTransportType = transportType;
        mImsAttributeFlags = imsAttributeFlags;
        mFeatureTags = new ArrayList<>(featureTags);
        mSipDetails = null;
    }

    /**
     * Create a new {@link ImsRegistrationAttributes} instance.
@@ -133,6 +165,7 @@ public final class ImsRegistrationAttributes implements Parcelable {
     * @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.
     * @param details The SIP information associated with the IMS registration.
     * @see Builder
     * @hide
     */
@@ -140,11 +173,13 @@ public final class ImsRegistrationAttributes implements Parcelable {
            @ImsRegistrationImplBase.ImsRegistrationTech int registrationTech,
            @AccessNetworkConstants.TransportType int transportType,
            @ImsAttributeFlag int imsAttributeFlags,
            @Nullable Set<String> featureTags) {
            @Nullable Set<String> featureTags,
            @Nullable SipDetails details) {
        mRegistrationTech = registrationTech;
        mTransportType = transportType;
        mImsAttributeFlags = imsAttributeFlags;
        mFeatureTags = new ArrayList<>(featureTags);
        mSipDetails = details;
    }

    /**@hide*/
@@ -154,6 +189,8 @@ public final class ImsRegistrationAttributes implements Parcelable {
        mImsAttributeFlags = source.readInt();
        mFeatureTags = new ArrayList<>();
        source.readList(mFeatureTags, null /*classloader*/, java.lang.String.class);
        mSipDetails = source.readParcelable(null /*loader*/,
                android.telephony.ims.SipDetails.class);
    }

    /**
@@ -202,6 +239,13 @@ public final class ImsRegistrationAttributes implements Parcelable {
        return new ArraySet<>(mFeatureTags);
    }

    /**
     * @return The SIP information associated with the IMS registration.
     */
    public @Nullable SipDetails getSipDetails() {
        return mSipDetails;
    }

    @Override
    public int describeContents() {
        return 0;
@@ -213,6 +257,7 @@ public final class ImsRegistrationAttributes implements Parcelable {
        dest.writeInt(mTransportType);
        dest.writeInt(mImsAttributeFlags);
        dest.writeList(mFeatureTags);
        dest.writeParcelable(mSipDetails, flags);
    }

    public static final @NonNull Creator<ImsRegistrationAttributes> CREATOR =
@@ -236,17 +281,20 @@ public final class ImsRegistrationAttributes implements Parcelable {
        return mRegistrationTech == that.mRegistrationTech
                && mTransportType == that.mTransportType
                && mImsAttributeFlags == that.mImsAttributeFlags
                && Objects.equals(mFeatureTags, that.mFeatureTags);
                && Objects.equals(mFeatureTags, that.mFeatureTags)
                && Objects.equals(mSipDetails, that.mSipDetails);
    }

    @Override
    public int hashCode() {
        return Objects.hash(mRegistrationTech, mTransportType, mImsAttributeFlags, mFeatureTags);
        return Objects.hash(mRegistrationTech, mTransportType, mImsAttributeFlags, mFeatureTags,
                mSipDetails);
    }

    @Override
    public String toString() {
        return "ImsRegistrationAttributes { transportType= " + mTransportType + ", attributeFlags="
                + mImsAttributeFlags + ", featureTags=[" + mFeatureTags + "]}";
                + mImsAttributeFlags + ", featureTags=[" + mFeatureTags + "]"
                + ",SipDetails=" + mSipDetails + "}";
    }
}
+19 −0
Original line number Diff line number Diff line
/*
 * Copyright (c) 2022 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 PublishAttributes;
+180 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2022 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.ims.RcsUceAdapter.PublishState;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Objects;

/**
 * This class provides detailed information related to publish state, SIP information and
 * presence tuples in publication.
 * This allows the application can check the detailed information of publication.
 * @hide
 */
@SystemApi
public final class PublishAttributes implements Parcelable {

    private final @PublishState int mPublishState;
    private List<RcsContactPresenceTuple> mPresenceTuples;
    private @Nullable SipDetails mSipDetails;

    /**
     * Builder for creating {@link Builder} instances.
     * @hide
     */
    public static final class Builder {
        private PublishAttributes mAttributes;
        /**
         * Build a new instance of {@link PublishAttributes}.
         *
         * @param publishState The current publication state {@link RcsUceAdapter.PublishState}.
         */
        public Builder(@PublishState int publishState) {
            mAttributes = new PublishAttributes(publishState);
        }

        /**
         * Sets the SIP information in received response to a publish operation.
         * @param details The {@link SipDetails} in received response.
         * @return The same instance of the builder.
         */
        public @NonNull Builder setSipDetails(@Nullable SipDetails details) {
            mAttributes.mSipDetails = details;
            return this;
        }

        /**
         * The tuple elements associated with the presence element portion of the PIDF document
         * successfully sent to the network.
         * @param tuples The list of the {@link RcsContactPresenceTuple} sent to the server.
         *               The contact URI should not be included in this tuples.
         * @return this The same instance of the builder.
         */
        public @NonNull Builder setPresenceTuples(@NonNull List<RcsContactPresenceTuple> tuples) {
            mAttributes.mPresenceTuples = tuples;
            return this;
        }

        /**
         * @return a new PublishAttributes from this Builder.
         */
        public @NonNull PublishAttributes build() {
            return mAttributes;
        }
    }

    /**
     * Generate the attributes related to the publication.
     *
     * @param publishState The current publication state.
     *                     See {@link RcsUceAdapter.PublishState}.
     */
    private PublishAttributes(@PublishState int publishState) {
        mPublishState = publishState;
    }

    /**
     * @return The current publication state. See {@link RcsUceAdapter.PublishState}.
     */
    public int getPublishState() {
        return mPublishState;
    }

    /**
     * @return The list of the {@link RcsContactPresenceTuple} sent to the server.
     */
    public @NonNull List<RcsContactPresenceTuple> getPresenceTuples() {
        if (mPresenceTuples == null) {
            return Collections.emptyList();
        }
        return mPresenceTuples;
    }

    /**
     * @return The {@link SipDetails} received in response.
     */
    public @Nullable SipDetails getSipDetails() {
        return mSipDetails;
    }

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(@NonNull Parcel dest, int flags) {
        dest.writeInt(mPublishState);
        dest.writeList(mPresenceTuples);
        dest.writeParcelable(mSipDetails, 0);
    }

    public static final @NonNull Creator<PublishAttributes> CREATOR =
            new Creator<PublishAttributes>() {
                @Override
                public PublishAttributes createFromParcel(Parcel source) {
                    return new PublishAttributes(source);
                }

                @Override
                public PublishAttributes[] newArray(int size) {
                    return new PublishAttributes[size];
                }
            };

    /**
     * Construct a PublishAttributes object from the given parcel.
     */
    private PublishAttributes(Parcel in) {
        mPublishState = in.readInt();
        mPresenceTuples = new ArrayList<>();
        in.readList(mPresenceTuples, null, RcsContactPresenceTuple.class);
        mSipDetails = in.readParcelable(SipDetails.class.getClassLoader(),
                android.telephony.ims.SipDetails.class);
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        PublishAttributes that = (PublishAttributes) o;
        return mPublishState == that.mPublishState
                && Objects.equals(mPresenceTuples, that.mPresenceTuples)
                && Objects.equals(mSipDetails, that.mSipDetails);
    }

    @Override
    public int hashCode() {
        return Objects.hash(mPublishState, mPresenceTuples, mSipDetails);
    }

    @Override
    public String toString() {
        return "PublishAttributes { publishState= " + mPublishState
                + ", presenceTuples=[" + mPresenceTuples + "]" + "SipDetails=" + mSipDetails + "}";
    }
}
Loading