1 /*
2  * Copyright (C) 2022 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 com.android.settingslib.mobile.dataservice;
18 
19 import static androidx.room.ForeignKey.CASCADE;
20 
21 import android.text.TextUtils;
22 
23 import java.util.Objects;
24 
25 import androidx.annotation.NonNull;
26 import androidx.annotation.Nullable;
27 import androidx.room.ColumnInfo;
28 import androidx.room.Entity;
29 import androidx.room.ForeignKey;
30 import androidx.room.Index;
31 import androidx.room.PrimaryKey;
32 
33 @Entity(tableName = DataServiceUtils.SubscriptionInfoData.TABLE_NAME)
34 public class SubscriptionInfoEntity {
SubscriptionInfoEntity(@onNull String subId, int simSlotIndex, int carrierId, String displayName, String carrierName, int dataRoaming, String mcc, String mnc, String countryIso, boolean isEmbedded, int cardId, int portIndex, boolean isOpportunistic, @Nullable String groupUUID, int subscriptionType, String uniqueName, boolean isSubscriptionVisible, String formattedPhoneNumber, boolean isFirstRemovableSubscription, boolean isDefaultSubscriptionSelection, boolean isValidSubscription, boolean isUsableSubscription, boolean isActiveSubscriptionId, boolean isAvailableSubscription, boolean isActiveDataSubscriptionId)35     public SubscriptionInfoEntity(@NonNull String subId, int simSlotIndex, int carrierId,
36             String displayName, String carrierName, int dataRoaming, String mcc, String mnc,
37             String countryIso, boolean isEmbedded, int cardId, int portIndex,
38             boolean isOpportunistic, @Nullable String groupUUID, int subscriptionType,
39             String uniqueName, boolean isSubscriptionVisible, String formattedPhoneNumber,
40             boolean isFirstRemovableSubscription, boolean isDefaultSubscriptionSelection,
41             boolean isValidSubscription, boolean isUsableSubscription,
42             boolean isActiveSubscriptionId, boolean isAvailableSubscription,
43             boolean isActiveDataSubscriptionId) {
44         this.subId = subId;
45         this.simSlotIndex = simSlotIndex;
46         this.carrierId = carrierId;
47         this.displayName = displayName;
48         this.carrierName = carrierName;
49         this.dataRoaming = dataRoaming;
50         this.mcc = mcc;
51         this.mnc = mnc;
52         this.countryIso = countryIso;
53         this.isEmbedded = isEmbedded;
54         this.cardId = cardId;
55         this.portIndex = portIndex;
56         this.isOpportunistic = isOpportunistic;
57         this.groupUUID = groupUUID;
58         this.subscriptionType = subscriptionType;
59         this.uniqueName = uniqueName;
60         this.isSubscriptionVisible = isSubscriptionVisible;
61         this.formattedPhoneNumber = formattedPhoneNumber;
62         this.isFirstRemovableSubscription = isFirstRemovableSubscription;
63         this.isDefaultSubscriptionSelection = isDefaultSubscriptionSelection;
64         this.isValidSubscription = isValidSubscription;
65         this.isUsableSubscription = isUsableSubscription;
66         this.isActiveSubscriptionId = isActiveSubscriptionId;
67         this.isAvailableSubscription = isAvailableSubscription;
68         this.isActiveDataSubscriptionId = isActiveDataSubscriptionId;
69     }
70 
71     @PrimaryKey
72     @ColumnInfo(name = DataServiceUtils.SubscriptionInfoData.COLUMN_ID, index = true)
73     @NonNull
74     public String subId;
75 
76     @ColumnInfo(name = DataServiceUtils.SubscriptionInfoData.COLUMN_SIM_SLOT_INDEX)
77     public int simSlotIndex;
78 
79     @ColumnInfo(name = DataServiceUtils.SubscriptionInfoData.COLUMN_CARRIER_ID)
80     public int carrierId;
81 
82     @ColumnInfo(name = DataServiceUtils.SubscriptionInfoData.COLUMN_DISPLAY_NAME)
83     public String displayName;
84 
85     @ColumnInfo(name = DataServiceUtils.SubscriptionInfoData.COLUMN_CARRIER_NAME)
86     public String carrierName;
87 
88     @ColumnInfo(name = DataServiceUtils.SubscriptionInfoData.COLUMN_DATA_ROAMING)
89     public int dataRoaming;
90 
91     @ColumnInfo(name = DataServiceUtils.SubscriptionInfoData.COLUMN_MCC)
92     public String mcc;
93 
94     @ColumnInfo(name = DataServiceUtils.SubscriptionInfoData.COLUMN_MNC)
95     public String mnc;
96 
97     @ColumnInfo(name = DataServiceUtils.SubscriptionInfoData.COLUMN_COUNTRY_ISO)
98     public String countryIso;
99 
100     @ColumnInfo(name = DataServiceUtils.SubscriptionInfoData.COLUMN_IS_EMBEDDED)
101     public boolean isEmbedded;
102 
103     @ColumnInfo(name = DataServiceUtils.SubscriptionInfoData.COLUMN_CARD_ID)
104     public int cardId;
105 
106     @ColumnInfo(name = DataServiceUtils.SubscriptionInfoData.COLUMN_PORT_INDEX)
107     public int portIndex;
108 
109     @ColumnInfo(name = DataServiceUtils.SubscriptionInfoData.COLUMN_IS_OPPORTUNISTIC)
110     public boolean isOpportunistic;
111 
112     @ColumnInfo(name = DataServiceUtils.SubscriptionInfoData.COLUMN_GROUP_UUID)
113     @Nullable
114     public String groupUUID;
115 
116     @ColumnInfo(name = DataServiceUtils.SubscriptionInfoData.COLUMN_SUBSCRIPTION_TYPE)
117     public int subscriptionType;
118 
119     @ColumnInfo(name = DataServiceUtils.SubscriptionInfoData.COLUMN_UNIQUE_NAME)
120     public String uniqueName;
121 
122     @ColumnInfo(name = DataServiceUtils.SubscriptionInfoData.COLUMN_IS_SUBSCRIPTION_VISIBLE)
123     public boolean isSubscriptionVisible;
124 
125     @ColumnInfo(name = DataServiceUtils.SubscriptionInfoData.COLUMN_FORMATTED_PHONE_NUMBER)
126     public String formattedPhoneNumber;
127 
128     @ColumnInfo(name = DataServiceUtils.SubscriptionInfoData.COLUMN_IS_FIRST_REMOVABLE_SUBSCRIPTION)
129     public boolean isFirstRemovableSubscription;
130 
131     @ColumnInfo(name =
132             DataServiceUtils.SubscriptionInfoData.COLUMN_IS_DEFAULT_SUBSCRIPTION_SELECTION)
133     public boolean isDefaultSubscriptionSelection;
134 
135     @ColumnInfo(name = DataServiceUtils.SubscriptionInfoData.COLUMN_IS_VALID_SUBSCRIPTION)
136     public boolean isValidSubscription;
137 
138     @ColumnInfo(name = DataServiceUtils.SubscriptionInfoData.COLUMN_IS_USABLE_SUBSCRIPTION)
139     public boolean isUsableSubscription;
140 
141     @ColumnInfo(name = DataServiceUtils.SubscriptionInfoData.COLUMN_IS_ACTIVE_SUBSCRIPTION_ID)
142     public boolean isActiveSubscriptionId;
143 
144     @ColumnInfo(name = DataServiceUtils.SubscriptionInfoData.COLUMN_IS_AVAILABLE_SUBSCRIPTION)
145     public boolean isAvailableSubscription;
146 
147     @ColumnInfo(name = DataServiceUtils.SubscriptionInfoData.COLUMN_IS_ACTIVE_DATA_SUBSCRIPTION)
148     public boolean isActiveDataSubscriptionId;
149 
getSubId()150     public int getSubId() {
151         return Integer.valueOf(subId);
152     }
153 
getUniqueDisplayName()154     public CharSequence getUniqueDisplayName() {
155         return uniqueName;
156     }
157 
isActiveSubscription()158     public boolean isActiveSubscription() {
159         return isActiveSubscriptionId;
160     }
161 
isSubscriptionVisible()162     public boolean isSubscriptionVisible() {
163         return isSubscriptionVisible;
164     }
165 
166     @Override
hashCode()167     public int hashCode() {
168         int result = 17;
169         result = 31 * result + subId.hashCode();
170         result = 31 * result + simSlotIndex;
171         result = 31 * result + carrierId;
172         result = 31 * result + displayName.hashCode();
173         result = 31 * result + carrierName.hashCode();
174         result = 31 * result + dataRoaming;
175         result = 31 * result + mcc.hashCode();
176         result = 31 * result + mnc.hashCode();
177         result = 31 * result + countryIso.hashCode();
178         result = 31 * result + Boolean.hashCode(isEmbedded);
179         result = 31 * result + cardId;
180         result = 31 * result + portIndex;
181         result = 31 * result + Boolean.hashCode(isOpportunistic);
182         result = 31 * result + groupUUID.hashCode();
183         result = 31 * result + subscriptionType;
184         result = 31 * result + uniqueName.hashCode();
185         result = 31 * result + Boolean.hashCode(isSubscriptionVisible);
186         result = 31 * result + formattedPhoneNumber.hashCode();
187         result = 31 * result + Boolean.hashCode(isFirstRemovableSubscription);
188         result = 31 * result + Boolean.hashCode(isDefaultSubscriptionSelection);
189         result = 31 * result + Boolean.hashCode(isValidSubscription);
190         result = 31 * result + Boolean.hashCode(isUsableSubscription);
191         result = 31 * result + Boolean.hashCode(isActiveSubscriptionId);
192         result = 31 * result + Boolean.hashCode(isAvailableSubscription);
193         result = 31 * result + Boolean.hashCode(isActiveDataSubscriptionId);
194         return result;
195     }
196 
197     @Override
equals(Object obj)198     public boolean equals(Object obj) {
199         if (this == obj) {
200             return true;
201         }
202         if (!(obj instanceof SubscriptionInfoEntity)) {
203             return false;
204         }
205 
206         SubscriptionInfoEntity info = (SubscriptionInfoEntity) obj;
207         return  TextUtils.equals(subId, info.subId)
208                 && simSlotIndex == info.simSlotIndex
209                 && carrierId == info.carrierId
210                 && TextUtils.equals(displayName, info.displayName)
211                 && TextUtils.equals(carrierName, info.carrierName)
212                 && dataRoaming == info.dataRoaming
213                 && TextUtils.equals(mcc, info.mcc)
214                 && TextUtils.equals(mnc, info.mnc)
215                 && TextUtils.equals(countryIso, info.countryIso)
216                 && isEmbedded == info.isEmbedded
217                 && cardId == info.cardId
218                 && portIndex == info.portIndex
219                 && isOpportunistic == info.isOpportunistic
220                 && TextUtils.equals(groupUUID, info.groupUUID)
221                 && subscriptionType == info.subscriptionType
222                 && TextUtils.equals(uniqueName, info.uniqueName)
223                 && isSubscriptionVisible == info.isSubscriptionVisible
224                 && TextUtils.equals(formattedPhoneNumber, info.formattedPhoneNumber)
225                 && isFirstRemovableSubscription == info.isFirstRemovableSubscription
226                 && isDefaultSubscriptionSelection == info.isDefaultSubscriptionSelection
227                 && isValidSubscription == info.isValidSubscription
228                 && isUsableSubscription == info.isUsableSubscription
229                 && isActiveSubscriptionId == info.isActiveSubscriptionId
230                 && isAvailableSubscription == info.isAvailableSubscription
231                 && isActiveDataSubscriptionId == info.isActiveDataSubscriptionId;
232     }
233 
toString()234     public String toString() {
235         StringBuilder builder = new StringBuilder();
236         builder.append(" {SubscriptionInfoEntity(subId = ")
237                 .append(subId)
238                 .append(", simSlotIndex = ")
239                 .append(simSlotIndex)
240                 .append(", carrierId = ")
241                 .append(carrierId)
242                 .append(", displayName = ")
243                 .append(displayName)
244                 .append(", carrierName = ")
245                 .append(carrierName)
246                 .append(", dataRoaming = ")
247                 .append(dataRoaming)
248                 .append(", mcc = ")
249                 .append(mcc)
250                 .append(", mnc = ")
251                 .append(mnc)
252                 .append(", countryIso = ")
253                 .append(countryIso)
254                 .append(", isEmbedded = ")
255                 .append(isEmbedded)
256                 .append(", cardId = ")
257                 .append(cardId)
258                 .append(", portIndex = ")
259                 .append(portIndex)
260                 .append(", isOpportunistic = ")
261                 .append(isOpportunistic)
262                 .append(", groupUUID = ")
263                 .append(groupUUID)
264                 .append(", subscriptionType = ")
265                 .append(subscriptionType)
266                 .append(", uniqueName = ")
267                 .append(uniqueName)
268                 .append(", isSubscriptionVisible = ")
269                 .append(isSubscriptionVisible)
270                 .append(", formattedPhoneNumber = ")
271                 .append(formattedPhoneNumber)
272                 .append(", isFirstRemovableSubscription = ")
273                 .append(isFirstRemovableSubscription)
274                 .append(", isDefaultSubscriptionSelection = ")
275                 .append(isDefaultSubscriptionSelection)
276                 .append(", isValidSubscription = ")
277                 .append(isValidSubscription)
278                 .append(", isUsableSubscription = ")
279                 .append(isUsableSubscription)
280                 .append(", isActiveSubscriptionId = ")
281                 .append(isActiveSubscriptionId)
282                 .append(", isAvailableSubscription = ")
283                 .append(isAvailableSubscription)
284                 .append(", isActiveDataSubscriptionId = ")
285                 .append(isActiveDataSubscriptionId)
286                 .append(")}");
287         return builder.toString();
288     }
289 }
290