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

Commit 3798c10c authored by Daniel Bright's avatar Daniel Bright Committed by Gerrit Code Review
Browse files

Merge "Add support for pdu session id"

parents ae44936d 926aff5e
Loading
Loading
Loading
Loading
+8 −0
Original line number Original line Diff line number Diff line
@@ -10379,6 +10379,7 @@ package android.telephony.data {
    method public int getMtuV4();
    method public int getMtuV4();
    method public int getMtuV6();
    method public int getMtuV6();
    method @NonNull public java.util.List<java.net.InetAddress> getPcscfAddresses();
    method @NonNull public java.util.List<java.net.InetAddress> getPcscfAddresses();
    method public int getPduSessionId();
    method public int getProtocolType();
    method public int getProtocolType();
    method public long getRetryIntervalMillis();
    method public long getRetryIntervalMillis();
    method @Deprecated public int getSuggestedRetryTime();
    method @Deprecated public int getSuggestedRetryTime();
@@ -10393,6 +10394,7 @@ package android.telephony.data {
    field public static final int LINK_STATUS_DORMANT = 1; // 0x1
    field public static final int LINK_STATUS_DORMANT = 1; // 0x1
    field public static final int LINK_STATUS_INACTIVE = 0; // 0x0
    field public static final int LINK_STATUS_INACTIVE = 0; // 0x0
    field public static final int LINK_STATUS_UNKNOWN = -1; // 0xffffffff
    field public static final int LINK_STATUS_UNKNOWN = -1; // 0xffffffff
    field public static final int PDU_SESSION_ID_NOT_SET = 0; // 0x0
    field public static final int RETRY_INTERVAL_UNDEFINED = -1; // 0xffffffff
    field public static final int RETRY_INTERVAL_UNDEFINED = -1; // 0xffffffff
  }
  }
