blob: cb4f10455ec968eef1ca87ed996081062294d500 [file] [log] [blame]
Jeff Davidsond02731f2017-04-09 14:31:09 -07001/*
2 * Copyright (C) 2017 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 */
16package android.service.euicc;
17
Holly Jiuyu Sune6153b92017-12-07 15:35:49 -080018import android.annotation.IntDef;
Jeff Davidsond02731f2017-04-09 14:31:09 -070019import android.annotation.Nullable;
Holly Jiuyu Sunaf6a5ff2017-12-12 20:17:09 -080020import android.annotation.SystemApi;
Jeff Davidsond02731f2017-04-09 14:31:09 -070021import android.os.Parcel;
22import android.os.Parcelable;
Holly Jiuyu Sune6153b92017-12-07 15:35:49 -080023import android.service.carrier.CarrierIdentifier;
Jeff Davidsond02731f2017-04-09 14:31:09 -070024import android.telephony.UiccAccessRule;
25import android.text.TextUtils;
26
Holly Jiuyu Sune6153b92017-12-07 15:35:49 -080027import java.lang.annotation.Retention;
28import java.lang.annotation.RetentionPolicy;
29import java.util.Arrays;
Holly Jiuyu Sunaf6a5ff2017-12-12 20:17:09 -080030import java.util.List;
Holly Jiuyu Sune6153b92017-12-07 15:35:49 -080031import java.util.Objects;
32
Jeff Davidsond02731f2017-04-09 14:31:09 -070033/**
34 * Information about an embedded profile (subscription) on an eUICC.
35 *
36 * @hide
Jeff Davidsond02731f2017-04-09 14:31:09 -070037 */
Holly Jiuyu Sunaf6a5ff2017-12-12 20:17:09 -080038@SystemApi
Jeff Davidsond02731f2017-04-09 14:31:09 -070039public final class EuiccProfileInfo implements Parcelable {
40
Holly Jiuyu Sune6153b92017-12-07 15:35:49 -080041 /** Profile policy rules (bit mask) */
42 @Retention(RetentionPolicy.SOURCE)
43 @IntDef(flag = true, prefix = { "POLICY_RULE_" }, value = {
44 POLICY_RULE_DO_NOT_DISABLE,
45 POLICY_RULE_DO_NOT_DELETE,
46 POLICY_RULE_DELETE_AFTER_DISABLING
47 })
Holly Jiuyu Sunaf6a5ff2017-12-12 20:17:09 -080048 /** @hide */
Holly Jiuyu Sune6153b92017-12-07 15:35:49 -080049 public @interface PolicyRule {}
50 /** Once this profile is enabled, it cannot be disabled. */
51 public static final int POLICY_RULE_DO_NOT_DISABLE = 1;
52 /** This profile cannot be deleted. */
53 public static final int POLICY_RULE_DO_NOT_DELETE = 1 << 1;
54 /** This profile should be deleted after being disabled. */
55 public static final int POLICY_RULE_DELETE_AFTER_DISABLING = 1 << 2;
56
57 /** Class of the profile */
58 @Retention(RetentionPolicy.SOURCE)
59 @IntDef(prefix = { "PROFILE_CLASS_" }, value = {
60 PROFILE_CLASS_TESTING,
61 PROFILE_CLASS_PROVISIONING,
62 PROFILE_CLASS_OPERATIONAL,
63 PROFILE_CLASS_UNSET
64 })
Holly Jiuyu Sunaf6a5ff2017-12-12 20:17:09 -080065 /** @hide */
Holly Jiuyu Sune6153b92017-12-07 15:35:49 -080066 public @interface ProfileClass {}
67 /** Testing profiles */
68 public static final int PROFILE_CLASS_TESTING = 0;
69 /** Provisioning profiles which are pre-loaded on eUICC */
70 public static final int PROFILE_CLASS_PROVISIONING = 1;
71 /** Operational profiles which can be pre-loaded or downloaded */
72 public static final int PROFILE_CLASS_OPERATIONAL = 2;
73 /**
74 * Profile class not set.
75 * @hide
76 */
77 public static final int PROFILE_CLASS_UNSET = -1;
78
79 /** State of the profile */
80 @Retention(RetentionPolicy.SOURCE)
81 @IntDef(prefix = { "PROFILE_STATE_" }, value = {
82 PROFILE_STATE_DISABLED,
83 PROFILE_STATE_ENABLED,
84 PROFILE_STATE_UNSET
85 })
Holly Jiuyu Sunaf6a5ff2017-12-12 20:17:09 -080086 /** @hide */
Holly Jiuyu Sune6153b92017-12-07 15:35:49 -080087 public @interface ProfileState {}
88 /** Disabled profiles */
89 public static final int PROFILE_STATE_DISABLED = 0;
90 /** Enabled profile */
91 public static final int PROFILE_STATE_ENABLED = 1;
92 /**
93 * Profile state not set.
94 * @hide
95 */
96 public static final int PROFILE_STATE_UNSET = -1;
97
Jeff Davidsond02731f2017-04-09 14:31:09 -070098 /** The iccid of the subscription. */
Holly Jiuyu Sunaf6a5ff2017-12-12 20:17:09 -080099 private final String mIccid;
Jeff Davidsond02731f2017-04-09 14:31:09 -0700100
Holly Jiuyu Sune6153b92017-12-07 15:35:49 -0800101 /** An optional nickname for the subscription. */
Holly Jiuyu Sunaf6a5ff2017-12-12 20:17:09 -0800102 private final @Nullable String mNickname;
Holly Jiuyu Sune6153b92017-12-07 15:35:49 -0800103
104 /** The service provider name for the subscription. */
Holly Jiuyu Sunaf6a5ff2017-12-12 20:17:09 -0800105 private final String mServiceProviderName;
Holly Jiuyu Sune6153b92017-12-07 15:35:49 -0800106
107 /** The profile name for the subscription. */
Holly Jiuyu Sunaf6a5ff2017-12-12 20:17:09 -0800108 private final String mProfileName;
Holly Jiuyu Sune6153b92017-12-07 15:35:49 -0800109
110 /** Profile class for the subscription. */
Holly Jiuyu Sunaf6a5ff2017-12-12 20:17:09 -0800111 @ProfileClass private final int mProfileClass;
Holly Jiuyu Sune6153b92017-12-07 15:35:49 -0800112
113 /** The profile state of the subscription. */
Holly Jiuyu Sunaf6a5ff2017-12-12 20:17:09 -0800114 @ProfileState private final int mState;
Holly Jiuyu Sune6153b92017-12-07 15:35:49 -0800115
116 /** The operator Id of the subscription. */
Holly Jiuyu Sunaf6a5ff2017-12-12 20:17:09 -0800117 private final CarrierIdentifier mCarrierIdentifier;
Holly Jiuyu Sune6153b92017-12-07 15:35:49 -0800118
119 /** The policy rules of the subscription. */
Holly Jiuyu Sunaf6a5ff2017-12-12 20:17:09 -0800120 @PolicyRule private final int mPolicyRules;
Holly Jiuyu Sune6153b92017-12-07 15:35:49 -0800121
Jeff Davidsond02731f2017-04-09 14:31:09 -0700122 /**
123 * Optional access rules defining which apps can manage this subscription. If unset, only the
124 * platform can manage it.
125 */
Holly Jiuyu Sunaf6a5ff2017-12-12 20:17:09 -0800126 private final @Nullable UiccAccessRule[] mAccessRules;
Jeff Davidsond02731f2017-04-09 14:31:09 -0700127
Jeff Davidsond02731f2017-04-09 14:31:09 -0700128 public static final Creator<EuiccProfileInfo> CREATOR = new Creator<EuiccProfileInfo>() {
129 @Override
130 public EuiccProfileInfo createFromParcel(Parcel in) {
131 return new EuiccProfileInfo(in);
132 }
133
134 @Override
135 public EuiccProfileInfo[] newArray(int size) {
136 return new EuiccProfileInfo[size];
137 }
138 };
139
Holly Jiuyu Sune6153b92017-12-07 15:35:49 -0800140 // TODO(b/70292228): Remove this method when LPA can be updated.
141 /**
142 * @hide
143 * @deprecated - Do not use.
144 */
145 @Deprecated
Jeff Davidsond02731f2017-04-09 14:31:09 -0700146 public EuiccProfileInfo(String iccid, @Nullable UiccAccessRule[] accessRules,
147 @Nullable String nickname) {
148 if (!TextUtils.isDigitsOnly(iccid)) {
149 throw new IllegalArgumentException("iccid contains invalid characters: " + iccid);
150 }
Holly Jiuyu Sunaf6a5ff2017-12-12 20:17:09 -0800151 this.mIccid = iccid;
152 this.mAccessRules = accessRules;
153 this.mNickname = nickname;
Holly Jiuyu Sune6153b92017-12-07 15:35:49 -0800154
Holly Jiuyu Sunaf6a5ff2017-12-12 20:17:09 -0800155 this.mServiceProviderName = null;
156 this.mProfileName = null;
157 this.mProfileClass = PROFILE_CLASS_UNSET;
158 this.mState = PROFILE_STATE_UNSET;
159 this.mCarrierIdentifier = null;
160 this.mPolicyRules = 0;
Jeff Davidsond02731f2017-04-09 14:31:09 -0700161 }
162
163 private EuiccProfileInfo(Parcel in) {
Holly Jiuyu Sunaf6a5ff2017-12-12 20:17:09 -0800164 mIccid = in.readString();
165 mNickname = in.readString();
166 mServiceProviderName = in.readString();
167 mProfileName = in.readString();
168 mProfileClass = in.readInt();
169 mState = in.readInt();
Holly Jiuyu Sune6153b92017-12-07 15:35:49 -0800170 byte exist = in.readByte();
171 if (exist == (byte) 1) {
Holly Jiuyu Sunaf6a5ff2017-12-12 20:17:09 -0800172 mCarrierIdentifier = CarrierIdentifier.CREATOR.createFromParcel(in);
Holly Jiuyu Sune6153b92017-12-07 15:35:49 -0800173 } else {
Holly Jiuyu Sunaf6a5ff2017-12-12 20:17:09 -0800174 mCarrierIdentifier = null;
Holly Jiuyu Sune6153b92017-12-07 15:35:49 -0800175 }
Holly Jiuyu Sunaf6a5ff2017-12-12 20:17:09 -0800176 mPolicyRules = in.readInt();
177 mAccessRules = in.createTypedArray(UiccAccessRule.CREATOR);
Jeff Davidsond02731f2017-04-09 14:31:09 -0700178 }
179
180 @Override
181 public void writeToParcel(Parcel dest, int flags) {
Holly Jiuyu Sunaf6a5ff2017-12-12 20:17:09 -0800182 dest.writeString(mIccid);
183 dest.writeString(mNickname);
184 dest.writeString(mServiceProviderName);
185 dest.writeString(mProfileName);
186 dest.writeInt(mProfileClass);
187 dest.writeInt(mState);
188 if (mCarrierIdentifier != null) {
Holly Jiuyu Sune6153b92017-12-07 15:35:49 -0800189 dest.writeByte((byte) 1);
Holly Jiuyu Sunaf6a5ff2017-12-12 20:17:09 -0800190 mCarrierIdentifier.writeToParcel(dest, flags);
Holly Jiuyu Sune6153b92017-12-07 15:35:49 -0800191 } else {
192 dest.writeByte((byte) 0);
193 }
Holly Jiuyu Sunaf6a5ff2017-12-12 20:17:09 -0800194 dest.writeInt(mPolicyRules);
195 dest.writeTypedArray(mAccessRules, flags);
Jeff Davidsond02731f2017-04-09 14:31:09 -0700196 }
197
198 @Override
199 public int describeContents() {
200 return 0;
201 }
Holly Jiuyu Sune6153b92017-12-07 15:35:49 -0800202
203 /** The builder to build a new {@link EuiccProfileInfo} instance. */
204 public static final class Builder {
Holly Jiuyu Sunaf6a5ff2017-12-12 20:17:09 -0800205 private String mIccid;
206 private List<UiccAccessRule> mAccessRules;
207 private String mNickname;
208 private String mServiceProviderName;
209 private String mProfileName;
210 @ProfileClass private int mProfileClass;
211 @ProfileState private int mState;
212 private CarrierIdentifier mCarrierIdentifier;
213 @PolicyRule private int mPolicyRules;
Holly Jiuyu Sune6153b92017-12-07 15:35:49 -0800214
Holly Jiuyu Sunaf6a5ff2017-12-12 20:17:09 -0800215 public Builder(String value) {
216 if (!TextUtils.isDigitsOnly(value)) {
217 throw new IllegalArgumentException("iccid contains invalid characters: " + value);
218 }
219 mIccid = value;
220 }
Holly Jiuyu Sune6153b92017-12-07 15:35:49 -0800221
222 public Builder(EuiccProfileInfo baseProfile) {
Holly Jiuyu Sunaf6a5ff2017-12-12 20:17:09 -0800223 mIccid = baseProfile.mIccid;
224 mNickname = baseProfile.mNickname;
225 mServiceProviderName = baseProfile.mServiceProviderName;
226 mProfileName = baseProfile.mProfileName;
227 mProfileClass = baseProfile.mProfileClass;
228 mState = baseProfile.mState;
229 mCarrierIdentifier = baseProfile.mCarrierIdentifier;
230 mPolicyRules = baseProfile.mPolicyRules;
231 mAccessRules = Arrays.asList(baseProfile.mAccessRules);
Holly Jiuyu Sune6153b92017-12-07 15:35:49 -0800232 }
233
234 /** Builds the profile instance. */
235 public EuiccProfileInfo build() {
Holly Jiuyu Sunaf6a5ff2017-12-12 20:17:09 -0800236 if (mIccid == null) {
Holly Jiuyu Sune6153b92017-12-07 15:35:49 -0800237 throw new IllegalStateException("ICCID must be set for a profile.");
238 }
239 return new EuiccProfileInfo(
Holly Jiuyu Sunaf6a5ff2017-12-12 20:17:09 -0800240 mIccid,
241 mNickname,
242 mServiceProviderName,
243 mProfileName,
244 mProfileClass,
245 mState,
246 mCarrierIdentifier,
247 mPolicyRules,
248 mAccessRules);
Holly Jiuyu Sune6153b92017-12-07 15:35:49 -0800249 }
250
251 /** Sets the iccId of the subscription. */
252 public Builder setIccid(String value) {
253 if (!TextUtils.isDigitsOnly(value)) {
254 throw new IllegalArgumentException("iccid contains invalid characters: " + value);
255 }
Holly Jiuyu Sunaf6a5ff2017-12-12 20:17:09 -0800256 mIccid = value;
Holly Jiuyu Sune6153b92017-12-07 15:35:49 -0800257 return this;
258 }
259
260 /** Sets the nickname of the subscription. */
261 public Builder setNickname(String value) {
Holly Jiuyu Sunaf6a5ff2017-12-12 20:17:09 -0800262 mNickname = value;
Holly Jiuyu Sune6153b92017-12-07 15:35:49 -0800263 return this;
264 }
265
266 /** Sets the service provider name of the subscription. */
267 public Builder setServiceProviderName(String value) {
Holly Jiuyu Sunaf6a5ff2017-12-12 20:17:09 -0800268 mServiceProviderName = value;
Holly Jiuyu Sune6153b92017-12-07 15:35:49 -0800269 return this;
270 }
271
272 /** Sets the profile name of the subscription. */
273 public Builder setProfileName(String value) {
Holly Jiuyu Sunaf6a5ff2017-12-12 20:17:09 -0800274 mProfileName = value;
Holly Jiuyu Sune6153b92017-12-07 15:35:49 -0800275 return this;
276 }
277
278 /** Sets the profile class of the subscription. */
279 public Builder setProfileClass(@ProfileClass int value) {
Holly Jiuyu Sunaf6a5ff2017-12-12 20:17:09 -0800280 mProfileClass = value;
Holly Jiuyu Sune6153b92017-12-07 15:35:49 -0800281 return this;
282 }
283
284 /** Sets the state of the subscription. */
285 public Builder setState(@ProfileState int value) {
Holly Jiuyu Sunaf6a5ff2017-12-12 20:17:09 -0800286 mState = value;
Holly Jiuyu Sune6153b92017-12-07 15:35:49 -0800287 return this;
288 }
289
290 /** Sets the carrier identifier of the subscription. */
291 public Builder setCarrierIdentifier(CarrierIdentifier value) {
Holly Jiuyu Sunaf6a5ff2017-12-12 20:17:09 -0800292 mCarrierIdentifier = value;
Holly Jiuyu Sune6153b92017-12-07 15:35:49 -0800293 return this;
294 }
295
296 /** Sets the policy rules of the subscription. */
297 public Builder setPolicyRules(@PolicyRule int value) {
Holly Jiuyu Sunaf6a5ff2017-12-12 20:17:09 -0800298 mPolicyRules = value;
Holly Jiuyu Sune6153b92017-12-07 15:35:49 -0800299 return this;
300 }
301
302 /** Sets the access rules of the subscription. */
Holly Jiuyu Sunaf6a5ff2017-12-12 20:17:09 -0800303 public Builder setUiccAccessRule(@Nullable List<UiccAccessRule> value) {
304 mAccessRules = value;
Holly Jiuyu Sune6153b92017-12-07 15:35:49 -0800305 return this;
306 }
307 }
308
309 private EuiccProfileInfo(
310 String iccid,
311 @Nullable String nickname,
312 String serviceProviderName,
313 String profileName,
314 @ProfileClass int profileClass,
315 @ProfileState int state,
316 CarrierIdentifier carrierIdentifier,
317 @PolicyRule int policyRules,
Holly Jiuyu Sunaf6a5ff2017-12-12 20:17:09 -0800318 @Nullable List<UiccAccessRule> accessRules) {
319 this.mIccid = iccid;
320 this.mNickname = nickname;
321 this.mServiceProviderName = serviceProviderName;
322 this.mProfileName = profileName;
323 this.mProfileClass = profileClass;
324 this.mState = state;
325 this.mCarrierIdentifier = carrierIdentifier;
326 this.mPolicyRules = policyRules;
327 if (accessRules != null && accessRules.size() > 0) {
328 this.mAccessRules = accessRules.toArray(new UiccAccessRule[accessRules.size()]);
329 } else {
330 this.mAccessRules = null;
331 }
Holly Jiuyu Sune6153b92017-12-07 15:35:49 -0800332 }
333
334 /** Gets the ICCID string. */
335 public String getIccid() {
Holly Jiuyu Sunaf6a5ff2017-12-12 20:17:09 -0800336 return mIccid;
Holly Jiuyu Sune6153b92017-12-07 15:35:49 -0800337 }
338
339 /** Gets the access rules. */
340 @Nullable
Holly Jiuyu Sunaf6a5ff2017-12-12 20:17:09 -0800341 public List<UiccAccessRule> getUiccAccessRules() {
342 if (mAccessRules == null) return null;
343 return Arrays.asList(mAccessRules);
Holly Jiuyu Sune6153b92017-12-07 15:35:49 -0800344 }
345
346 /** Gets the nickname. */
Holly Jiuyu Sunaf6a5ff2017-12-12 20:17:09 -0800347 @Nullable
Holly Jiuyu Sune6153b92017-12-07 15:35:49 -0800348 public String getNickname() {
Holly Jiuyu Sunaf6a5ff2017-12-12 20:17:09 -0800349 return mNickname;
Holly Jiuyu Sune6153b92017-12-07 15:35:49 -0800350 }
351
352 /** Gets the service provider name. */
353 public String getServiceProviderName() {
Holly Jiuyu Sunaf6a5ff2017-12-12 20:17:09 -0800354 return mServiceProviderName;
Holly Jiuyu Sune6153b92017-12-07 15:35:49 -0800355 }
356
357 /** Gets the profile name. */
358 public String getProfileName() {
Holly Jiuyu Sunaf6a5ff2017-12-12 20:17:09 -0800359 return mProfileName;
Holly Jiuyu Sune6153b92017-12-07 15:35:49 -0800360 }
361
362 /** Gets the profile class. */
363 @ProfileClass
364 public int getProfileClass() {
Holly Jiuyu Sunaf6a5ff2017-12-12 20:17:09 -0800365 return mProfileClass;
Holly Jiuyu Sune6153b92017-12-07 15:35:49 -0800366 }
367
368 /** Gets the state of the subscription. */
369 @ProfileState
370 public int getState() {
Holly Jiuyu Sunaf6a5ff2017-12-12 20:17:09 -0800371 return mState;
Holly Jiuyu Sune6153b92017-12-07 15:35:49 -0800372 }
373
374 /** Gets the carrier identifier. */
375 public CarrierIdentifier getCarrierIdentifier() {
Holly Jiuyu Sunaf6a5ff2017-12-12 20:17:09 -0800376 return mCarrierIdentifier;
Holly Jiuyu Sune6153b92017-12-07 15:35:49 -0800377 }
378
379 /** Gets the policy rules. */
380 @PolicyRule
381 public int getPolicyRules() {
Holly Jiuyu Sunaf6a5ff2017-12-12 20:17:09 -0800382 return mPolicyRules;
Holly Jiuyu Sune6153b92017-12-07 15:35:49 -0800383 }
384
385 /** Returns whether any policy rule exists. */
386 public boolean hasPolicyRules() {
Holly Jiuyu Sunaf6a5ff2017-12-12 20:17:09 -0800387 return mPolicyRules != 0;
Holly Jiuyu Sune6153b92017-12-07 15:35:49 -0800388 }
389
390 /** Checks whether a certain policy rule exists. */
391 public boolean hasPolicyRule(@PolicyRule int policy) {
Holly Jiuyu Sunaf6a5ff2017-12-12 20:17:09 -0800392 return (mPolicyRules & policy) != 0;
Holly Jiuyu Sune6153b92017-12-07 15:35:49 -0800393 }
394
395 @Override
396 public boolean equals(Object obj) {
397 if (this == obj) {
398 return true;
399 }
400 if (obj == null || getClass() != obj.getClass()) {
401 return false;
402 }
403
404 EuiccProfileInfo that = (EuiccProfileInfo) obj;
Holly Jiuyu Sunaf6a5ff2017-12-12 20:17:09 -0800405 return Objects.equals(mIccid, that.mIccid)
406 && Objects.equals(mNickname, that.mNickname)
407 && Objects.equals(mServiceProviderName, that.mServiceProviderName)
408 && Objects.equals(mProfileName, that.mProfileName)
409 && mProfileClass == that.mProfileClass
410 && mState == that.mState
411 && Objects.equals(mCarrierIdentifier, that.mCarrierIdentifier)
412 && mPolicyRules == that.mPolicyRules
413 && Arrays.equals(mAccessRules, that.mAccessRules);
Holly Jiuyu Sune6153b92017-12-07 15:35:49 -0800414 }
415
416 @Override
417 public int hashCode() {
418 int result = 1;
Holly Jiuyu Sunaf6a5ff2017-12-12 20:17:09 -0800419 result = 31 * result + Objects.hashCode(mIccid);
420 result = 31 * result + Objects.hashCode(mNickname);
421 result = 31 * result + Objects.hashCode(mServiceProviderName);
422 result = 31 * result + Objects.hashCode(mProfileName);
423 result = 31 * result + mProfileClass;
424 result = 31 * result + mState;
425 result = 31 * result + Objects.hashCode(mCarrierIdentifier);
426 result = 31 * result + mPolicyRules;
427 result = 31 * result + Arrays.hashCode(mAccessRules);
Holly Jiuyu Sune6153b92017-12-07 15:35:49 -0800428 return result;
429 }
430
431 @Override
432 public String toString() {
433 return "EuiccProfileInfo (nickname="
Holly Jiuyu Sunaf6a5ff2017-12-12 20:17:09 -0800434 + mNickname
Holly Jiuyu Sune6153b92017-12-07 15:35:49 -0800435 + ", serviceProviderName="
Holly Jiuyu Sunaf6a5ff2017-12-12 20:17:09 -0800436 + mServiceProviderName
Holly Jiuyu Sune6153b92017-12-07 15:35:49 -0800437 + ", profileName="
Holly Jiuyu Sunaf6a5ff2017-12-12 20:17:09 -0800438 + mProfileName
Holly Jiuyu Sune6153b92017-12-07 15:35:49 -0800439 + ", profileClass="
Holly Jiuyu Sunaf6a5ff2017-12-12 20:17:09 -0800440 + mProfileClass
Holly Jiuyu Sune6153b92017-12-07 15:35:49 -0800441 + ", state="
Holly Jiuyu Sunaf6a5ff2017-12-12 20:17:09 -0800442 + mState
Holly Jiuyu Sune6153b92017-12-07 15:35:49 -0800443 + ", CarrierIdentifier="
Holly Jiuyu Sunaf6a5ff2017-12-12 20:17:09 -0800444 + mCarrierIdentifier.toString()
Holly Jiuyu Sune6153b92017-12-07 15:35:49 -0800445 + ", policyRules="
Holly Jiuyu Sunaf6a5ff2017-12-12 20:17:09 -0800446 + mPolicyRules
Holly Jiuyu Sune6153b92017-12-07 15:35:49 -0800447 + ", accessRules="
Holly Jiuyu Sunaf6a5ff2017-12-12 20:17:09 -0800448 + Arrays.toString(mAccessRules)
Holly Jiuyu Sune6153b92017-12-07 15:35:49 -0800449 + ")";
450 }
Jeff Davidsond02731f2017-04-09 14:31:09 -0700451}