| /* | |
| * Copyright (C) 2020 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 com.android.ims; | |
| import android.annotation.NonNull; | |
| import android.annotation.Nullable; | |
| import android.os.IBinder; | |
| import android.os.Parcel; | |
| import android.os.Parcelable; | |
| import android.telephony.ims.ImsService; | |
| import android.telephony.ims.aidl.IImsConfig; | |
| import android.telephony.ims.aidl.IImsRegistration; | |
| import android.telephony.ims.aidl.ISipTransport; | |
| import android.telephony.ims.feature.ImsFeature; | |
| import java.util.Objects; | |
| /** | |
| * Contains an IBinder linking to the appropriate ImsFeature as well as the associated | |
| * interfaces. | |
| * @hide | |
| */ | |
| public final class ImsFeatureContainer implements Parcelable { | |
| /** | |
| * ImsFeature that is being tracked. | |
| */ | |
| public final IBinder imsFeature; | |
| /** | |
| * IImsConfig interface that should be associated with the ImsFeature. | |
| */ | |
| public final android.telephony.ims.aidl.IImsConfig imsConfig; | |
| /** | |
| * IImsRegistration interface that should be associated with this ImsFeature. | |
| */ | |
| public final IImsRegistration imsRegistration; | |
| /** | |
| * An optional interface containing the SIP transport implementation from the ImsService. | |
| */ | |
| public final ISipTransport sipTransport; | |
| /** | |
| * State of the feature that is being tracked. | |
| */ | |
| private @ImsFeature.ImsState int mState = ImsFeature.STATE_UNAVAILABLE; | |
| /** | |
| * Capabilities of this ImsService. | |
| */ | |
| private @ImsService.ImsServiceCapability long mCapabilities; | |
| /** | |
| * Contains the ImsFeature IBinder as well as the ImsService interfaces associated with | |
| * that feature. | |
| * @param iFace IBinder connection to the ImsFeature. | |
| * @param iConfig IImsConfig interface associated with the ImsFeature. | |
| * @param iReg IImsRegistration interface associated with the ImsFeature | |
| * @param initialCaps The initial capabilities that the ImsService supports. | |
| */ | |
| public ImsFeatureContainer(@NonNull IBinder iFace, @NonNull IImsConfig iConfig, | |
| @NonNull IImsRegistration iReg, @Nullable ISipTransport transport, long initialCaps) { | |
| imsFeature = iFace; | |
| imsConfig = iConfig; | |
| imsRegistration = iReg; | |
| sipTransport = transport; | |
| mCapabilities = initialCaps; | |
| } | |
| /** | |
| * Create an ImsFeatureContainer from a Parcel. | |
| */ | |
| private ImsFeatureContainer(Parcel in) { | |
| imsFeature = in.readStrongBinder(); | |
| imsConfig = IImsConfig.Stub.asInterface(in.readStrongBinder()); | |
| imsRegistration = IImsRegistration.Stub.asInterface(in.readStrongBinder()); | |
| sipTransport = ISipTransport.Stub.asInterface(in.readStrongBinder()); | |
| mState = in.readInt(); | |
| mCapabilities = in.readLong(); | |
| } | |
| /** | |
| * @return the capabilties that are associated with the ImsService that this ImsFeature | |
| * belongs to. | |
| */ | |
| public @ImsService.ImsServiceCapability long getCapabilities() { | |
| return mCapabilities; | |
| } | |
| /** | |
| * Update the capabilities that are associated with the ImsService that this ImsFeature | |
| * belongs to. | |
| */ | |
| public void setCapabilities(@ImsService.ImsServiceCapability long caps) { | |
| mCapabilities = caps; | |
| } | |
| /** | |
| * @return The state of the ImsFeature. | |
| */ | |
| public @ImsFeature.ImsState int getState() { | |
| return mState; | |
| } | |
| /** | |
| * Set the state that is associated with the ImsService that this ImsFeature | |
| * belongs to. | |
| */ | |
| public void setState(@ImsFeature.ImsState int state) { | |
| mState = state; | |
| } | |
| @Override | |
| public boolean equals(Object o) { | |
| if (this == o) return true; | |
| if (o == null || getClass() != o.getClass()) return false; | |
| ImsFeatureContainer that = (ImsFeatureContainer) o; | |
| return imsFeature.equals(that.imsFeature) && | |
| imsConfig.equals(that.imsConfig) && | |
| imsRegistration.equals(that.imsRegistration) && | |
| sipTransport.equals(that.sipTransport) && | |
| mState == that.getState() && | |
| mCapabilities == that.getCapabilities(); | |
| } | |
| @Override | |
| public int hashCode() { | |
| return Objects.hash(imsFeature, imsConfig, imsRegistration, sipTransport, mState, | |
| mCapabilities); | |
| } | |
| @Override | |
| public String toString() { | |
| return "FeatureContainer{" + | |
| "imsFeature=" + imsFeature + | |
| ", imsConfig=" + imsConfig + | |
| ", imsRegistration=" + imsRegistration + | |
| ", sipTransport=" + sipTransport + | |
| ", state=" + ImsFeature.STATE_LOG_MAP.get(mState) + | |
| ", capabilities = " + ImsService.getCapabilitiesString(mCapabilities) + | |
| '}'; | |
| } | |
| @Override | |
| public int describeContents() { | |
| return 0; | |
| } | |
| @Override | |
| public void writeToParcel(Parcel dest, int flags) { | |
| dest.writeStrongBinder(imsFeature); | |
| dest.writeStrongInterface(imsConfig); | |
| dest.writeStrongInterface(imsRegistration); | |
| dest.writeStrongInterface(sipTransport); | |
| dest.writeInt(mState); | |
| dest.writeLong(mCapabilities); | |
| } | |
| public static final Creator<ImsFeatureContainer> CREATOR = new Creator<ImsFeatureContainer>() { | |
| @Override | |
| public ImsFeatureContainer createFromParcel(Parcel source) { | |
| return new ImsFeatureContainer(source); | |
| } | |
| @Override | |
| public ImsFeatureContainer[] newArray(int size) { | |
| return new ImsFeatureContainer[size]; | |
| } | |
| }; | |
| } |