Check HIDL Discriminator for CSG Info
ART throws an exception if an unpopulated safe union element
is accessed at runtime, so instead we have to check the
hidl_discriminator to see whether the element is populated
before trying to access it (and thus we skip the null check).
Bug: 152486447
Test: atest testCellIdentityLte_1_5_CsgInfo \
testCellIdentityWcdma_1_5_CsgInfo \
testCellIdentityTdscdma_1_5_CsgInfo
Merged-In: I08dc0d2050a9f4d4b574178e1c68a23d015768e4
Change-Id: I08dc0d2050a9f4d4b574178e1c68a23d015768e4
(cherry picked from commit f85a2e9220cb523dcb8c05d04a7bcb8b2cfcaf6d)
(cherry picked from commit 8f19e4f21f858ef31075f6163b4ffff43a4420c9)
CRs-Fixed: 2726148
Change-Id: I2ef5510c5fcfa7093f838a3cdcc44e5609b85a9d
diff --git a/telephony/java/android/telephony/CellIdentityLte.java b/telephony/java/android/telephony/CellIdentityLte.java
index d08557d..e6279dc 100644
--- a/telephony/java/android/telephony/CellIdentityLte.java
+++ b/telephony/java/android/telephony/CellIdentityLte.java
@@ -152,7 +152,11 @@
this(cid.base.base.ci, cid.base.base.pci, cid.base.base.tac, cid.base.base.earfcn,
cid.bands.stream().mapToInt(Integer::intValue).toArray(), cid.base.bandwidth,
cid.base.base.mcc, cid.base.base.mnc, cid.base.operatorNames.alphaLong,
- cid.base.operatorNames.alphaShort, cid.additionalPlmns, null);
+ cid.base.operatorNames.alphaShort, cid.additionalPlmns,
+ cid.optionalCsgInfo.getDiscriminator()
+ == android.hardware.radio.V1_5.OptionalCsgInfo.hidl_discriminator.csgInfo
+ ? new ClosedSubscriberGroupInfo(cid.optionalCsgInfo.csgInfo())
+ : null);
}
private CellIdentityLte(@NonNull CellIdentityLte cid) {
diff --git a/telephony/java/android/telephony/CellIdentityTdscdma.java b/telephony/java/android/telephony/CellIdentityTdscdma.java
index 1683f83..e74b709 100644
--- a/telephony/java/android/telephony/CellIdentityTdscdma.java
+++ b/telephony/java/android/telephony/CellIdentityTdscdma.java
@@ -128,7 +128,11 @@
this(cid.base.base.mcc, cid.base.base.mnc, cid.base.base.lac, cid.base.base.cid,
cid.base.base.cpid, cid.base.uarfcn, cid.base.operatorNames.alphaLong,
cid.base.operatorNames.alphaShort,
- cid.additionalPlmns, null);
+ cid.additionalPlmns,
+ cid.optionalCsgInfo.getDiscriminator()
+ == android.hardware.radio.V1_5.OptionalCsgInfo.hidl_discriminator.csgInfo
+ ? new ClosedSubscriberGroupInfo(cid.optionalCsgInfo.csgInfo())
+ : null);
}
/** @hide */
diff --git a/telephony/java/android/telephony/CellIdentityWcdma.java b/telephony/java/android/telephony/CellIdentityWcdma.java
index c85e21d..40cb27e 100644
--- a/telephony/java/android/telephony/CellIdentityWcdma.java
+++ b/telephony/java/android/telephony/CellIdentityWcdma.java
@@ -122,7 +122,11 @@
public CellIdentityWcdma(@NonNull android.hardware.radio.V1_5.CellIdentityWcdma cid) {
this(cid.base.base.lac, cid.base.base.cid, cid.base.base.psc, cid.base.base.uarfcn,
cid.base.base.mcc, cid.base.base.mnc, cid.base.operatorNames.alphaLong,
- cid.base.operatorNames.alphaShort, cid.additionalPlmns, null);
+ cid.base.operatorNames.alphaShort, cid.additionalPlmns,
+ cid.optionalCsgInfo.getDiscriminator()
+ == android.hardware.radio.V1_5.OptionalCsgInfo.hidl_discriminator.csgInfo
+ ? new ClosedSubscriberGroupInfo(cid.optionalCsgInfo.csgInfo())
+ : null);
}
private CellIdentityWcdma(@NonNull CellIdentityWcdma cid) {