Fix NPE at DisplayInfoController
Avoid pre-mature call of updateTelephonyDisplayInfo() until NetworkTypeController() is being constructed.
Callback when registered if called immediately before the object being constructed, can lead to NPE.
Flag: EXEMPT Bugfix
Bug: 375921149
Bug: 383766616
Test: m and atest
Test: Regression at b/383766616
(cherry picked from https://googleplex-android-review.googlesource.com/q/commit:3c9b3d9b565fbb232130a092c738d4f78bcf1928)
Merged-In: I9787d304b8fa232dbd68bd986a13a1cd56e1f87f
Change-Id: I9787d304b8fa232dbd68bd986a13a1cd56e1f87f
diff --git a/src/java/com/android/internal/telephony/DisplayInfoController.java b/src/java/com/android/internal/telephony/DisplayInfoController.java
index bb19a31..57ea022 100644
--- a/src/java/com/android/internal/telephony/DisplayInfoController.java
+++ b/src/java/com/android/internal/telephony/DisplayInfoController.java
@@ -115,6 +115,13 @@
// EVENT_UPDATE will transition from DefaultState to the current state
// and update the TelephonyDisplayInfo based on the current state.
mNetworkTypeController.sendMessage(NetworkTypeController.EVENT_UPDATE);
+
+ // To Support Satellite bandwidth constrained data capability status at telephony
+ // display info
+ if (mFeatureFlags.carrierEnabledSatelliteFlag()) {
+ log("register for satellite network callback");
+ mNetworkTypeController.registerForSatelliteNetwork();
+ }
}
/**
@@ -129,19 +136,23 @@
* NetworkTypeController.
*/
public void updateTelephonyDisplayInfo() {
- TelephonyDisplayInfo newDisplayInfo = new TelephonyDisplayInfo(
- mNetworkTypeController.getDataNetworkType(),
- mNetworkTypeController.getOverrideNetworkType(),
- isRoaming(),
- mPhone.getServiceStateTracker().getServiceState().isUsingNonTerrestrialNetwork(),
- mNetworkTypeController.getSatelliteConstrainedData());
- if (!newDisplayInfo.equals(mTelephonyDisplayInfo)) {
- logl("TelephonyDisplayInfo changed from " + mTelephonyDisplayInfo + " to "
- + newDisplayInfo);
- validateDisplayInfo(newDisplayInfo);
- mTelephonyDisplayInfo = newDisplayInfo;
- mTelephonyDisplayInfoChangedRegistrants.notifyRegistrants();
- mPhone.notifyDisplayInfoChanged(mTelephonyDisplayInfo);
+ if (mNetworkTypeController != null && mServiceState != null) {
+ TelephonyDisplayInfo newDisplayInfo = new TelephonyDisplayInfo(
+ mNetworkTypeController.getDataNetworkType(),
+ mNetworkTypeController.getOverrideNetworkType(),
+ isRoaming(),
+ mServiceState.isUsingNonTerrestrialNetwork(),
+ mNetworkTypeController.getSatelliteConstrainedData());
+ if (!newDisplayInfo.equals(mTelephonyDisplayInfo)) {
+ logl("TelephonyDisplayInfo changed from " + mTelephonyDisplayInfo + " to "
+ + newDisplayInfo);
+ validateDisplayInfo(newDisplayInfo);
+ mTelephonyDisplayInfo = newDisplayInfo;
+ mTelephonyDisplayInfoChangedRegistrants.notifyRegistrants();
+ mPhone.notifyDisplayInfoChanged(mTelephonyDisplayInfo);
+ }
+ } else {
+ loge("Found null object");
}
}
diff --git a/src/java/com/android/internal/telephony/NetworkTypeController.java b/src/java/com/android/internal/telephony/NetworkTypeController.java
index b12a3df..82e0c6e 100644
--- a/src/java/com/android/internal/telephony/NetworkTypeController.java
+++ b/src/java/com/android/internal/telephony/NetworkTypeController.java
@@ -338,10 +338,6 @@
mServiceState = mPhone.getServiceStateTracker().getServiceState();
mPhysicalChannelConfigs = mPhone.getServiceStateTracker().getPhysicalChannelConfigList();
- if(mFeatureFlags.carrierEnabledSatelliteFlag()) {
- registerForSatelliteNetwork();
- }
-
sendMessage(EVENT_INITIALIZE);
}