Loading packages/SettingsLib/src/com/android/settingslib/Utils.java +49 −0 Original line number Diff line number Diff line Loading @@ -23,6 +23,7 @@ import android.os.UserHandle; import android.os.UserManager; import android.print.PrintManager; import android.provider.Settings; import android.telephony.ServiceState; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.util.UserIcons; Loading Loading @@ -391,4 +392,52 @@ public class Utils { || audioMode == AudioManager.MODE_IN_CALL || audioMode == AudioManager.MODE_IN_COMMUNICATION; } /** * Return the service state is in-service or not. * To make behavior consistent with SystemUI and Settings/AboutPhone/SIM status UI * * @param serviceState Service state. {@link ServiceState} */ public static boolean isInService(ServiceState serviceState) { if (serviceState == null) { return false; } int state = getCombinedServiceState(serviceState); if (state == ServiceState.STATE_POWER_OFF || state == ServiceState.STATE_OUT_OF_SERVICE || state == ServiceState.STATE_EMERGENCY_ONLY) { return false; } else { return true; } } /** * Return the combined service state. * To make behavior consistent with SystemUI and Settings/AboutPhone/SIM status UI * * @param serviceState Service state. {@link ServiceState} */ public static int getCombinedServiceState(ServiceState serviceState) { if (serviceState == null) { return ServiceState.STATE_OUT_OF_SERVICE; } // Consider the device to be in service if either voice or data // service is available. Some SIM cards are marketed as data-only // and do not support voice service, and on these SIM cards, we // want to show signal bars for data service as well as the "no // service" or "emergency calls only" text that indicates that voice // is not available. int state = serviceState.getState(); int dataState = serviceState.getDataRegState(); if (state == ServiceState.STATE_OUT_OF_SERVICE || state == ServiceState.STATE_EMERGENCY_ONLY) { if (dataState == ServiceState.STATE_IN_SERVICE) { return ServiceState.STATE_IN_SERVICE; } } return state; } } packages/SettingsLib/tests/robotests/src/com/android/settingslib/UtilsTest.java +70 −0 Original line number Diff line number Diff line Loading @@ -39,6 +39,7 @@ import android.os.SystemProperties; import android.os.UserHandle; import android.provider.Settings; import android.provider.Settings.Secure; import android.telephony.ServiceState; import android.text.TextUtils; import org.junit.Before; Loading Loading @@ -74,6 +75,8 @@ public class UtilsTest { private Context mContext; @Mock private LocationManager mLocationManager; @Mock private ServiceState mServiceState; @Before public void setUp() { Loading Loading @@ -226,4 +229,71 @@ public class UtilsTest { assertThat(Utils.isAudioModeOngoingCall(mContext)).isFalse(); } @Test public void isInService_servicestateNull_returnFalse() { assertThat(Utils.isInService(null)).isFalse(); } @Test public void isInService_voiceInService_returnTrue() { when(mServiceState.getState()).thenReturn(ServiceState.STATE_IN_SERVICE); assertThat(Utils.isInService(mServiceState)).isTrue(); } @Test public void isInService_voiceOutOfServiceDataInService_returnTrue() { when(mServiceState.getState()).thenReturn(ServiceState.STATE_OUT_OF_SERVICE); when(mServiceState.getDataRegState()).thenReturn(ServiceState.STATE_IN_SERVICE); assertThat(Utils.isInService(mServiceState)).isTrue(); } @Test public void isInService_voiceOutOfServiceDataOutOfService_returnFalse() { when(mServiceState.getState()).thenReturn(ServiceState.STATE_OUT_OF_SERVICE); when(mServiceState.getDataRegState()).thenReturn(ServiceState.STATE_OUT_OF_SERVICE); assertThat(Utils.isInService(mServiceState)).isFalse(); } @Test public void isInService_ServiceStatePowerOff_returnFalse() { when(mServiceState.getState()).thenReturn(ServiceState.STATE_POWER_OFF); assertThat(Utils.isInService(mServiceState)).isFalse(); } @Test public void getCombinedServiceState_servicestateNull_returnOutOfService() { assertThat(Utils.getCombinedServiceState(null)).isEqualTo( ServiceState.STATE_OUT_OF_SERVICE); } @Test public void getCombinedServiceState_ServiceStatePowerOff_returnPowerOff() { when(mServiceState.getState()).thenReturn(ServiceState.STATE_POWER_OFF); assertThat(Utils.getCombinedServiceState(mServiceState)).isEqualTo( ServiceState.STATE_POWER_OFF); } @Test public void getCombinedServiceState_voiceInService_returnInService() { when(mServiceState.getState()).thenReturn(ServiceState.STATE_IN_SERVICE); assertThat(Utils.getCombinedServiceState(mServiceState)).isEqualTo( ServiceState.STATE_IN_SERVICE); } @Test public void getCombinedServiceState_voiceOutOfServiceDataInService_returnInService() { when(mServiceState.getState()).thenReturn(ServiceState.STATE_OUT_OF_SERVICE); when(mServiceState.getDataRegState()).thenReturn(ServiceState.STATE_IN_SERVICE); assertThat(Utils.getCombinedServiceState(mServiceState)).isEqualTo( ServiceState.STATE_IN_SERVICE); } @Test public void getCombinedServiceState_voiceOutOfServiceDataOutOfService_returnOutOfService() { when(mServiceState.getState()).thenReturn(ServiceState.STATE_OUT_OF_SERVICE); when(mServiceState.getDataRegState()).thenReturn(ServiceState.STATE_OUT_OF_SERVICE); assertThat(Utils.getCombinedServiceState(mServiceState)).isEqualTo( ServiceState.STATE_OUT_OF_SERVICE); } } packages/SystemUI/src/com/android/systemui/statusbar/policy/MobileSignalController.java +5 −25 Original line number Diff line number Diff line Loading @@ -36,6 +36,7 @@ import com.android.internal.annotations.VisibleForTesting; import com.android.internal.telephony.TelephonyIntents; import com.android.internal.telephony.cdma.EriInfo; import com.android.settingslib.graph.SignalDrawable; import com.android.settingslib.Utils; import com.android.systemui.R; import com.android.systemui.statusbar.policy.NetworkController.IconState; import com.android.systemui.statusbar.policy.NetworkController.SignalCallback; Loading Loading @@ -319,28 +320,6 @@ public class MobileSignalController extends SignalController< return new MobileState(); } private boolean hasService() { if (mServiceState != null) { // Consider the device to be in service if either voice or data // service is available. Some SIM cards are marketed as data-only // and do not support voice service, and on these SIM cards, we // want to show signal bars for data service as well as the "no // service" or "emergency calls only" text that indicates that voice // is not available. switch (mServiceState.getVoiceRegState()) { case ServiceState.STATE_POWER_OFF: return false; case ServiceState.STATE_OUT_OF_SERVICE: case ServiceState.STATE_EMERGENCY_ONLY: return mServiceState.getDataRegState() == ServiceState.STATE_IN_SERVICE; default: return true; } } else { return false; } } private boolean isCdma() { return (mSignalStrength != null) && !mSignalStrength.isGsm(); } Loading Loading @@ -446,10 +425,11 @@ public class MobileSignalController extends SignalController< */ private final void updateTelephony() { if (DEBUG) { Log.d(mTag, "updateTelephonySignalStrength: hasService=" + hasService() + " ss=" + mSignalStrength); Log.d(mTag, "updateTelephonySignalStrength: hasService=" + Utils.isInService(mServiceState) + " ss=" + mSignalStrength); } mCurrentState.connected = hasService() && mSignalStrength != null; mCurrentState.connected = Utils.isInService(mServiceState) && mSignalStrength != null; if (mCurrentState.connected) { if (!mSignalStrength.isGsm() && mConfig.alwaysShowCdmaRssi) { mCurrentState.level = mSignalStrength.getCdmaLevel(); Loading Loading
packages/SettingsLib/src/com/android/settingslib/Utils.java +49 −0 Original line number Diff line number Diff line Loading @@ -23,6 +23,7 @@ import android.os.UserHandle; import android.os.UserManager; import android.print.PrintManager; import android.provider.Settings; import android.telephony.ServiceState; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.util.UserIcons; Loading Loading @@ -391,4 +392,52 @@ public class Utils { || audioMode == AudioManager.MODE_IN_CALL || audioMode == AudioManager.MODE_IN_COMMUNICATION; } /** * Return the service state is in-service or not. * To make behavior consistent with SystemUI and Settings/AboutPhone/SIM status UI * * @param serviceState Service state. {@link ServiceState} */ public static boolean isInService(ServiceState serviceState) { if (serviceState == null) { return false; } int state = getCombinedServiceState(serviceState); if (state == ServiceState.STATE_POWER_OFF || state == ServiceState.STATE_OUT_OF_SERVICE || state == ServiceState.STATE_EMERGENCY_ONLY) { return false; } else { return true; } } /** * Return the combined service state. * To make behavior consistent with SystemUI and Settings/AboutPhone/SIM status UI * * @param serviceState Service state. {@link ServiceState} */ public static int getCombinedServiceState(ServiceState serviceState) { if (serviceState == null) { return ServiceState.STATE_OUT_OF_SERVICE; } // Consider the device to be in service if either voice or data // service is available. Some SIM cards are marketed as data-only // and do not support voice service, and on these SIM cards, we // want to show signal bars for data service as well as the "no // service" or "emergency calls only" text that indicates that voice // is not available. int state = serviceState.getState(); int dataState = serviceState.getDataRegState(); if (state == ServiceState.STATE_OUT_OF_SERVICE || state == ServiceState.STATE_EMERGENCY_ONLY) { if (dataState == ServiceState.STATE_IN_SERVICE) { return ServiceState.STATE_IN_SERVICE; } } return state; } }
packages/SettingsLib/tests/robotests/src/com/android/settingslib/UtilsTest.java +70 −0 Original line number Diff line number Diff line Loading @@ -39,6 +39,7 @@ import android.os.SystemProperties; import android.os.UserHandle; import android.provider.Settings; import android.provider.Settings.Secure; import android.telephony.ServiceState; import android.text.TextUtils; import org.junit.Before; Loading Loading @@ -74,6 +75,8 @@ public class UtilsTest { private Context mContext; @Mock private LocationManager mLocationManager; @Mock private ServiceState mServiceState; @Before public void setUp() { Loading Loading @@ -226,4 +229,71 @@ public class UtilsTest { assertThat(Utils.isAudioModeOngoingCall(mContext)).isFalse(); } @Test public void isInService_servicestateNull_returnFalse() { assertThat(Utils.isInService(null)).isFalse(); } @Test public void isInService_voiceInService_returnTrue() { when(mServiceState.getState()).thenReturn(ServiceState.STATE_IN_SERVICE); assertThat(Utils.isInService(mServiceState)).isTrue(); } @Test public void isInService_voiceOutOfServiceDataInService_returnTrue() { when(mServiceState.getState()).thenReturn(ServiceState.STATE_OUT_OF_SERVICE); when(mServiceState.getDataRegState()).thenReturn(ServiceState.STATE_IN_SERVICE); assertThat(Utils.isInService(mServiceState)).isTrue(); } @Test public void isInService_voiceOutOfServiceDataOutOfService_returnFalse() { when(mServiceState.getState()).thenReturn(ServiceState.STATE_OUT_OF_SERVICE); when(mServiceState.getDataRegState()).thenReturn(ServiceState.STATE_OUT_OF_SERVICE); assertThat(Utils.isInService(mServiceState)).isFalse(); } @Test public void isInService_ServiceStatePowerOff_returnFalse() { when(mServiceState.getState()).thenReturn(ServiceState.STATE_POWER_OFF); assertThat(Utils.isInService(mServiceState)).isFalse(); } @Test public void getCombinedServiceState_servicestateNull_returnOutOfService() { assertThat(Utils.getCombinedServiceState(null)).isEqualTo( ServiceState.STATE_OUT_OF_SERVICE); } @Test public void getCombinedServiceState_ServiceStatePowerOff_returnPowerOff() { when(mServiceState.getState()).thenReturn(ServiceState.STATE_POWER_OFF); assertThat(Utils.getCombinedServiceState(mServiceState)).isEqualTo( ServiceState.STATE_POWER_OFF); } @Test public void getCombinedServiceState_voiceInService_returnInService() { when(mServiceState.getState()).thenReturn(ServiceState.STATE_IN_SERVICE); assertThat(Utils.getCombinedServiceState(mServiceState)).isEqualTo( ServiceState.STATE_IN_SERVICE); } @Test public void getCombinedServiceState_voiceOutOfServiceDataInService_returnInService() { when(mServiceState.getState()).thenReturn(ServiceState.STATE_OUT_OF_SERVICE); when(mServiceState.getDataRegState()).thenReturn(ServiceState.STATE_IN_SERVICE); assertThat(Utils.getCombinedServiceState(mServiceState)).isEqualTo( ServiceState.STATE_IN_SERVICE); } @Test public void getCombinedServiceState_voiceOutOfServiceDataOutOfService_returnOutOfService() { when(mServiceState.getState()).thenReturn(ServiceState.STATE_OUT_OF_SERVICE); when(mServiceState.getDataRegState()).thenReturn(ServiceState.STATE_OUT_OF_SERVICE); assertThat(Utils.getCombinedServiceState(mServiceState)).isEqualTo( ServiceState.STATE_OUT_OF_SERVICE); } }
packages/SystemUI/src/com/android/systemui/statusbar/policy/MobileSignalController.java +5 −25 Original line number Diff line number Diff line Loading @@ -36,6 +36,7 @@ import com.android.internal.annotations.VisibleForTesting; import com.android.internal.telephony.TelephonyIntents; import com.android.internal.telephony.cdma.EriInfo; import com.android.settingslib.graph.SignalDrawable; import com.android.settingslib.Utils; import com.android.systemui.R; import com.android.systemui.statusbar.policy.NetworkController.IconState; import com.android.systemui.statusbar.policy.NetworkController.SignalCallback; Loading Loading @@ -319,28 +320,6 @@ public class MobileSignalController extends SignalController< return new MobileState(); } private boolean hasService() { if (mServiceState != null) { // Consider the device to be in service if either voice or data // service is available. Some SIM cards are marketed as data-only // and do not support voice service, and on these SIM cards, we // want to show signal bars for data service as well as the "no // service" or "emergency calls only" text that indicates that voice // is not available. switch (mServiceState.getVoiceRegState()) { case ServiceState.STATE_POWER_OFF: return false; case ServiceState.STATE_OUT_OF_SERVICE: case ServiceState.STATE_EMERGENCY_ONLY: return mServiceState.getDataRegState() == ServiceState.STATE_IN_SERVICE; default: return true; } } else { return false; } } private boolean isCdma() { return (mSignalStrength != null) && !mSignalStrength.isGsm(); } Loading Loading @@ -446,10 +425,11 @@ public class MobileSignalController extends SignalController< */ private final void updateTelephony() { if (DEBUG) { Log.d(mTag, "updateTelephonySignalStrength: hasService=" + hasService() + " ss=" + mSignalStrength); Log.d(mTag, "updateTelephonySignalStrength: hasService=" + Utils.isInService(mServiceState) + " ss=" + mSignalStrength); } mCurrentState.connected = hasService() && mSignalStrength != null; mCurrentState.connected = Utils.isInService(mServiceState) && mSignalStrength != null; if (mCurrentState.connected) { if (!mSignalStrength.isGsm() && mConfig.alwaysShowCdmaRssi) { mCurrentState.level = mSignalStrength.getCdmaLevel(); Loading