19a1c9b67c4b2426884deb60c1ff84130ab47333cJonathan Basseri/** 29a1c9b67c4b2426884deb60c1ff84130ab47333cJonathan Basseri * Copyright (c) 2015, The Android Open Source Project 39a1c9b67c4b2426884deb60c1ff84130ab47333cJonathan Basseri * 49a1c9b67c4b2426884deb60c1ff84130ab47333cJonathan Basseri * Licensed under the Apache License, Version 2.0 (the "License"); 59a1c9b67c4b2426884deb60c1ff84130ab47333cJonathan Basseri * you may not use this file except in compliance with the License. 69a1c9b67c4b2426884deb60c1ff84130ab47333cJonathan Basseri * You may obtain a copy of the License at 79a1c9b67c4b2426884deb60c1ff84130ab47333cJonathan Basseri * 89a1c9b67c4b2426884deb60c1ff84130ab47333cJonathan Basseri * http://www.apache.org/licenses/LICENSE-2.0 99a1c9b67c4b2426884deb60c1ff84130ab47333cJonathan Basseri * 109a1c9b67c4b2426884deb60c1ff84130ab47333cJonathan Basseri * Unless required by applicable law or agreed to in writing, software 119a1c9b67c4b2426884deb60c1ff84130ab47333cJonathan Basseri * distributed under the License is distributed on an "AS IS" BASIS, 129a1c9b67c4b2426884deb60c1ff84130ab47333cJonathan Basseri * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139a1c9b67c4b2426884deb60c1ff84130ab47333cJonathan Basseri * See the License for the specific language governing permissions and 149a1c9b67c4b2426884deb60c1ff84130ab47333cJonathan Basseri * limitations under the License. 159a1c9b67c4b2426884deb60c1ff84130ab47333cJonathan Basseri */ 169a1c9b67c4b2426884deb60c1ff84130ab47333cJonathan Basseri 179a1c9b67c4b2426884deb60c1ff84130ab47333cJonathan Basseripackage android.service.carrier; 189a1c9b67c4b2426884deb60c1ff84130ab47333cJonathan Basseri 19e6153b9bff78de897cb6b52c9d605e0dc0fc929dHolly Jiuyu Sunimport android.annotation.Nullable; 209a1c9b67c4b2426884deb60c1ff84130ab47333cJonathan Basseriimport android.os.Parcel; 219a1c9b67c4b2426884deb60c1ff84130ab47333cJonathan Basseriimport android.os.Parcelable; 229a1c9b67c4b2426884deb60c1ff84130ab47333cJonathan Basseri 23e6153b9bff78de897cb6b52c9d605e0dc0fc929dHolly Jiuyu Sunimport com.android.internal.telephony.uicc.IccUtils; 24e6153b9bff78de897cb6b52c9d605e0dc0fc929dHolly Jiuyu Sun 25e6153b9bff78de897cb6b52c9d605e0dc0fc929dHolly Jiuyu Sunimport java.util.Objects; 26e6153b9bff78de897cb6b52c9d605e0dc0fc929dHolly Jiuyu Sun 279a1c9b67c4b2426884deb60c1ff84130ab47333cJonathan Basseri/** 289a1c9b67c4b2426884deb60c1ff84130ab47333cJonathan Basseri * Used to pass info to CarrierConfigService implementations so they can decide what values to 299a1c9b67c4b2426884deb60c1ff84130ab47333cJonathan Basseri * return. 309a1c9b67c4b2426884deb60c1ff84130ab47333cJonathan Basseri */ 319a1c9b67c4b2426884deb60c1ff84130ab47333cJonathan Basseripublic class CarrierIdentifier implements Parcelable { 329a1c9b67c4b2426884deb60c1ff84130ab47333cJonathan Basseri 339a1c9b67c4b2426884deb60c1ff84130ab47333cJonathan Basseri /** Used to create a {@link CarrierIdentifier} from a {@link Parcel}. */ 349a1c9b67c4b2426884deb60c1ff84130ab47333cJonathan Basseri public static final Creator<CarrierIdentifier> CREATOR = new Creator<CarrierIdentifier>() { 359a1c9b67c4b2426884deb60c1ff84130ab47333cJonathan Basseri @Override 369a1c9b67c4b2426884deb60c1ff84130ab47333cJonathan Basseri public CarrierIdentifier createFromParcel(Parcel parcel) { 379a1c9b67c4b2426884deb60c1ff84130ab47333cJonathan Basseri return new CarrierIdentifier(parcel); 389a1c9b67c4b2426884deb60c1ff84130ab47333cJonathan Basseri } 399a1c9b67c4b2426884deb60c1ff84130ab47333cJonathan Basseri 409a1c9b67c4b2426884deb60c1ff84130ab47333cJonathan Basseri @Override 419a1c9b67c4b2426884deb60c1ff84130ab47333cJonathan Basseri public CarrierIdentifier[] newArray(int i) { 429a1c9b67c4b2426884deb60c1ff84130ab47333cJonathan Basseri return new CarrierIdentifier[i]; 439a1c9b67c4b2426884deb60c1ff84130ab47333cJonathan Basseri } 449a1c9b67c4b2426884deb60c1ff84130ab47333cJonathan Basseri }; 459a1c9b67c4b2426884deb60c1ff84130ab47333cJonathan Basseri 469a1c9b67c4b2426884deb60c1ff84130ab47333cJonathan Basseri private String mMcc; 479a1c9b67c4b2426884deb60c1ff84130ab47333cJonathan Basseri private String mMnc; 48e6153b9bff78de897cb6b52c9d605e0dc0fc929dHolly Jiuyu Sun private @Nullable String mSpn; 49e6153b9bff78de897cb6b52c9d605e0dc0fc929dHolly Jiuyu Sun private @Nullable String mImsi; 50e6153b9bff78de897cb6b52c9d605e0dc0fc929dHolly Jiuyu Sun private @Nullable String mGid1; 51e6153b9bff78de897cb6b52c9d605e0dc0fc929dHolly Jiuyu Sun private @Nullable String mGid2; 529a1c9b67c4b2426884deb60c1ff84130ab47333cJonathan Basseri 53e6153b9bff78de897cb6b52c9d605e0dc0fc929dHolly Jiuyu Sun public CarrierIdentifier(String mcc, String mnc, @Nullable String spn, @Nullable String imsi, 54e6153b9bff78de897cb6b52c9d605e0dc0fc929dHolly Jiuyu Sun @Nullable String gid1, @Nullable String gid2) { 559a1c9b67c4b2426884deb60c1ff84130ab47333cJonathan Basseri mMcc = mcc; 569a1c9b67c4b2426884deb60c1ff84130ab47333cJonathan Basseri mMnc = mnc; 579a1c9b67c4b2426884deb60c1ff84130ab47333cJonathan Basseri mSpn = spn; 589a1c9b67c4b2426884deb60c1ff84130ab47333cJonathan Basseri mImsi = imsi; 599a1c9b67c4b2426884deb60c1ff84130ab47333cJonathan Basseri mGid1 = gid1; 609a1c9b67c4b2426884deb60c1ff84130ab47333cJonathan Basseri mGid2 = gid2; 619a1c9b67c4b2426884deb60c1ff84130ab47333cJonathan Basseri } 629a1c9b67c4b2426884deb60c1ff84130ab47333cJonathan Basseri 63e6153b9bff78de897cb6b52c9d605e0dc0fc929dHolly Jiuyu Sun /** 64e6153b9bff78de897cb6b52c9d605e0dc0fc929dHolly Jiuyu Sun * Creates a carrier identifier instance. 65e6153b9bff78de897cb6b52c9d605e0dc0fc929dHolly Jiuyu Sun * 66e6153b9bff78de897cb6b52c9d605e0dc0fc929dHolly Jiuyu Sun * @param mccMnc A 3-byte array as defined by 3GPP TS 24.008. 67e6153b9bff78de897cb6b52c9d605e0dc0fc929dHolly Jiuyu Sun * @param gid1 The group identifier level 1. 68e6153b9bff78de897cb6b52c9d605e0dc0fc929dHolly Jiuyu Sun * @param gid2 The group identifier level 2. 69e6153b9bff78de897cb6b52c9d605e0dc0fc929dHolly Jiuyu Sun * @throws IllegalArgumentException If the length of {@code mccMnc} is not 3. 70e6153b9bff78de897cb6b52c9d605e0dc0fc929dHolly Jiuyu Sun */ 71e6153b9bff78de897cb6b52c9d605e0dc0fc929dHolly Jiuyu Sun public CarrierIdentifier(byte[] mccMnc, @Nullable String gid1, @Nullable String gid2) { 72e6153b9bff78de897cb6b52c9d605e0dc0fc929dHolly Jiuyu Sun if (mccMnc.length != 3) { 73e6153b9bff78de897cb6b52c9d605e0dc0fc929dHolly Jiuyu Sun throw new IllegalArgumentException( 74e6153b9bff78de897cb6b52c9d605e0dc0fc929dHolly Jiuyu Sun "MCC & MNC must be set by a 3-byte array: byte[" + mccMnc.length + "]"); 75e6153b9bff78de897cb6b52c9d605e0dc0fc929dHolly Jiuyu Sun } 76e6153b9bff78de897cb6b52c9d605e0dc0fc929dHolly Jiuyu Sun String hex = IccUtils.bytesToHexString(mccMnc); 77e6153b9bff78de897cb6b52c9d605e0dc0fc929dHolly Jiuyu Sun mMcc = new String(new char[] {hex.charAt(1), hex.charAt(0), hex.charAt(3)}); 78e6153b9bff78de897cb6b52c9d605e0dc0fc929dHolly Jiuyu Sun if (hex.charAt(2) == 'F') { 79e6153b9bff78de897cb6b52c9d605e0dc0fc929dHolly Jiuyu Sun mMnc = new String(new char[] {hex.charAt(5), hex.charAt(4)}); 80e6153b9bff78de897cb6b52c9d605e0dc0fc929dHolly Jiuyu Sun } else { 81e6153b9bff78de897cb6b52c9d605e0dc0fc929dHolly Jiuyu Sun mMnc = new String(new char[] {hex.charAt(5), hex.charAt(4), hex.charAt(2)}); 82e6153b9bff78de897cb6b52c9d605e0dc0fc929dHolly Jiuyu Sun } 83e6153b9bff78de897cb6b52c9d605e0dc0fc929dHolly Jiuyu Sun mGid1 = gid1; 84e6153b9bff78de897cb6b52c9d605e0dc0fc929dHolly Jiuyu Sun mGid2 = gid2; 85e6153b9bff78de897cb6b52c9d605e0dc0fc929dHolly Jiuyu Sun mSpn = null; 86e6153b9bff78de897cb6b52c9d605e0dc0fc929dHolly Jiuyu Sun mImsi = null; 87e6153b9bff78de897cb6b52c9d605e0dc0fc929dHolly Jiuyu Sun } 88e6153b9bff78de897cb6b52c9d605e0dc0fc929dHolly Jiuyu Sun 899a1c9b67c4b2426884deb60c1ff84130ab47333cJonathan Basseri /** @hide */ 909a1c9b67c4b2426884deb60c1ff84130ab47333cJonathan Basseri public CarrierIdentifier(Parcel parcel) { 919a1c9b67c4b2426884deb60c1ff84130ab47333cJonathan Basseri readFromParcel(parcel); 929a1c9b67c4b2426884deb60c1ff84130ab47333cJonathan Basseri } 939a1c9b67c4b2426884deb60c1ff84130ab47333cJonathan Basseri 949a1c9b67c4b2426884deb60c1ff84130ab47333cJonathan Basseri /** Get the mobile country code. */ 959a1c9b67c4b2426884deb60c1ff84130ab47333cJonathan Basseri public String getMcc() { 969a1c9b67c4b2426884deb60c1ff84130ab47333cJonathan Basseri return mMcc; 979a1c9b67c4b2426884deb60c1ff84130ab47333cJonathan Basseri } 989a1c9b67c4b2426884deb60c1ff84130ab47333cJonathan Basseri 999a1c9b67c4b2426884deb60c1ff84130ab47333cJonathan Basseri /** Get the mobile network code. */ 1009a1c9b67c4b2426884deb60c1ff84130ab47333cJonathan Basseri public String getMnc() { 1019a1c9b67c4b2426884deb60c1ff84130ab47333cJonathan Basseri return mMnc; 1029a1c9b67c4b2426884deb60c1ff84130ab47333cJonathan Basseri } 1039a1c9b67c4b2426884deb60c1ff84130ab47333cJonathan Basseri 1049a1c9b67c4b2426884deb60c1ff84130ab47333cJonathan Basseri /** Get the service provider name. */ 105e6153b9bff78de897cb6b52c9d605e0dc0fc929dHolly Jiuyu Sun @Nullable 1069a1c9b67c4b2426884deb60c1ff84130ab47333cJonathan Basseri public String getSpn() { 1079a1c9b67c4b2426884deb60c1ff84130ab47333cJonathan Basseri return mSpn; 1089a1c9b67c4b2426884deb60c1ff84130ab47333cJonathan Basseri } 1099a1c9b67c4b2426884deb60c1ff84130ab47333cJonathan Basseri 1109a1c9b67c4b2426884deb60c1ff84130ab47333cJonathan Basseri /** Get the international mobile subscriber identity. */ 111e6153b9bff78de897cb6b52c9d605e0dc0fc929dHolly Jiuyu Sun @Nullable 1129a1c9b67c4b2426884deb60c1ff84130ab47333cJonathan Basseri public String getImsi() { 1139a1c9b67c4b2426884deb60c1ff84130ab47333cJonathan Basseri return mImsi; 1149a1c9b67c4b2426884deb60c1ff84130ab47333cJonathan Basseri } 1159a1c9b67c4b2426884deb60c1ff84130ab47333cJonathan Basseri 1169a1c9b67c4b2426884deb60c1ff84130ab47333cJonathan Basseri /** Get the group identifier level 1. */ 117e6153b9bff78de897cb6b52c9d605e0dc0fc929dHolly Jiuyu Sun @Nullable 1189a1c9b67c4b2426884deb60c1ff84130ab47333cJonathan Basseri public String getGid1() { 1199a1c9b67c4b2426884deb60c1ff84130ab47333cJonathan Basseri return mGid1; 1209a1c9b67c4b2426884deb60c1ff84130ab47333cJonathan Basseri } 1219a1c9b67c4b2426884deb60c1ff84130ab47333cJonathan Basseri 1229a1c9b67c4b2426884deb60c1ff84130ab47333cJonathan Basseri /** Get the group identifier level 2. */ 123e6153b9bff78de897cb6b52c9d605e0dc0fc929dHolly Jiuyu Sun @Nullable 1249a1c9b67c4b2426884deb60c1ff84130ab47333cJonathan Basseri public String getGid2() { 1259a1c9b67c4b2426884deb60c1ff84130ab47333cJonathan Basseri return mGid2; 1269a1c9b67c4b2426884deb60c1ff84130ab47333cJonathan Basseri } 1279a1c9b67c4b2426884deb60c1ff84130ab47333cJonathan Basseri 1289a1c9b67c4b2426884deb60c1ff84130ab47333cJonathan Basseri @Override 129e6153b9bff78de897cb6b52c9d605e0dc0fc929dHolly Jiuyu Sun public boolean equals(Object obj) { 130e6153b9bff78de897cb6b52c9d605e0dc0fc929dHolly Jiuyu Sun if (this == obj) { 131e6153b9bff78de897cb6b52c9d605e0dc0fc929dHolly Jiuyu Sun return true; 132e6153b9bff78de897cb6b52c9d605e0dc0fc929dHolly Jiuyu Sun } 133e6153b9bff78de897cb6b52c9d605e0dc0fc929dHolly Jiuyu Sun if (obj == null || getClass() != obj.getClass()) { 134e6153b9bff78de897cb6b52c9d605e0dc0fc929dHolly Jiuyu Sun return false; 135e6153b9bff78de897cb6b52c9d605e0dc0fc929dHolly Jiuyu Sun } 136e6153b9bff78de897cb6b52c9d605e0dc0fc929dHolly Jiuyu Sun 137e6153b9bff78de897cb6b52c9d605e0dc0fc929dHolly Jiuyu Sun CarrierIdentifier that = (CarrierIdentifier) obj; 138e6153b9bff78de897cb6b52c9d605e0dc0fc929dHolly Jiuyu Sun return Objects.equals(mMcc, that.mMcc) 139e6153b9bff78de897cb6b52c9d605e0dc0fc929dHolly Jiuyu Sun && Objects.equals(mMnc, that.mMnc) 140e6153b9bff78de897cb6b52c9d605e0dc0fc929dHolly Jiuyu Sun && Objects.equals(mSpn, that.mSpn) 141e6153b9bff78de897cb6b52c9d605e0dc0fc929dHolly Jiuyu Sun && Objects.equals(mImsi, that.mImsi) 142e6153b9bff78de897cb6b52c9d605e0dc0fc929dHolly Jiuyu Sun && Objects.equals(mGid1, that.mGid1) 143e6153b9bff78de897cb6b52c9d605e0dc0fc929dHolly Jiuyu Sun && Objects.equals(mGid2, that.mGid2); 144e6153b9bff78de897cb6b52c9d605e0dc0fc929dHolly Jiuyu Sun } 145e6153b9bff78de897cb6b52c9d605e0dc0fc929dHolly Jiuyu Sun 146e6153b9bff78de897cb6b52c9d605e0dc0fc929dHolly Jiuyu Sun @Override 147e6153b9bff78de897cb6b52c9d605e0dc0fc929dHolly Jiuyu Sun public int hashCode() { 148e6153b9bff78de897cb6b52c9d605e0dc0fc929dHolly Jiuyu Sun int result = 1; 149e6153b9bff78de897cb6b52c9d605e0dc0fc929dHolly Jiuyu Sun result = 31 * result + Objects.hashCode(mMcc); 150e6153b9bff78de897cb6b52c9d605e0dc0fc929dHolly Jiuyu Sun result = 31 * result + Objects.hashCode(mMnc); 151e6153b9bff78de897cb6b52c9d605e0dc0fc929dHolly Jiuyu Sun result = 31 * result + Objects.hashCode(mSpn); 152e6153b9bff78de897cb6b52c9d605e0dc0fc929dHolly Jiuyu Sun result = 31 * result + Objects.hashCode(mImsi); 153e6153b9bff78de897cb6b52c9d605e0dc0fc929dHolly Jiuyu Sun result = 31 * result + Objects.hashCode(mGid1); 154e6153b9bff78de897cb6b52c9d605e0dc0fc929dHolly Jiuyu Sun result = 31 * result + Objects.hashCode(mGid2); 155e6153b9bff78de897cb6b52c9d605e0dc0fc929dHolly Jiuyu Sun return result; 156e6153b9bff78de897cb6b52c9d605e0dc0fc929dHolly Jiuyu Sun } 157e6153b9bff78de897cb6b52c9d605e0dc0fc929dHolly Jiuyu Sun 158e6153b9bff78de897cb6b52c9d605e0dc0fc929dHolly Jiuyu Sun @Override 1599a1c9b67c4b2426884deb60c1ff84130ab47333cJonathan Basseri public int describeContents() { 1609a1c9b67c4b2426884deb60c1ff84130ab47333cJonathan Basseri return 0; 1619a1c9b67c4b2426884deb60c1ff84130ab47333cJonathan Basseri } 1629a1c9b67c4b2426884deb60c1ff84130ab47333cJonathan Basseri 1639a1c9b67c4b2426884deb60c1ff84130ab47333cJonathan Basseri @Override 1649a1c9b67c4b2426884deb60c1ff84130ab47333cJonathan Basseri public void writeToParcel(Parcel out, int flags) { 1659a1c9b67c4b2426884deb60c1ff84130ab47333cJonathan Basseri out.writeString(mMcc); 1669a1c9b67c4b2426884deb60c1ff84130ab47333cJonathan Basseri out.writeString(mMnc); 1679a1c9b67c4b2426884deb60c1ff84130ab47333cJonathan Basseri out.writeString(mSpn); 1689a1c9b67c4b2426884deb60c1ff84130ab47333cJonathan Basseri out.writeString(mImsi); 1699a1c9b67c4b2426884deb60c1ff84130ab47333cJonathan Basseri out.writeString(mGid1); 1709a1c9b67c4b2426884deb60c1ff84130ab47333cJonathan Basseri out.writeString(mGid2); 1719a1c9b67c4b2426884deb60c1ff84130ab47333cJonathan Basseri } 1729a1c9b67c4b2426884deb60c1ff84130ab47333cJonathan Basseri 173b1a43484d5df60756332df705abe4724a56000e4Jonathan Basseri @Override 174b1a43484d5df60756332df705abe4724a56000e4Jonathan Basseri public String toString() { 175b1a43484d5df60756332df705abe4724a56000e4Jonathan Basseri return "CarrierIdentifier{" 176b1a43484d5df60756332df705abe4724a56000e4Jonathan Basseri + "mcc=" + mMcc 177b1a43484d5df60756332df705abe4724a56000e4Jonathan Basseri + ",mnc=" + mMnc 178b1a43484d5df60756332df705abe4724a56000e4Jonathan Basseri + ",spn=" + mSpn 179b1a43484d5df60756332df705abe4724a56000e4Jonathan Basseri + ",imsi=" + mImsi 180b1a43484d5df60756332df705abe4724a56000e4Jonathan Basseri + ",gid1=" + mGid1 181b1a43484d5df60756332df705abe4724a56000e4Jonathan Basseri + ",gid2=" + mGid2 182b1a43484d5df60756332df705abe4724a56000e4Jonathan Basseri + "}"; 183b1a43484d5df60756332df705abe4724a56000e4Jonathan Basseri } 184b1a43484d5df60756332df705abe4724a56000e4Jonathan Basseri 1859a1c9b67c4b2426884deb60c1ff84130ab47333cJonathan Basseri /** @hide */ 1869a1c9b67c4b2426884deb60c1ff84130ab47333cJonathan Basseri public void readFromParcel(Parcel in) { 1879a1c9b67c4b2426884deb60c1ff84130ab47333cJonathan Basseri mMcc = in.readString(); 1889a1c9b67c4b2426884deb60c1ff84130ab47333cJonathan Basseri mMnc = in.readString(); 1899a1c9b67c4b2426884deb60c1ff84130ab47333cJonathan Basseri mSpn = in.readString(); 1909a1c9b67c4b2426884deb60c1ff84130ab47333cJonathan Basseri mImsi = in.readString(); 1919a1c9b67c4b2426884deb60c1ff84130ab47333cJonathan Basseri mGid1 = in.readString(); 1929a1c9b67c4b2426884deb60c1ff84130ab47333cJonathan Basseri mGid2 = in.readString(); 1939a1c9b67c4b2426884deb60c1ff84130ab47333cJonathan Basseri } 19464997623bfa04e80064b6056fab0fb23144acb44Meng Wang 19564997623bfa04e80064b6056fab0fb23144acb44Meng Wang /** @hide */ 19664997623bfa04e80064b6056fab0fb23144acb44Meng Wang public interface MatchType { 19764997623bfa04e80064b6056fab0fb23144acb44Meng Wang int ALL = 0; 19864997623bfa04e80064b6056fab0fb23144acb44Meng Wang int SPN = 1; 19964997623bfa04e80064b6056fab0fb23144acb44Meng Wang int IMSI_PREFIX = 2; 20064997623bfa04e80064b6056fab0fb23144acb44Meng Wang int GID1 = 3; 20164997623bfa04e80064b6056fab0fb23144acb44Meng Wang int GID2 = 4; 20264997623bfa04e80064b6056fab0fb23144acb44Meng Wang } 2039a1c9b67c4b2426884deb60c1ff84130ab47333cJonathan Basseri} 204