@@ -10411,6 +10413,7 @@ package android.telephony.data {
    method @NonNull public android.telephony.data.DataCallResponse.Builder setMtuV4(int);
    method @NonNull public android.telephony.data.DataCallResponse.Builder setMtuV4(int);
    method @NonNull public android.telephony.data.DataCallResponse.Builder setMtuV6(int);
    method @NonNull public android.telephony.data.DataCallResponse.Builder setMtuV6(int);
    method @NonNull public android.telephony.data.DataCallResponse.Builder setPcscfAddresses(@NonNull java.util.List<java.net.InetAddress>);
    method @NonNull public android.telephony.data.DataCallResponse.Builder setPcscfAddresses(@NonNull java.util.List<java.net.InetAddress>);
    method @NonNull public android.telephony.data.DataCallResponse.Builder setPduSessionId(int);
    method @NonNull public android.telephony.data.DataCallResponse.Builder setProtocolType(int);
    method @NonNull public android.telephony.data.DataCallResponse.Builder setProtocolType(int);
    method @NonNull public android.telephony.data.DataCallResponse.Builder setRetryIntervalMillis(long);
    method @NonNull public android.telephony.data.DataCallResponse.Builder setRetryIntervalMillis(long);
    method @Deprecated @NonNull public android.telephony.data.DataCallResponse.Builder setSuggestedRetryTime(int);
    method @Deprecated @NonNull public android.telephony.data.DataCallResponse.Builder setSuggestedRetryTime(int);
@@ -10475,6 +10478,7 @@ package android.telephony.data {
  public abstract class DataService.DataServiceProvider implements java.lang.AutoCloseable {
  public abstract class DataService.DataServiceProvider implements java.lang.AutoCloseable {
    ctor public DataService.DataServiceProvider(int);
    ctor public DataService.DataServiceProvider(int);
    method public void cancelHandover(int, @NonNull android.telephony.data.DataServiceCallback);
    method public abstract void close();
    method public abstract void close();
    method public void deactivateDataCall(int, int, @Nullable android.telephony.data.DataServiceCallback);
    method public void deactivateDataCall(int, int, @Nullable android.telephony.data.DataServiceCallback);
    method public final int getSlotIndex();
    method public final int getSlotIndex();
@@ -10483,11 +10487,15 @@ package android.telephony.data {
    method public void setDataProfile(@NonNull java.util.List<android.telephony.data.DataProfile>, boolean, @NonNull android.telephony.data.DataServiceCallback);
    method public void setDataProfile(@NonNull java.util.List<android.telephony.data.DataProfile>, boolean, @NonNull android.telephony.data.DataServiceCallback);
    method public void setInitialAttachApn(@NonNull android.telephony.data.DataProfile, boolean, @NonNull android.telephony.data.DataServiceCallback);
    method public void setInitialAttachApn(@NonNull android.telephony.data.DataProfile, boolean, @NonNull android.telephony.data.DataServiceCallback);
    method public void setupDataCall(int, @NonNull android.telephony.data.DataProfile, boolean, boolean, int, @Nullable android.net.LinkProperties, @NonNull android.telephony.data.DataServiceCallback);
    method public void setupDataCall(int, @NonNull android.telephony.data.DataProfile, boolean, boolean, int, @Nullable android.net.LinkProperties, @NonNull android.telephony.data.DataServiceCallback);
    method public void setupDataCall(int, @NonNull android.telephony.data.DataProfile, boolean, boolean, int, @Nullable android.net.LinkProperties, @IntRange(from=0, to=15) int, @NonNull android.telephony.data.DataServiceCallback);
    method public void startHandover(int, @NonNull android.telephony.data.DataServiceCallback);
  }
  }
  public class DataServiceCallback {
  public class DataServiceCallback {
    method public void onDataCallListChanged(@NonNull java.util.List<android.telephony.data.DataCallResponse>);
    method public void onDataCallListChanged(@NonNull java.util.List<android.telephony.data.DataCallResponse>);
    method public void onDeactivateDataCallComplete(int);
    method public void onDeactivateDataCallComplete(int);
    method public void onHandoverCancelled(int);
    method public void onHandoverStarted(int);
    method public void onRequestDataCallListComplete(int, @NonNull java.util.List<android.telephony.data.DataCallResponse>);
    method public void onRequestDataCallListComplete(int, @NonNull java.util.List<android.telephony.data.DataCallResponse>);
    method public void onSetDataProfileComplete(int);
    method public void onSetDataProfileComplete(int);
    method public void onSetInitialAttachApnComplete(int);
    method public void onSetInitialAttachApnComplete(int);
+36 −4
Original line number Original line Diff line number Diff line
@@ -114,6 +114,11 @@ public final class DataCallResponse implements Parcelable {
     */
     */
    public static final int RETRY_INTERVAL_UNDEFINED = -1;
    public static final int RETRY_INTERVAL_UNDEFINED = -1;


    /**
     * Indicates that the pdu session id is not set.
     */
    public static final int PDU_SESSION_ID_NOT_SET = 0;

    private final @DataFailureCause int mCause;
    private final @DataFailureCause int mCause;
    private final long mSuggestedRetryTime;
    private final long mSuggestedRetryTime;
    private final int mId;
    private final int mId;
@@ -128,6 +133,7 @@ public final class DataCallResponse implements Parcelable {
    private final int mMtuV4;
    private final int mMtuV4;
    private final int mMtuV6;
    private final int mMtuV6;
    private final @HandoverFailureMode int mHandoverFailureMode;
    private final @HandoverFailureMode int mHandoverFailureMode;
    private final int mPduSessionId;


    /**
    /**
     * @param cause Data call fail cause. {@link DataFailCause#NONE} indicates no error.
     * @param cause Data call fail cause. {@link DataFailCause#NONE} indicates no error.
@@ -175,6 +181,7 @@ public final class DataCallResponse implements Parcelable {
                ? new ArrayList<>() : new ArrayList<>(pcscfAddresses);
                ? new ArrayList<>() : new ArrayList<>(pcscfAddresses);
        mMtu = mMtuV4 = mMtuV6 = mtu;
        mMtu = mMtuV4 = mMtuV6 = mtu;
        mHandoverFailureMode = HANDOVER_FAILURE_MODE_LEGACY;
        mHandoverFailureMode = HANDOVER_FAILURE_MODE_LEGACY;
        mPduSessionId = PDU_SESSION_ID_NOT_SET;
    }
    }


    private DataCallResponse(@DataFailureCause int cause, long suggestedRetryTime, int id,
    private DataCallResponse(@DataFailureCause int cause, long suggestedRetryTime, int id,
@@ -182,7 +189,7 @@ public final class DataCallResponse implements Parcelable {
            @Nullable String interfaceName, @Nullable List<LinkAddress> addresses,
            @Nullable String interfaceName, @Nullable List<LinkAddress> addresses,
            @Nullable List<InetAddress> dnsAddresses, @Nullable List<InetAddress> gatewayAddresses,
            @Nullable List<InetAddress> dnsAddresses, @Nullable List<InetAddress> gatewayAddresses,
            @Nullable List<InetAddress> pcscfAddresses, int mtu, int mtuV4, int mtuV6,
            @Nullable List<InetAddress> pcscfAddresses, int mtu, int mtuV4, int mtuV6,
            @HandoverFailureMode int handoverFailureMode) {
            @HandoverFailureMode int handoverFailureMode, int pduSessionId) {
        mCause = cause;
        mCause = cause;
        mSuggestedRetryTime = suggestedRetryTime;
        mSuggestedRetryTime = suggestedRetryTime;
        mId = id;
        mId = id;
@@ -201,6 +208,7 @@ public final class DataCallResponse implements Parcelable {
        mMtuV4 = mtuV4;
        mMtuV4 = mtuV4;
        mMtuV6 = mtuV6;
        mMtuV6 = mtuV6;
        mHandoverFailureMode = handoverFailureMode;
        mHandoverFailureMode = handoverFailureMode;
        mPduSessionId = pduSessionId;
    }
    }


    /** @hide */
    /** @hide */
@@ -224,6 +232,7 @@ public final class DataCallResponse implements Parcelable {
        mMtuV4 = source.readInt();
        mMtuV4 = source.readInt();
        mMtuV6 = source.readInt();
        mMtuV6 = source.readInt();
        mHandoverFailureMode = source.readInt();
        mHandoverFailureMode = source.readInt();
        mPduSessionId = source.readInt();
    }
    }


    /**
    /**
@@ -334,6 +343,13 @@ public final class DataCallResponse implements Parcelable {
        return mHandoverFailureMode;
        return mHandoverFailureMode;
    }
    }


    /**
     * @return The pdu session id
     */
    public int getPduSessionId() {
        return mPduSessionId;
    }

    @NonNull
    @NonNull
    @Override
    @Override
    public String toString() {
    public String toString() {
@@ -353,6 +369,7 @@ public final class DataCallResponse implements Parcelable {
           .append(" mtuV4=").append(getMtuV4())
           .append(" mtuV4=").append(getMtuV4())
           .append(" mtuV6=").append(getMtuV6())
           .append(" mtuV6=").append(getMtuV6())
           .append(" handoverFailureMode=").append(getHandoverFailureMode())
           .append(" handoverFailureMode=").append(getHandoverFailureMode())
           .append(" pduSessionId=").append(getPduSessionId())
           .append("}");
           .append("}");
        return sb.toString();
        return sb.toString();
    }
    }
@@ -383,14 +400,15 @@ public final class DataCallResponse implements Parcelable {
                && mMtu == other.mMtu
                && mMtu == other.mMtu
                && mMtuV4 == other.mMtuV4
                && mMtuV4 == other.mMtuV4
                && mMtuV6 == other.mMtuV6
                && mMtuV6 == other.mMtuV6
                && mHandoverFailureMode == other.mHandoverFailureMode;
                && mHandoverFailureMode == other.mHandoverFailureMode
                && mPduSessionId == other.mPduSessionId;
    }
    }


    @Override
    @Override
    public int hashCode() {
    public int hashCode() {
        return Objects.hash(mCause, mSuggestedRetryTime, mId, mLinkStatus, mProtocolType,
        return Objects.hash(mCause, mSuggestedRetryTime, mId, mLinkStatus, mProtocolType,
                mInterfaceName, mAddresses, mDnsAddresses, mGatewayAddresses, mPcscfAddresses,
                mInterfaceName, mAddresses, mDnsAddresses, mGatewayAddresses, mPcscfAddresses,
                mMtu, mMtuV4, mMtuV6, mHandoverFailureMode);
                mMtu, mMtuV4, mMtuV6, mHandoverFailureMode, mPduSessionId);
    }
    }


    @Override
    @Override
@@ -414,6 +432,7 @@ public final class DataCallResponse implements Parcelable {
        dest.writeInt(mMtuV4);
        dest.writeInt(mMtuV4);
        dest.writeInt(mMtuV6);
        dest.writeInt(mMtuV6);
        dest.writeInt(mHandoverFailureMode);
        dest.writeInt(mHandoverFailureMode);
        dest.writeInt(mPduSessionId);
    }
    }


    public static final @android.annotation.NonNull Parcelable.Creator<DataCallResponse> CREATOR =
    public static final @android.annotation.NonNull Parcelable.Creator<DataCallResponse> CREATOR =
@@ -491,6 +510,8 @@ public final class DataCallResponse implements Parcelable {


        private @HandoverFailureMode int mHandoverFailureMode = HANDOVER_FAILURE_MODE_LEGACY;
        private @HandoverFailureMode int mHandoverFailureMode = HANDOVER_FAILURE_MODE_LEGACY;


        private int mPduSessionId = PDU_SESSION_ID_NOT_SET;

        /**
        /**
         * Default constructor for Builder.
         * Default constructor for Builder.
         */
         */
@@ -673,6 +694,17 @@ public final class DataCallResponse implements Parcelable {
            return this;
            return this;
        }
        }


        /**
         * Set pdu session id.
         *
         * @param pduSessionId Pdu Session Id of the data call.
         * @return The same instance of the builder.
         */
        public @NonNull Builder setPduSessionId(int pduSessionId) {
            mPduSessionId = pduSessionId;
            return this;
        }

        /**
        /**
         * Build the DataCallResponse.
         * Build the DataCallResponse.
         *
         *
@@ -681,7 +713,7 @@ public final class DataCallResponse implements Parcelable {
        public @NonNull DataCallResponse build() {
        public @NonNull DataCallResponse build() {
            return new DataCallResponse(mCause, mSuggestedRetryTime, mId, mLinkStatus,
            return new DataCallResponse(mCause, mSuggestedRetryTime, mId, mLinkStatus,
                    mProtocolType, mInterfaceName, mAddresses, mDnsAddresses, mGatewayAddresses,
                    mProtocolType, mInterfaceName, mAddresses, mDnsAddresses, mGatewayAddresses,
                    mPcscfAddresses, mMtu, mMtuV4, mMtuV6, mHandoverFailureMode);
                    mPcscfAddresses, mMtu, mMtuV4, mMtuV6, mHandoverFailureMode, mPduSessionId);
        }
        }
    }
    }
}
}
+140 −11
Original line number Original line Diff line number Diff line
@@ -17,6 +17,7 @@
package android.telephony.data;
package android.telephony.data;


import android.annotation.IntDef;
import android.annotation.IntDef;
import android.annotation.IntRange;
import android.annotation.NonNull;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.Nullable;
import android.annotation.SdkConstant;
import android.annotation.SdkConstant;
@@ -30,7 +31,7 @@ import android.os.IBinder;
import android.os.Looper;
import android.os.Looper;
import android.os.Message;
import android.os.Message;
import android.os.RemoteException;
import android.os.RemoteException;
import android.telephony.AccessNetworkConstants;
import android.util.Log;
import android.util.SparseArray;
import android.util.SparseArray;


import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.annotations.VisibleForTesting;
@@ -104,6 +105,8 @@ public abstract class DataService extends Service {
    private static final int DATA_SERVICE_REQUEST_REGISTER_DATA_CALL_LIST_CHANGED      = 9;
    private static final int DATA_SERVICE_REQUEST_REGISTER_DATA_CALL_LIST_CHANGED      = 9;
    private static final int DATA_SERVICE_REQUEST_UNREGISTER_DATA_CALL_LIST_CHANGED    = 10;
    private static final int DATA_SERVICE_REQUEST_UNREGISTER_DATA_CALL_LIST_CHANGED    = 10;
    private static final int DATA_SERVICE_INDICATION_DATA_CALL_LIST_CHANGED            = 11;
    private static final int DATA_SERVICE_INDICATION_DATA_CALL_LIST_CHANGED            = 11;
    private static final int DATA_SERVICE_REQUEST_START_HANDOVER                       = 12;
    private static final int DATA_SERVICE_REQUEST_CANCEL_HANDOVER                      = 13;


    private final HandlerThread mHandlerThread;
    private final HandlerThread mHandlerThread;


@@ -147,7 +150,7 @@ public abstract class DataService extends Service {
         * the provided callback to notify the platform.
         * the provided callback to notify the platform.
         *
         *
         * @param accessNetworkType Access network type that the data call will be established on.
         * @param accessNetworkType Access network type that the data call will be established on.
         *        Must be one of {@link AccessNetworkConstants.AccessNetworkType}.
         *        Must be one of {@link android.telephony.AccessNetworkConstants.AccessNetworkType}.
         * @param dataProfile Data profile used for data call setup. See {@link DataProfile}
         * @param dataProfile Data profile used for data call setup. See {@link DataProfile}
         * @param isRoaming True if the device is data roaming.
         * @param isRoaming True if the device is data roaming.
         * @param allowRoaming True if data roaming is allowed by the user.
         * @param allowRoaming True if data roaming is allowed by the user.
@@ -159,8 +162,7 @@ public abstract class DataService extends Service {
         */
         */
        public void setupDataCall(int accessNetworkType, @NonNull DataProfile dataProfile,
        public void setupDataCall(int accessNetworkType, @NonNull DataProfile dataProfile,
                boolean isRoaming, boolean allowRoaming,
                boolean isRoaming, boolean allowRoaming,
                                  @SetupDataReason int reason,
                @SetupDataReason int reason, @Nullable LinkProperties linkProperties,
                                  @Nullable LinkProperties linkProperties,
                @NonNull DataServiceCallback callback) {
                @NonNull DataServiceCallback callback) {
            // The default implementation is to return unsupported.
            // The default implementation is to return unsupported.
            if (callback != null) {
            if (callback != null) {
@@ -169,6 +171,37 @@ public abstract class DataService extends Service {
            }
            }
        }
        }


        /**
         * Setup a data connection. The data service provider must implement this method to support
         * establishing a packet data connection. When completed or error, the service must invoke
         * the provided callback to notify the platform.
         *
         * @param accessNetworkType Access network type that the data call will be established on.
         *        Must be one of {@link android.telephony.AccessNetworkConstants.AccessNetworkType}.
         * @param dataProfile Data profile used for data call setup. See {@link DataProfile}
         * @param isRoaming True if the device is data roaming.
         * @param allowRoaming True if data roaming is allowed by the user.
         * @param reason The reason for data setup. Must be {@link #REQUEST_REASON_NORMAL} or
         *        {@link #REQUEST_REASON_HANDOVER}.
         * @param linkProperties If {@code reason} is {@link #REQUEST_REASON_HANDOVER}, this is the
         *        link properties of the existing data connection, otherwise null.
         * @param pduSessionId The pdu session id to be used for this data call.
         *                     The standard range of values are 1-15 while 0 means no pdu session id
         *                     was attached to this call.  Reference: 3GPP TS 24.007 section
         *                     11.2.3.1b.
         * @param callback The result callback for this request.
         */
        public void setupDataCall(int accessNetworkType, @NonNull DataProfile dataProfile,
                boolean isRoaming, boolean allowRoaming,
                @SetupDataReason int reason,
                @Nullable LinkProperties linkProperties,
                @IntRange(from = 0, to = 15) int pduSessionId,
                @NonNull DataServiceCallback callback) {
            /* Call the old version since the new version isn't supported */
            setupDataCall(accessNetworkType, dataProfile, isRoaming, allowRoaming, reason,
                    linkProperties, callback);
        }

        /**
        /**
         * Deactivate a data connection. The data service provider must implement this method to
         * Deactivate a data connection. The data service provider must implement this method to
         * support data connection tear down. When completed or error, the service must invoke the
         * support data connection tear down. When completed or error, the service must invoke the
@@ -223,6 +256,53 @@ public abstract class DataService extends Service {
            }
            }
        }
        }


        /**
         * Indicates that a handover has begun.  This is called on the source transport.
         *
         * Any resources being transferred cannot be released while a
         * handover is underway.
         *
         * If a handover was unsuccessful, then the framework calls
         * {@link DataService#cancelHandover}.  The target transport retains ownership over any of
         * the resources being transferred.
         *
         * If a handover was successful, the framework calls {@link DataService#deactivateDataCall}
         * with reason {@link DataService.REQUEST_REASON_HANDOVER}. The target transport now owns
         * the transferred resources and is responsible for releasing them.
         *
         * @param cid The identifier of the data call which is provided in {@link DataCallResponse}
         * @param callback The result callback for this request.
         */
        public void startHandover(int cid, @NonNull DataServiceCallback callback) {
            // The default implementation is to return unsupported.
            if (callback != null) {
                Log.d(TAG, "startHandover: " + cid);
                callback.onHandoverStarted(DataServiceCallback.RESULT_ERROR_UNSUPPORTED);
            } else {
                Log.e(TAG, "startHandover: " + cid + ", callback is null");
            }
        }

        /**
         * Indicates that a handover was cancelled after a call to
         * {@link DataService#startHandover}. This is called on the source transport.
         *
         * Since the handover was unsuccessful, the source transport retains ownership over any of
         * the resources being transferred and is still responsible for releasing them.
         *
         * @param cid The identifier of the data call which is provided in {@link DataCallResponse}
         * @param callback The result callback for this request.
         */
        public void cancelHandover(int cid, @NonNull DataServiceCallback callback) {
            // The default implementation is to return unsupported.
            if (callback != null) {
                Log.d(TAG, "cancelHandover: " + cid);
                callback.onHandoverCancelled(DataServiceCallback.RESULT_ERROR_UNSUPPORTED);
            } else {
                Log.e(TAG, "cancelHandover: " + cid + ", callback is null");
            }
        }

        /**
        /**
         * Get the active data call list.
         * Get the active data call list.
         *
         *
@@ -278,16 +358,18 @@ public abstract class DataService extends Service {
        public final boolean allowRoaming;
        public final boolean allowRoaming;
        public final int reason;
        public final int reason;
        public final LinkProperties linkProperties;
        public final LinkProperties linkProperties;
        public final int pduSessionId;
        public final IDataServiceCallback callback;
        public final IDataServiceCallback callback;
        SetupDataCallRequest(int accessNetworkType, DataProfile dataProfile, boolean isRoaming,
        SetupDataCallRequest(int accessNetworkType, DataProfile dataProfile, boolean isRoaming,
                             boolean allowRoaming, int reason, LinkProperties linkProperties,
                             boolean allowRoaming, int reason, LinkProperties linkProperties,
                             IDataServiceCallback callback) {
                             int pduSessionId, IDataServiceCallback callback) {
            this.accessNetworkType = accessNetworkType;
            this.accessNetworkType = accessNetworkType;
            this.dataProfile = dataProfile;
            this.dataProfile = dataProfile;
            this.isRoaming = isRoaming;
            this.isRoaming = isRoaming;
            this.allowRoaming = allowRoaming;
            this.allowRoaming = allowRoaming;
            this.linkProperties = linkProperties;
            this.linkProperties = linkProperties;
            this.reason = reason;
            this.reason = reason;
            this.pduSessionId = pduSessionId;
            this.callback = callback;
            this.callback = callback;
        }
        }
    }
    }
@@ -327,6 +409,16 @@ public abstract class DataService extends Service {
        }
        }
    }
    }


    private static final class BeginCancelHandoverRequest {
        public final int cid;
        public final IDataServiceCallback callback;
        BeginCancelHandoverRequest(int cid,
                IDataServiceCallback callback) {
            this.cid = cid;
            this.callback = callback;
        }
    }

    private static final class DataCallListChangedIndication {
    private static final class DataCallListChangedIndication {
        public final List<DataCallResponse> dataCallList;
        public final List<DataCallResponse> dataCallList;
        public final IDataServiceCallback callback;
        public final IDataServiceCallback callback;
@@ -377,7 +469,7 @@ public abstract class DataService extends Service {
                    serviceProvider.setupDataCall(setupDataCallRequest.accessNetworkType,
                    serviceProvider.setupDataCall(setupDataCallRequest.accessNetworkType,
                            setupDataCallRequest.dataProfile, setupDataCallRequest.isRoaming,
                            setupDataCallRequest.dataProfile, setupDataCallRequest.isRoaming,
                            setupDataCallRequest.allowRoaming, setupDataCallRequest.reason,
                            setupDataCallRequest.allowRoaming, setupDataCallRequest.reason,
                            setupDataCallRequest.linkProperties,
                            setupDataCallRequest.linkProperties, setupDataCallRequest.pduSessionId,
                            (setupDataCallRequest.callback != null)
                            (setupDataCallRequest.callback != null)
                                    ? new DataServiceCallback(setupDataCallRequest.callback)
                                    ? new DataServiceCallback(setupDataCallRequest.callback)
                                    : null);
                                    : null);
@@ -438,6 +530,20 @@ public abstract class DataService extends Service {
                        loge("Failed to call onDataCallListChanged. " + e);
                        loge("Failed to call onDataCallListChanged. " + e);
                    }
                    }
                    break;
                    break;
                case DATA_SERVICE_REQUEST_START_HANDOVER:
                    if (serviceProvider == null) break;
                    BeginCancelHandoverRequest bReq = (BeginCancelHandoverRequest) message.obj;
                    serviceProvider.startHandover(bReq.cid,
                            (bReq.callback != null)
                                    ? new DataServiceCallback(bReq.callback) : null);
                    break;
                case DATA_SERVICE_REQUEST_CANCEL_HANDOVER:
                    if (serviceProvider == null) break;
                    BeginCancelHandoverRequest cReq = (BeginCancelHandoverRequest) message.obj;
                    serviceProvider.cancelHandover(cReq.cid,
                            (cReq.callback != null)
                                    ? new DataServiceCallback(cReq.callback) : null);
                    break;
            }
            }
        }
        }
    }
    }
@@ -507,10 +613,10 @@ public abstract class DataService extends Service {
        @Override
        @Override
        public void setupDataCall(int slotIndex, int accessNetworkType, DataProfile dataProfile,
        public void setupDataCall(int slotIndex, int accessNetworkType, DataProfile dataProfile,
                boolean isRoaming, boolean allowRoaming, int reason,
                boolean isRoaming, boolean allowRoaming, int reason,
                                  LinkProperties linkProperties, IDataServiceCallback callback) {
                LinkProperties linkProperties, int pduSessionId, IDataServiceCallback callback) {
            mHandler.obtainMessage(DATA_SERVICE_REQUEST_SETUP_DATA_CALL, slotIndex, 0,
            mHandler.obtainMessage(DATA_SERVICE_REQUEST_SETUP_DATA_CALL, slotIndex, 0,
                    new SetupDataCallRequest(accessNetworkType, dataProfile, isRoaming,
                    new SetupDataCallRequest(accessNetworkType, dataProfile, isRoaming,
                            allowRoaming, reason, linkProperties, callback))
                            allowRoaming, reason, linkProperties, pduSessionId, callback))
                    .sendToTarget();
                    .sendToTarget();
        }
        }


@@ -566,6 +672,29 @@ public abstract class DataService extends Service {
            mHandler.obtainMessage(DATA_SERVICE_REQUEST_UNREGISTER_DATA_CALL_LIST_CHANGED,
            mHandler.obtainMessage(DATA_SERVICE_REQUEST_UNREGISTER_DATA_CALL_LIST_CHANGED,
                    slotIndex, 0, callback).sendToTarget();
                    slotIndex, 0, callback).sendToTarget();
        }
        }

        @Override
        public void startHandover(int slotIndex, int cid, IDataServiceCallback callback) {
            if (callback == null) {
                loge("startHandover: callback is null");
                return;
            }
            BeginCancelHandoverRequest req = new BeginCancelHandoverRequest(cid, callback);
            mHandler.obtainMessage(DATA_SERVICE_REQUEST_START_HANDOVER,
                    slotIndex, 0, req)
                    .sendToTarget();
        }

        @Override
        public void cancelHandover(int slotIndex, int cid, IDataServiceCallback callback) {
            if (callback == null) {
                loge("cancelHandover: callback is null");
                return;
            }
            BeginCancelHandoverRequest req = new BeginCancelHandoverRequest(cid, callback);
            mHandler.obtainMessage(DATA_SERVICE_REQUEST_CANCEL_HANDOVER,
                    slotIndex, 0, req).sendToTarget();
        }
    }
    }


    private void log(String s) {
    private void log(String s) {
+64 −2
Original line number Original line Diff line number Diff line
@@ -186,4 +186,66 @@ public class DataServiceCallback {
            Rlog.e(TAG, "onDataCallListChanged: callback is null!");
            Rlog.e(TAG, "onDataCallListChanged: callback is null!");
        }
        }
    }
    }

    /**
     * Called to indicate result for the request {@link DataService#startHandover}.
     *
     * @param result The result code. Must be one of the {@link ResultCode}
     */
    public void onHandoverStarted(@ResultCode int result) {
        if (mCallback != null) {
            try {
                if (DBG) Rlog.d(TAG, "onHandoverStarted");
                mCallback.onHandoverStarted(result);
            } catch (RemoteException e) {
                Rlog.e(TAG, "Failed to onHandoverStarted on the remote");
            }
        } else {
            Rlog.e(TAG, "onHandoverStarted: callback is null!");
        }
    }

    /**
     * Called to indicate result for the request {@link DataService#cancelHandover}.
     *
     * @param result The result code. Must be one of the {@link ResultCode}
     */
    public void onHandoverCancelled(@ResultCode int result) {
        if (mCallback != null) {
            try {
                if (DBG) Rlog.d(TAG, "onHandoverCancelled");
                mCallback.onHandoverCancelled(result);
            } catch (RemoteException e) {
                Rlog.e(TAG, "Failed to onHandoverCancelled on the remote");
            }
        } else {
            Rlog.e(TAG, "onHandoverCancelled: callback is null!");
        }
    }

    /**
     * Get the result code as a string
     *
     * @param resultCode The result code. Must be one of the {@link ResultCode}
     * @return the string representation
     *
     * @hide
     */
    @NonNull
    public static String resultCodeToString(@DataServiceCallback.ResultCode int resultCode) {
        switch(resultCode) {
            case RESULT_SUCCESS:
                return "RESULT_SUCCESS";
            case RESULT_ERROR_UNSUPPORTED:
                return "RESULT_ERROR_UNSUPPORTED";
            case RESULT_ERROR_INVALID_ARG:
                return "RESULT_ERROR_INVALID_ARG";
            case RESULT_ERROR_BUSY:
                return "RESULT_ERROR_BUSY";
            case RESULT_ERROR_ILLEGAL_STATE:
                return "RESULT_ERROR_ILLEGAL_STATE";
            default:
                return "Missing case for result code=" + resultCode;
        }
    }
}
}
+3 −1
Original line number Original line Diff line number Diff line
@@ -29,7 +29,7 @@ oneway interface IDataService
    void removeDataServiceProvider(int slotId);
    void removeDataServiceProvider(int slotId);
    void setupDataCall(int slotId, int accessNetwork, in DataProfile dataProfile, boolean isRoaming,
    void setupDataCall(int slotId, int accessNetwork, in DataProfile dataProfile, boolean isRoaming,
                       boolean allowRoaming, int reason, in LinkProperties linkProperties,
                       boolean allowRoaming, int reason, in LinkProperties linkProperties,
                       IDataServiceCallback callback);
                       int pduSessionId, IDataServiceCallback callback);
    void deactivateDataCall(int slotId, int cid, int reason, IDataServiceCallback callback);
    void deactivateDataCall(int slotId, int cid, int reason, IDataServiceCallback callback);
    void setInitialAttachApn(int slotId, in DataProfile dataProfile, boolean isRoaming,
    void setInitialAttachApn(int slotId, in DataProfile dataProfile, boolean isRoaming,
                             IDataServiceCallback callback);
                             IDataServiceCallback callback);
@@ -38,4 +38,6 @@ oneway interface IDataService
    void requestDataCallList(int slotId, IDataServiceCallback callback);
    void requestDataCallList(int slotId, IDataServiceCallback callback);
    void registerForDataCallListChanged(int slotId, IDataServiceCallback callback);
    void registerForDataCallListChanged(int slotId, IDataServiceCallback callback);
    void unregisterForDataCallListChanged(int slotId, IDataServiceCallback callback);
    void unregisterForDataCallListChanged(int slotId, IDataServiceCallback callback);
    void startHandover(int slotId, int cid, IDataServiceCallback callback);
    void cancelHandover(int slotId, int cid, IDataServiceCallback callback);
}
}
Loading