From d05d4d04bce470abe14eb4f1b4c830d6630f5338 Mon Sep 17 00:00:00 2001 From: Sungcheol Ahn Date: Wed, 8 Feb 2023 01:10:40 +0000 Subject: [PATCH] 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 --- .../com/android/server/TelephonyRegistry.java | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/services/core/java/com/android/server/TelephonyRegistry.java b/services/core/java/com/android/server/TelephonyRegistry.java index cfd22e841a99d..a66e5980839d3 100644 --- a/services/core/java/com/android/server/TelephonyRegistry.java +++ b/services/core/java/com/android/server/TelephonyRegistry.java @@ -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(