ImsReasonInfo set an initial value and added a null check

the last ImsReasonInfo value was kept when callback was registered without initial set.
To prevent @NonNull violations, ImsReasonInfoi set an initial value and added a null check.

Bug: 267671502
Test: atest CtsTelephonyTestCases: PhoneStateListenerTest
Test: atest CtsTelephonyTestCases: TelephonyCallbackTest
Test: atest TelephonyRegistryTest
Test: manual

Change-Id: I884f4ce12fded530a1062bc7c11999334118c63d
This commit is contained in:
Sungcheol Ahn
2023-02-08 01:10:40 +00:00
parent 720fc7621c
commit d05d4d04bc

View File

@@ -846,7 +846,7 @@ public class TelephonyRegistry extends ITelephonyRegistry.Stub {
mCallForwarding[i] = false;
mCellIdentity[i] = null;
mCellInfo.add(i, Collections.EMPTY_LIST);
mImsReasonInfo.add(i, null);
mImsReasonInfo.add(i, new ImsReasonInfo());
mSrvccState[i] = TelephonyManager.SRVCC_STATE_HANDOVER_NONE;
mCallDisconnectCause[i] = DisconnectCause.NOT_VALID;
mCallPreciseDisconnectCause[i] = PreciseDisconnectCause.NOT_VALID;
@@ -1265,10 +1265,13 @@ public class TelephonyRegistry extends ITelephonyRegistry.Stub {
}
}
if (events.contains(TelephonyCallback.EVENT_IMS_CALL_DISCONNECT_CAUSE_CHANGED)) {
try {
r.callback.onImsCallDisconnectCauseChanged(mImsReasonInfo.get(r.phoneId));
} catch (RemoteException ex) {
remove(r.binder);
ImsReasonInfo imsReasonInfo = mImsReasonInfo.get(r.phoneId);
if (imsReasonInfo != null) {
try {
r.callback.onImsCallDisconnectCauseChanged(imsReasonInfo);
} catch (RemoteException ex) {
remove(r.binder);
}
}
}
if (events.contains(
@@ -2418,6 +2421,11 @@ public class TelephonyRegistry extends ITelephonyRegistry.Stub {
int phoneId = getPhoneIdFromSubId(subId);
synchronized (mRecords) {
if (validatePhoneId(phoneId)) {
if (imsReasonInfo == null) {
loge("ImsReasonInfo is null, subId=" + subId + ", phoneId=" + phoneId);
mImsReasonInfo.set(phoneId, new ImsReasonInfo());
return;
}
mImsReasonInfo.set(phoneId, imsReasonInfo);
for (Record r : mRecords) {
if (r.matchTelephonyCallbackEvent(