From a2267451ddf91cc330f4c283e86811e38328915b Mon Sep 17 00:00:00 2001 From: Robert Greenwalt Date: Thu, 30 Jun 2011 12:24:26 -0700 Subject: [PATCH] Don't ever report a null ServiceState Report out of service if we don't know any better. Sometimes when switching radios we were finding nulls reported - it crashed some code and highlighted this problem. If we don't have a service state we're certainly out of service, so this isn't a lie. bug:4553701 Change-Id: I094798a5f9f39f45c0ba30179aaa8f88f9b3e405 --- telephony/java/android/telephony/ServiceState.java | 25 ++++++---------------- .../internal/telephony/DefaultPhoneNotifier.java | 8 ++++++- 2 files changed, 14 insertions(+), 19 deletions(-) diff --git a/telephony/java/android/telephony/ServiceState.java b/telephony/java/android/telephony/ServiceState.java index fce7cdc82440..2f010e57b161 100644 --- a/telephony/java/android/telephony/ServiceState.java +++ b/telephony/java/android/telephony/ServiceState.java @@ -473,8 +473,8 @@ public class ServiceState implements Parcelable { + " EmergOnly=" + mIsEmergencyOnly); } - public void setStateOutOfService() { - mState = STATE_OUT_OF_SERVICE; + private void setNullState(int state) { + mState = state; mRoaming = false; mOperatorAlphaLong = null; mOperatorAlphaShort = null; @@ -491,23 +491,12 @@ public class ServiceState implements Parcelable { mIsEmergencyOnly = false; } - // TODO - can't this be combined with the above method? + public void setStateOutOfService() { + setNullState(STATE_OUT_OF_SERVICE); + } + public void setStateOff() { - mState = STATE_POWER_OFF; - mRoaming = false; - mOperatorAlphaLong = null; - mOperatorAlphaShort = null; - mOperatorNumeric = null; - mIsManualNetworkSelection = false; - mRadioTechnology = 0; - mCssIndicator = false; - mNetworkId = -1; - mSystemId = -1; - mCdmaRoamingIndicator = -1; - mCdmaDefaultRoamingIndicator = -1; - mCdmaEriIconIndex = -1; - mCdmaEriIconMode = -1; - mIsEmergencyOnly = false; + setNullState(STATE_POWER_OFF); } public void setState(int state) { diff --git a/telephony/java/com/android/internal/telephony/DefaultPhoneNotifier.java b/telephony/java/com/android/internal/telephony/DefaultPhoneNotifier.java index 910905aa4543..aa7568b108f8 100644 --- a/telephony/java/com/android/internal/telephony/DefaultPhoneNotifier.java +++ b/telephony/java/com/android/internal/telephony/DefaultPhoneNotifier.java @@ -21,6 +21,7 @@ import android.net.LinkProperties; import android.os.Bundle; import android.os.RemoteException; import android.os.ServiceManager; +import android.telephony.ServiceState; import android.telephony.TelephonyManager; import android.util.Log; @@ -55,8 +56,13 @@ public class DefaultPhoneNotifier implements PhoneNotifier { } public void notifyServiceState(Phone sender) { + ServiceState ss = sender.getServiceState(); + if (ss == null) { + ss = new ServiceState(); + ss.setStateOutOfService(); + } try { - mRegistry.notifyServiceState(sender.getServiceState()); + mRegistry.notifyServiceState(ss); } catch (RemoteException ex) { // system process is dead } -- 2.11.0