Home | History | Annotate | Download | only in stub
      1 /*
      2  * Copyright (C) 2018 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License
     15  */
     16 
     17 package android.telephony.ims.stub;
     18 
     19 import android.annotation.SystemApi;
     20 import android.os.Parcel;
     21 import android.os.Parcelable;
     22 import android.telephony.ims.feature.ImsFeature;
     23 import android.util.ArraySet;
     24 import android.util.Pair;
     25 
     26 import java.util.Set;
     27 
     28 /**
     29  * Container class for IMS Feature configuration. This class contains the features that the
     30  * ImsService supports, which are defined in {@link ImsFeature} as
     31  * {@link ImsFeature#FEATURE_EMERGENCY_MMTEL}, {@link ImsFeature#FEATURE_MMTEL}, and
     32  * {@link ImsFeature#FEATURE_RCS}.
     33  *
     34  * @hide
     35  */
     36 @SystemApi
     37 public final class ImsFeatureConfiguration implements Parcelable {
     38 
     39     public static final class FeatureSlotPair {
     40         /**
     41          * SIM slot that this feature is associated with.
     42          */
     43         public final int slotId;
     44         /**
     45          * The feature that this slotId supports. Supported values are
     46          * {@link ImsFeature#FEATURE_EMERGENCY_MMTEL}, {@link ImsFeature#FEATURE_MMTEL}, and
     47          * {@link ImsFeature#FEATURE_RCS}.
     48          */
     49         public final @ImsFeature.FeatureType int featureType;
     50 
     51         /**
     52          * A mapping from slotId to IMS Feature type.
     53          * @param slotId the SIM slot ID associated with this feature.
     54          * @param featureType The feature that this slotId supports. Supported values are
     55          * {@link ImsFeature#FEATURE_EMERGENCY_MMTEL}, {@link ImsFeature#FEATURE_MMTEL}, and
     56          * {@link ImsFeature#FEATURE_RCS}.
     57          */
     58         public FeatureSlotPair(int slotId, @ImsFeature.FeatureType int featureType) {
     59             this.slotId = slotId;
     60             this.featureType = featureType;
     61         }
     62 
     63         @Override
     64         public boolean equals(Object o) {
     65             if (this == o) return true;
     66             if (o == null || getClass() != o.getClass()) return false;
     67 
     68             FeatureSlotPair that = (FeatureSlotPair) o;
     69 
     70             if (slotId != that.slotId) return false;
     71             return featureType == that.featureType;
     72         }
     73 
     74         @Override
     75         public int hashCode() {
     76             int result = slotId;
     77             result = 31 * result + featureType;
     78             return result;
     79         }
     80 
     81         @Override
     82         public String toString() {
     83             return "{s=" + slotId + ", f=" + featureType + "}";
     84         }
     85     }
     86 
     87     /**
     88      * Features that this ImsService supports.
     89      */
     90     private final Set<FeatureSlotPair> mFeatures;
     91 
     92     /**
     93      * Builder for {@link ImsFeatureConfiguration}.
     94      */
     95     public static class Builder {
     96             ImsFeatureConfiguration mConfig;
     97         public Builder() {
     98             mConfig = new ImsFeatureConfiguration();
     99         }
    100 
    101         /**
    102          * Adds an IMS feature associated with a SIM slot ID.
    103          * @param slotId The slot ID associated with the IMS feature.
    104          * @param featureType The feature that the slot ID supports. Supported values are
    105          * {@link ImsFeature#FEATURE_EMERGENCY_MMTEL}, {@link ImsFeature#FEATURE_MMTEL}, and
    106          * {@link ImsFeature#FEATURE_RCS}.
    107          * @return a {@link Builder} to continue constructing the ImsFeatureConfiguration.
    108          */
    109         public Builder addFeature(int slotId, @ImsFeature.FeatureType int featureType) {
    110             mConfig.addFeature(slotId, featureType);
    111             return this;
    112         }
    113 
    114         public ImsFeatureConfiguration build() {
    115             return mConfig;
    116         }
    117     }
    118 
    119     /**
    120      * Creates with all registration features empty.
    121      * @hide
    122      */
    123     public ImsFeatureConfiguration() {
    124         mFeatures = new ArraySet<>();
    125     }
    126 
    127     /**
    128      * Configuration of the ImsService, which describes which features the ImsService supports
    129      * (for registration).
    130      * @param features a set of {@link FeatureSlotPair}s that describe which features this
    131      *         ImsService supports.
    132      * @hide
    133      */
    134     public ImsFeatureConfiguration(Set<FeatureSlotPair> features) {
    135         mFeatures = new ArraySet<>();
    136 
    137         if (features != null) {
    138             mFeatures.addAll(features);
    139         }
    140     }
    141 
    142     /**
    143      * @return a set of supported slot ID to feature type pairs contained within a
    144      * {@link FeatureSlotPair}.
    145      */
    146     public Set<FeatureSlotPair> getServiceFeatures() {
    147         return new ArraySet<>(mFeatures);
    148     }
    149 
    150     /**
    151      * @hide
    152      */
    153     void addFeature(int slotId, int feature) {
    154         mFeatures.add(new FeatureSlotPair(slotId, feature));
    155     }
    156 
    157     /** @hide */
    158     protected ImsFeatureConfiguration(Parcel in) {
    159         int featurePairLength = in.readInt();
    160         // length
    161         mFeatures = new ArraySet<>(featurePairLength);
    162         for (int i = 0; i < featurePairLength; i++) {
    163             // pair of reads for each entry (slotId->featureType)
    164             mFeatures.add(new FeatureSlotPair(in.readInt(), in.readInt()));
    165         }
    166     }
    167 
    168     public static final Creator<ImsFeatureConfiguration> CREATOR
    169             = new Creator<ImsFeatureConfiguration>() {
    170         @Override
    171         public ImsFeatureConfiguration createFromParcel(Parcel in) {
    172             return new ImsFeatureConfiguration(in);
    173         }
    174 
    175         @Override
    176         public ImsFeatureConfiguration[] newArray(int size) {
    177             return new ImsFeatureConfiguration[size];
    178         }
    179     };
    180 
    181     @Override
    182     public int describeContents() {
    183         return 0;
    184     }
    185 
    186     @Override
    187     public void writeToParcel(Parcel dest, int flags) {
    188         FeatureSlotPair[] featureSlotPairs = new FeatureSlotPair[mFeatures.size()];
    189         mFeatures.toArray(featureSlotPairs);
    190         // length of list
    191         dest.writeInt(featureSlotPairs.length);
    192         // then pairs of integers for each entry (slotId->featureType).
    193         for (FeatureSlotPair featureSlotPair : featureSlotPairs) {
    194             dest.writeInt(featureSlotPair.slotId);
    195             dest.writeInt(featureSlotPair.featureType);
    196         }
    197     }
    198 
    199     /**
    200      * @hide
    201      */
    202     @Override
    203     public boolean equals(Object o) {
    204         if (this == o) return true;
    205         if (!(o instanceof ImsFeatureConfiguration)) return false;
    206 
    207         ImsFeatureConfiguration
    208                 that = (ImsFeatureConfiguration) o;
    209 
    210         return mFeatures.equals(that.mFeatures);
    211     }
    212 
    213     /**
    214      * @hide
    215      */
    216     @Override
    217     public int hashCode() {
    218         return mFeatures.hashCode();
    219     }
    220 }
    221