blob: 40cb27e9515125aef346f7c51adb87ec28edbe25 [file] [log] [blame]
Wink Savillee3a9cbc2013-04-17 16:40:17 -07001/*
2 * Copyright (C) 2013 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
17package android.telephony;
18
Meng Wangd75f97d2019-12-06 18:27:38 -080019import android.annotation.NonNull;
Nathan Harold13d6b112018-12-18 13:40:08 -080020import android.annotation.Nullable;
Artur Satayev74cb7192019-12-10 17:47:56 +000021import android.compat.annotation.UnsupportedAppUsage;
Wink Savillee3a9cbc2013-04-17 16:40:17 -070022import android.os.Parcel;
Nathan Harold7590fee2018-07-19 10:18:23 -070023import android.telephony.gsm.GsmCellLocation;
Cassie933b78d2017-09-20 14:02:13 -070024import android.text.TextUtils;
Nathan Harold5522de1a2020-02-13 19:50:51 -080025import android.util.ArraySet;
Wink Savillee3a9cbc2013-04-17 16:40:17 -070026
Nathan Harold5522de1a2020-02-13 19:50:51 -080027import java.util.Collection;
Nathan Haroldac37b632020-01-20 19:04:40 -080028import java.util.Collections;
Brian Williammee7d1d2e32014-08-29 17:31:22 -070029import java.util.Objects;
Nathan Harold5522de1a2020-02-13 19:50:51 -080030import java.util.Set;
Brian Williammee7d1d2e32014-08-29 17:31:22 -070031
Wink Savillee3a9cbc2013-04-17 16:40:17 -070032/**
33 * CellIdentity to represent a unique UMTS cell
34 */
Jack Yu6cd44732017-12-28 14:41:12 -080035public final class CellIdentityWcdma extends CellIdentity {
36 private static final String TAG = CellIdentityWcdma.class.getSimpleName();
Wink Savillee3a9cbc2013-04-17 16:40:17 -070037 private static final boolean DBG = false;
38
Nathan Harold251d0a92019-04-10 17:39:27 -070039 private static final int MAX_LAC = 65535;
40 private static final int MAX_CID = 268435455;
41 private static final int MAX_PSC = 511;
42 private static final int MAX_UARFCN = 16383; // a 14 bit number; TS 25.331 ex sec 10.3.8.15
43
Wink Savillee3a9cbc2013-04-17 16:40:17 -070044 // 16-bit Location Area Code, 0..65535
45 private final int mLac;
46 // 28-bit UMTS Cell Identity described in TS 25.331, 0..268435455
47 private final int mCid;
48 // 9-bit UMTS Primary Scrambling Code described in TS 25.331, 0..511
49 private final int mPsc;
Nathan Harold054b79d2018-03-28 08:39:43 -070050 // 16-bit UMTS Absolute RF Channel Number described in TS 25.101 sec. 5.4.4
Mathew Inwooda8382062018-08-16 17:01:12 +010051 @UnsupportedAppUsage
Sanket Padawe0c86efd2016-01-26 18:42:47 -080052 private final int mUarfcn;
Wink Savillee3a9cbc2013-04-17 16:40:17 -070053
Nathan Haroldac37b632020-01-20 19:04:40 -080054 // a list of additional PLMN-IDs reported for this cell
Nathan Harold5522de1a2020-02-13 19:50:51 -080055 private final ArraySet<String> mAdditionalPlmns;
Nathan Haroldac37b632020-01-20 19:04:40 -080056
57 @Nullable
58 private final ClosedSubscriberGroupInfo mCsgInfo;
59
Wink Savillee3a9cbc2013-04-17 16:40:17 -070060 /**
61 * @hide
62 */
63 public CellIdentityWcdma() {
Nathan Harold65c4b152018-07-30 16:10:50 -070064 super(TAG, CellInfo.TYPE_WCDMA, null, null, null, null);
Nathan Harolda629ea32018-10-24 11:35:53 -070065 mLac = CellInfo.UNAVAILABLE;
66 mCid = CellInfo.UNAVAILABLE;
67 mPsc = CellInfo.UNAVAILABLE;
68 mUarfcn = CellInfo.UNAVAILABLE;
Nathan Harold5522de1a2020-02-13 19:50:51 -080069 mAdditionalPlmns = new ArraySet<>();
Nathan Haroldac37b632020-01-20 19:04:40 -080070 mCsgInfo = null;
Mingming Caic78abaa2020-03-13 11:17:46 -070071 mGlobalCellId = null;
Wink Savillee3a9cbc2013-04-17 16:40:17 -070072 }
Cassie933b78d2017-09-20 14:02:13 -070073
74 /**
75 * public constructor
76 * @param lac 16-bit Location Area Code, 0..65535
77 * @param cid 28-bit UMTS Cell Identity
78 * @param psc 9-bit UMTS Primary Scrambling Code
Nathan Harold054b79d2018-03-28 08:39:43 -070079 * @param uarfcn 16-bit UMTS Absolute RF Channel Number described in TS 25.101 sec. 5.4.3
Cassie933b78d2017-09-20 14:02:13 -070080 * @param mccStr 3-digit Mobile Country Code in string format
81 * @param mncStr 2 or 3-digit Mobile Network Code in string format
82 * @param alphal long alpha Operator Name String or Enhanced Operator Name String
83 * @param alphas short alpha Operator Name String or Enhanced Operator Name String
Nathan Haroldac37b632020-01-20 19:04:40 -080084 * @param additionalPlmns a list of additional PLMN IDs broadcast by the cell
85 * @param csgInfo info about the closed subscriber group broadcast by the cell
Cassie933b78d2017-09-20 14:02:13 -070086 *
Cassie933b78d2017-09-20 14:02:13 -070087 * @hide
88 */
Rambo Wang33f62a02020-01-29 14:37:05 -080089 public CellIdentityWcdma(int lac, int cid, int psc, int uarfcn, @Nullable String mccStr,
90 @Nullable String mncStr, @Nullable String alphal, @Nullable String alphas,
Nathan Harold5522de1a2020-02-13 19:50:51 -080091 @NonNull Collection<String> additionalPlmns,
92 @Nullable ClosedSubscriberGroupInfo csgInfo) {
Nathan Harold65c4b152018-07-30 16:10:50 -070093 super(TAG, CellInfo.TYPE_WCDMA, mccStr, mncStr, alphal, alphas);
Nathan Harold251d0a92019-04-10 17:39:27 -070094 mLac = inRangeOrUnavailable(lac, 0, MAX_LAC);
95 mCid = inRangeOrUnavailable(cid, 0, MAX_CID);
96 mPsc = inRangeOrUnavailable(psc, 0, MAX_PSC);
97 mUarfcn = inRangeOrUnavailable(uarfcn, 0, MAX_UARFCN);
Nathan Harold5522de1a2020-02-13 19:50:51 -080098 mAdditionalPlmns = new ArraySet<>(additionalPlmns.size());
Rambo Wang33f62a02020-01-29 14:37:05 -080099 for (String plmn : additionalPlmns) {
100 if (isValidPlmn(plmn)) {
101 mAdditionalPlmns.add(plmn);
102 }
103 }
Nathan Haroldac37b632020-01-20 19:04:40 -0800104 mCsgInfo = csgInfo;
Mingming Caic78abaa2020-03-13 11:17:46 -0700105 updateGlobalCellId();
Wink Savillee3a9cbc2013-04-17 16:40:17 -0700106 }
Cassie Han2200da12017-11-15 17:27:31 +0000107
Nathan Harold7ce5baf2018-12-10 13:39:40 -0800108 /** @hide */
Rambo Wang33f62a02020-01-29 14:37:05 -0800109 public CellIdentityWcdma(@NonNull android.hardware.radio.V1_0.CellIdentityWcdma cid) {
Nathan Haroldac37b632020-01-20 19:04:40 -0800110 this(cid.lac, cid.cid, cid.psc, cid.uarfcn, cid.mcc, cid.mnc, "", "",
Nathan Harold5522de1a2020-02-13 19:50:51 -0800111 new ArraySet<>(), null);
Nathan Harold7ce5baf2018-12-10 13:39:40 -0800112 }
113
114 /** @hide */
Rambo Wang33f62a02020-01-29 14:37:05 -0800115 public CellIdentityWcdma(@NonNull android.hardware.radio.V1_2.CellIdentityWcdma cid) {
Nathan Harold7ce5baf2018-12-10 13:39:40 -0800116 this(cid.base.lac, cid.base.cid, cid.base.psc, cid.base.uarfcn,
117 cid.base.mcc, cid.base.mnc, cid.operatorNames.alphaLong,
Nathan Harold5522de1a2020-02-13 19:50:51 -0800118 cid.operatorNames.alphaShort, new ArraySet<>(), null);
Nathan Haroldac37b632020-01-20 19:04:40 -0800119 }
120
121 /** @hide */
Rambo Wang33f62a02020-01-29 14:37:05 -0800122 public CellIdentityWcdma(@NonNull android.hardware.radio.V1_5.CellIdentityWcdma cid) {
Nathan Haroldac37b632020-01-20 19:04:40 -0800123 this(cid.base.base.lac, cid.base.base.cid, cid.base.base.psc, cid.base.base.uarfcn,
124 cid.base.base.mcc, cid.base.base.mnc, cid.base.operatorNames.alphaLong,
Nathan Haroldb3cefba2020-03-26 13:08:32 -0700125 cid.base.operatorNames.alphaShort, cid.additionalPlmns,
126 cid.optionalCsgInfo.getDiscriminator()
127 == android.hardware.radio.V1_5.OptionalCsgInfo.hidl_discriminator.csgInfo
128 ? new ClosedSubscriberGroupInfo(cid.optionalCsgInfo.csgInfo())
129 : null);
Nathan Harold7ce5baf2018-12-10 13:39:40 -0800130 }
131
Rambo Wang33f62a02020-01-29 14:37:05 -0800132 private CellIdentityWcdma(@NonNull CellIdentityWcdma cid) {
Cassie933b78d2017-09-20 14:02:13 -0700133 this(cid.mLac, cid.mCid, cid.mPsc, cid.mUarfcn, cid.mMccStr,
Nathan Haroldac37b632020-01-20 19:04:40 -0800134 cid.mMncStr, cid.mAlphaLong, cid.mAlphaShort, cid.mAdditionalPlmns, cid.mCsgInfo);
Wink Savillee3a9cbc2013-04-17 16:40:17 -0700135 }
136
Hall Liuc9d74302019-02-28 15:29:19 -0800137 /** @hide */
Nathan Harold5e6e9832019-12-17 13:06:54 -0800138 @Override
139 public @NonNull CellIdentityWcdma sanitizeLocationInfo() {
Hall Liuc9d74302019-02-28 15:29:19 -0800140 return new CellIdentityWcdma(CellInfo.UNAVAILABLE, CellInfo.UNAVAILABLE,
141 CellInfo.UNAVAILABLE, CellInfo.UNAVAILABLE, mMccStr, mMncStr,
Nathan Haroldac37b632020-01-20 19:04:40 -0800142 mAlphaLong, mAlphaShort, mAdditionalPlmns, null);
Hall Liuc9d74302019-02-28 15:29:19 -0800143 }
144
Rambo Wang33f62a02020-01-29 14:37:05 -0800145 @NonNull CellIdentityWcdma copy() {
Cassie933b78d2017-09-20 14:02:13 -0700146 return new CellIdentityWcdma(this);
Wink Savillee3a9cbc2013-04-17 16:40:17 -0700147 }
148
Mingming Caic78abaa2020-03-13 11:17:46 -0700149 /** @hide */
150 @Override
151 protected void updateGlobalCellId() {
152 mGlobalCellId = null;
153 String plmn = getPlmn();
154 if (plmn == null) return;
155
156 if (mLac == CellInfo.UNAVAILABLE || mCid == CellInfo.UNAVAILABLE) return;
157
158 mGlobalCellId = plmn + String.format("%04x%04x", mLac, mCid);
159 }
160
Wink Savillee3a9cbc2013-04-17 16:40:17 -0700161 /**
Nathan Harolda629ea32018-10-24 11:35:53 -0700162 * @return 3-digit Mobile Country Code, 0..999,
163 * {@link android.telephony.CellInfo#UNAVAILABLE UNAVAILABLE} if unavailable.
Cassied062c3222018-02-28 11:45:29 -0800164 * @deprecated Use {@link #getMccString} instead.
Wink Savillee3a9cbc2013-04-17 16:40:17 -0700165 */
Cassie933b78d2017-09-20 14:02:13 -0700166 @Deprecated
Wink Savillee3a9cbc2013-04-17 16:40:17 -0700167 public int getMcc() {
Nathan Harolda629ea32018-10-24 11:35:53 -0700168 return (mMccStr != null) ? Integer.valueOf(mMccStr) : CellInfo.UNAVAILABLE;
Wink Savillee3a9cbc2013-04-17 16:40:17 -0700169 }
170
171 /**
Nathan Harolda629ea32018-10-24 11:35:53 -0700172 * @return 2 or 3-digit Mobile Network Code, 0..999,
173 * {@link android.telephony.CellInfo#UNAVAILABLE UNAVAILABLE} if unavailable.
Cassied062c3222018-02-28 11:45:29 -0800174 * @deprecated Use {@link #getMncString} instead.
Wink Savillee3a9cbc2013-04-17 16:40:17 -0700175 */
Cassie933b78d2017-09-20 14:02:13 -0700176 @Deprecated
Wink Savillee3a9cbc2013-04-17 16:40:17 -0700177 public int getMnc() {
Nathan Harolda629ea32018-10-24 11:35:53 -0700178 return (mMncStr != null) ? Integer.valueOf(mMncStr) : CellInfo.UNAVAILABLE;
Wink Savillee3a9cbc2013-04-17 16:40:17 -0700179 }
180
181 /**
Nathan Harolda629ea32018-10-24 11:35:53 -0700182 * @return 16-bit Location Area Code, 0..65535,
183 * {@link android.telephony.CellInfo#UNAVAILABLE UNAVAILABLE} if unavailable.
Wink Savillee3a9cbc2013-04-17 16:40:17 -0700184 */
185 public int getLac() {
186 return mLac;
187 }
188
189 /**
190 * @return CID
Nathan Harolda629ea32018-10-24 11:35:53 -0700191 * 28-bit UMTS Cell Identity described in TS 25.331, 0..268435455,
192 * {@link android.telephony.CellInfo#UNAVAILABLE UNAVAILABLE} if unavailable.
Wink Savillee3a9cbc2013-04-17 16:40:17 -0700193 */
194 public int getCid() {
195 return mCid;
196 }
197
198 /**
Nathan Harolda629ea32018-10-24 11:35:53 -0700199 * @return 9-bit UMTS Primary Scrambling Code described in TS 25.331, 0..511,
200 * {@link android.telephony.CellInfo#UNAVAILABLE UNAVAILABLE} if unavailable.
Wink Savillee3a9cbc2013-04-17 16:40:17 -0700201 */
202 public int getPsc() {
203 return mPsc;
204 }
205
Cassie933b78d2017-09-20 14:02:13 -0700206 /**
Nathan Harolda629ea32018-10-24 11:35:53 -0700207 * @return Mobile Country Code in string version, null if unavailable.
Cassie933b78d2017-09-20 14:02:13 -0700208 */
Nathan Harold78cf8ac2019-04-08 19:21:02 -0700209 @Nullable
Cassied062c3222018-02-28 11:45:29 -0800210 public String getMccString() {
Cassie933b78d2017-09-20 14:02:13 -0700211 return mMccStr;
212 }
213
214 /**
Nathan Harolda629ea32018-10-24 11:35:53 -0700215 * @return Mobile Network Code in string version, null if unavailable.
Cassie933b78d2017-09-20 14:02:13 -0700216 */
Nathan Harold78cf8ac2019-04-08 19:21:02 -0700217 @Nullable
Cassied062c3222018-02-28 11:45:29 -0800218 public String getMncString() {
Cassie933b78d2017-09-20 14:02:13 -0700219 return mMncStr;
220 }
221
222 /**
223 * @return a 5 or 6 character string (MCC+MNC), null if any field is unknown
224 */
Nathan Harold13d6b112018-12-18 13:40:08 -0800225 @Nullable
Cassie933b78d2017-09-20 14:02:13 -0700226 public String getMobileNetworkOperator() {
Cassieb799fcd2017-11-30 15:54:51 -0800227 return (mMccStr == null || mMncStr == null) ? null : mMccStr + mMncStr;
Cassie933b78d2017-09-20 14:02:13 -0700228 }
229
Wink Savillee3a9cbc2013-04-17 16:40:17 -0700230 @Override
231 public int hashCode() {
Nathan Haroldac37b632020-01-20 19:04:40 -0800232 return Objects.hash(mLac, mCid, mPsc, mAdditionalPlmns.hashCode(), super.hashCode());
Wink Savillee3a9cbc2013-04-17 16:40:17 -0700233 }
234
Sanket Padawe0c86efd2016-01-26 18:42:47 -0800235 /**
Nathan Harolda629ea32018-10-24 11:35:53 -0700236 * @return 16-bit UMTS Absolute RF Channel Number,
237 * {@link android.telephony.CellInfo#UNAVAILABLE UNAVAILABLE} if unavailable.
Sanket Padawe0c86efd2016-01-26 18:42:47 -0800238 */
239 public int getUarfcn() {
240 return mUarfcn;
241 }
242
Eric Schwarzenbach2c1a1772018-03-02 17:47:13 -0800243 /** @hide */
244 @Override
245 public int getChannelNumber() {
246 return mUarfcn;
247 }
248
Nathan Haroldac37b632020-01-20 19:04:40 -0800249 /**
250 * @return a list of additional PLMN IDs supported by this cell.
251 */
252 @NonNull
Nathan Harold5522de1a2020-02-13 19:50:51 -0800253 public Set<String> getAdditionalPlmns() {
254 return Collections.unmodifiableSet(mAdditionalPlmns);
Nathan Haroldac37b632020-01-20 19:04:40 -0800255 }
256
257 /**
258 * @return closed subscriber group information about the cell if available, otherwise null.
259 */
260 @Nullable
261 public ClosedSubscriberGroupInfo getClosedSubscriberGroupInfo() {
262 return mCsgInfo;
263 }
264
Nathan Harold7590fee2018-07-19 10:18:23 -0700265 /** @hide */
Meng Wangd75f97d2019-12-06 18:27:38 -0800266 @NonNull
Nathan Harold7590fee2018-07-19 10:18:23 -0700267 @Override
268 public GsmCellLocation asCellLocation() {
269 GsmCellLocation cl = new GsmCellLocation();
Nathan Harolda629ea32018-10-24 11:35:53 -0700270 int lac = mLac != CellInfo.UNAVAILABLE ? mLac : -1;
271 int cid = mCid != CellInfo.UNAVAILABLE ? mCid : -1;
272 int psc = mPsc != CellInfo.UNAVAILABLE ? mPsc : -1;
Nathan Harold7590fee2018-07-19 10:18:23 -0700273 cl.setLacAndCid(lac, cid);
274 cl.setPsc(psc);
275
276 return cl;
277 }
278
Wink Savillee3a9cbc2013-04-17 16:40:17 -0700279 @Override
280 public boolean equals(Object other) {
Brian Williammee7d1d2e32014-08-29 17:31:22 -0700281 if (this == other) {
282 return true;
283 }
284
285 if (!(other instanceof CellIdentityWcdma)) {
Wink Savillee3a9cbc2013-04-17 16:40:17 -0700286 return false;
287 }
Brian Williammee7d1d2e32014-08-29 17:31:22 -0700288
289 CellIdentityWcdma o = (CellIdentityWcdma) other;
Jack Yu6cd44732017-12-28 14:41:12 -0800290 return mLac == o.mLac
291 && mCid == o.mCid
292 && mPsc == o.mPsc
293 && mUarfcn == o.mUarfcn
294 && TextUtils.equals(mMccStr, o.mMccStr)
295 && TextUtils.equals(mMncStr, o.mMncStr)
Nathan Haroldac37b632020-01-20 19:04:40 -0800296 && mAdditionalPlmns.equals(o.mAdditionalPlmns)
297 && Objects.equals(mCsgInfo, o.mCsgInfo)
Cassie21ed3c52018-03-21 16:20:34 -0700298 && super.equals(other);
Wink Savillee3a9cbc2013-04-17 16:40:17 -0700299 }
300
301 @Override
302 public String toString() {
Jack Yu6cd44732017-12-28 14:41:12 -0800303 return new StringBuilder(TAG)
304 .append(":{ mLac=").append(mLac)
305 .append(" mCid=").append(mCid)
306 .append(" mPsc=").append(mPsc)
307 .append(" mUarfcn=").append(mUarfcn)
308 .append(" mMcc=").append(mMccStr)
309 .append(" mMnc=").append(mMncStr)
310 .append(" mAlphaLong=").append(mAlphaLong)
311 .append(" mAlphaShort=").append(mAlphaShort)
Nathan Haroldac37b632020-01-20 19:04:40 -0800312 .append(" mAdditionalPlmns=").append(mAdditionalPlmns)
313 .append(" mCsgInfo=").append(mCsgInfo)
Jack Yu6cd44732017-12-28 14:41:12 -0800314 .append("}").toString();
Wink Savillee3a9cbc2013-04-17 16:40:17 -0700315 }
316
317 /** Implement the Parcelable interface */
318 @Override
319 public void writeToParcel(Parcel dest, int flags) {
320 if (DBG) log("writeToParcel(Parcel, int): " + toString());
Nathan Harold65c4b152018-07-30 16:10:50 -0700321 super.writeToParcel(dest, CellInfo.TYPE_WCDMA);
Wink Savillee3a9cbc2013-04-17 16:40:17 -0700322 dest.writeInt(mLac);
323 dest.writeInt(mCid);
324 dest.writeInt(mPsc);
Sanket Padawe0c86efd2016-01-26 18:42:47 -0800325 dest.writeInt(mUarfcn);
Nathan Harold5522de1a2020-02-13 19:50:51 -0800326 dest.writeArraySet(mAdditionalPlmns);
Nathan Haroldac37b632020-01-20 19:04:40 -0800327 dest.writeParcelable(mCsgInfo, flags);
Wink Savillee3a9cbc2013-04-17 16:40:17 -0700328 }
329
330 /** Construct from Parcel, type has already been processed */
331 private CellIdentityWcdma(Parcel in) {
Nathan Harold65c4b152018-07-30 16:10:50 -0700332 super(TAG, CellInfo.TYPE_WCDMA, in);
Jack Yu6cd44732017-12-28 14:41:12 -0800333 mLac = in.readInt();
334 mCid = in.readInt();
335 mPsc = in.readInt();
336 mUarfcn = in.readInt();
Nathan Harold5522de1a2020-02-13 19:50:51 -0800337 mAdditionalPlmns = (ArraySet<String>) in.readArraySet(null);
Nathan Haroldac37b632020-01-20 19:04:40 -0800338 mCsgInfo = in.readParcelable(null);
Nathan Harold3f7dfb82020-04-24 18:34:33 -0700339
340 updateGlobalCellId();
Jack Yu6cd44732017-12-28 14:41:12 -0800341 if (DBG) log(toString());
Wink Savillee3a9cbc2013-04-17 16:40:17 -0700342 }
343
344 /** Implement the Parcelable interface */
345 @SuppressWarnings("hiding")
Jeff Sharkey9e8f83d2019-02-28 12:06:45 -0700346 public static final @android.annotation.NonNull Creator<CellIdentityWcdma> CREATOR =
Wink Savillee3a9cbc2013-04-17 16:40:17 -0700347 new Creator<CellIdentityWcdma>() {
Cassie933b78d2017-09-20 14:02:13 -0700348 @Override
349 public CellIdentityWcdma createFromParcel(Parcel in) {
Jack Yu6cd44732017-12-28 14:41:12 -0800350 in.readInt(); // skip
351 return createFromParcelBody(in);
Cassie933b78d2017-09-20 14:02:13 -0700352 }
Wink Savillee3a9cbc2013-04-17 16:40:17 -0700353
Cassie933b78d2017-09-20 14:02:13 -0700354 @Override
355 public CellIdentityWcdma[] newArray(int size) {
356 return new CellIdentityWcdma[size];
357 }
358 };
Wink Savillee3a9cbc2013-04-17 16:40:17 -0700359
Jack Yu6cd44732017-12-28 14:41:12 -0800360 /** @hide */
361 protected static CellIdentityWcdma createFromParcelBody(Parcel in) {
362 return new CellIdentityWcdma(in);
Wink Savillee3a9cbc2013-04-17 16:40:17 -0700363 }
Nathan Harolda629ea32018-10-24 11:35:53 -0700364}