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(