Merge "Call SST#setImsRegState on ImsPhone set reg state"
diff --git a/src/java/com/android/internal/telephony/ServiceStateTracker.java b/src/java/com/android/internal/telephony/ServiceStateTracker.java
index ce72bd6..8815124 100755
--- a/src/java/com/android/internal/telephony/ServiceStateTracker.java
+++ b/src/java/com/android/internal/telephony/ServiceStateTracker.java
@@ -1318,8 +1318,10 @@
case EVENT_IMS_STATE_DONE:
ar = (AsyncResult) msg.obj;
if (ar.exception == null) {
- int[] responseArray = (int[])ar.result;
- mImsRegistered = (responseArray[0] == 1) ? true : false;
+ final int[] responseArray = (int[]) ar.result;
+ final boolean imsRegistered = responseArray[0] == 1;
+ mPhone.setImsRegistrationState(imsRegistered);
+ mImsRegistered = imsRegistered;
}
break;
@@ -2970,7 +2972,7 @@
mRadioPowerLog.log(tmpLog);
}
- if (mPhone.isPhoneTypeGsm() && mAlarmSwitch) {
+ if (mAlarmSwitch) {
if(DBG) log("mAlarmSwitch == true");
Context context = mPhone.getContext();
AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
@@ -2985,7 +2987,7 @@
} else if ((!mDesiredPowerState || mRadioDisabledByCarrier) && mCi.getRadioState()
== TelephonyManager.RADIO_POWER_ON) {
// If it's on and available and we want it off gracefully
- if (mPhone.isPhoneTypeGsm() && mPowerOffDelayNeed) {
+ if (mPowerOffDelayNeed) {
if (mImsRegistrationOnOff && !mAlarmSwitch) {
if(DBG) log("mImsRegistrationOnOff == true");
Context context = mPhone.getContext();
@@ -3122,15 +3124,25 @@
sendMessage(obtainMessage(EVENT_IMS_SERVICE_STATE_CHANGED));
}
- public void setImsRegistrationState(boolean registered) {
- log("ImsRegistrationState - registered : " + registered);
+ /**
+ * Sets the Ims registration state. If the 3 second shut down timer has begun and the state
+ * is set to unregistered, the timer is cancelled and the radio is shutdown immediately.
+ *
+ * @param registered whether ims is registered
+ */
+ public void setImsRegistrationState(final boolean registered) {
+ log("setImsRegistrationState: {registered=" + registered
+ + " mImsRegistrationOnOff=" + mImsRegistrationOnOff
+ + " mAlarmSwitch=" + mAlarmSwitch
+ + "}");
if (mImsRegistrationOnOff && !registered) {
if (mAlarmSwitch) {
mImsRegistrationOnOff = registered;
- Context context = mPhone.getContext();
- AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
+ final Context context = mPhone.getContext();
+ final AlarmManager am =
+ (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
am.cancel(mRadioOffIntent);
mAlarmSwitch = false;
diff --git a/src/java/com/android/internal/telephony/imsphone/ImsPhone.java b/src/java/com/android/internal/telephony/imsphone/ImsPhone.java
index dca68a0..b9f4a64 100644
--- a/src/java/com/android/internal/telephony/imsphone/ImsPhone.java
+++ b/src/java/com/android/internal/telephony/imsphone/ImsPhone.java
@@ -2100,11 +2100,6 @@
RegistrationManager.REGISTRATION_STATE_NOT_REGISTERED);
}
- public void setImsRegistrationState(@RegistrationManager.ImsRegistrationState int value) {
- if (DBG) logd("setImsRegistrationState: " + value);
- mImsMmTelRegistrationHelper.updateRegistrationState(value);
- }
-
@Override
public void callEndCleanupHandOverCallIfAny() {
mCT.callEndCleanupHandOverCallIfAny();
@@ -2387,12 +2382,13 @@
@Override
public void handleImsRegistered(int imsRadioTech) {
if (DBG) {
- logd("onImsMmTelConnected imsRadioTech="
+ logd("handleImsRegistered: onImsMmTelConnected imsRadioTech="
+ AccessNetworkConstants.transportTypeToString(imsRadioTech));
}
- mRegLocalLog.log("onImsMmTelConnected imsRadioTech="
+ mRegLocalLog.log("handleImsRegistered: onImsMmTelConnected imsRadioTech="
+ AccessNetworkConstants.transportTypeToString(imsRadioTech));
setServiceState(ServiceState.STATE_IN_SERVICE);
+ getDefaultPhone().setImsRegistrationState(true);
mMetrics.writeOnImsConnectionState(mPhoneId, ImsConnectionState.State.CONNECTED, null);
mImsStats.onImsRegistered(imsRadioTech);
}
@@ -2400,12 +2396,13 @@
@Override
public void handleImsRegistering(int imsRadioTech) {
if (DBG) {
- logd("onImsMmTelProgressing imsRadioTech="
+ logd("handleImsRegistering: onImsMmTelProgressing imsRadioTech="
+ AccessNetworkConstants.transportTypeToString(imsRadioTech));
}
- mRegLocalLog.log("onImsMmTelProgressing imsRadioTech="
+ mRegLocalLog.log("handleImsRegistering: onImsMmTelProgressing imsRadioTech="
+ AccessNetworkConstants.transportTypeToString(imsRadioTech));
setServiceState(ServiceState.STATE_OUT_OF_SERVICE);
+ getDefaultPhone().setImsRegistrationState(false);
mMetrics.writeOnImsConnectionState(mPhoneId, ImsConnectionState.State.PROGRESSING,
null);
mImsStats.onImsRegistering(imsRadioTech);
@@ -2413,10 +2410,15 @@
@Override
public void handleImsUnregistered(ImsReasonInfo imsReasonInfo) {
- if (DBG) logd("onImsMmTelDisconnected imsReasonInfo=" + imsReasonInfo);
- mRegLocalLog.log("onImsMmTelDisconnected imsRadioTech=" + imsReasonInfo);
+ if (DBG) {
+ logd("handleImsUnregistered: onImsMmTelDisconnected imsReasonInfo="
+ + imsReasonInfo);
+ }
+ mRegLocalLog.log("handleImsUnregistered: onImsMmTelDisconnected imsRadioTech="
+ + imsReasonInfo);
setServiceState(ServiceState.STATE_OUT_OF_SERVICE);
processDisconnectReason(imsReasonInfo);
+ getDefaultPhone().setImsRegistrationState(false);
mMetrics.writeOnImsConnectionState(mPhoneId, ImsConnectionState.State.DISCONNECTED,
imsReasonInfo);
mImsStats.onImsUnregistered(imsReasonInfo);
diff --git a/src/java/com/android/internal/telephony/imsphone/ImsRegistrationCallbackHelper.java b/src/java/com/android/internal/telephony/imsphone/ImsRegistrationCallbackHelper.java
index 33c16e2..115f6fe 100644
--- a/src/java/com/android/internal/telephony/imsphone/ImsRegistrationCallbackHelper.java
+++ b/src/java/com/android/internal/telephony/imsphone/ImsRegistrationCallbackHelper.java
@@ -109,8 +109,9 @@
public synchronized void updateRegistrationState(
@RegistrationManager.ImsRegistrationState int newState) {
synchronized (mLock) {
- Log.d(TAG, "updateRegistrationState: registration state from " + mRegistrationState
- + " to " + newState);
+ Log.d(TAG, "updateRegistrationState: registration state from "
+ + RegistrationManager.registrationStateToString(mRegistrationState)
+ + " to " + RegistrationManager.registrationStateToString(newState));
mRegistrationState = newState;
}
}
diff --git a/tests/telephonytests/src/com/android/internal/telephony/ServiceStateTrackerTest.java b/tests/telephonytests/src/com/android/internal/telephony/ServiceStateTrackerTest.java
index 583eb82..339e0cf 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/ServiceStateTrackerTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/ServiceStateTrackerTest.java
@@ -36,9 +36,10 @@
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
-import android.app.IAlarmManager;
+import android.app.AlarmManager;
import android.app.Notification;
import android.app.NotificationManager;
+import android.app.PendingIntent;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
@@ -125,7 +126,7 @@
@Mock
private Handler mTestHandler;
@Mock
- protected IAlarmManager mAlarmManager;
+ protected AlarmManager mAlarmManager;
private CellularNetworkService mCellularNetworkService;
@@ -231,6 +232,8 @@
logd("ServiceStateTrackerTest +Setup!");
super.setUp("ServiceStateTrackerTest");
+ doReturn(mAlarmManager).when(mContext).getSystemService(eq(Context.ALARM_SERVICE));
+
mContextFixture.putResource(R.string.config_wwan_network_service_package,
"com.android.phone");
mContextFixture.putResource(R.string.config_wlan_network_service_package,
@@ -1919,6 +1922,25 @@
@Test
@SmallTest
+ public void testSetImsRegisteredStateRunsShutdownImmediately() throws Exception {
+ doReturn(true).when(mPhone).isPhoneTypeGsm();
+ sst.setImsRegistrationState(true);
+ mSimulatedCommands.setRadioPowerFailResponse(false);
+ sst.setRadioPower(true);
+ waitForLastHandlerAction(mSSTTestHandler.getThreadHandler());
+
+ assertEquals(TelephonyManager.RADIO_POWER_ON, mSimulatedCommands.getRadioState());
+ sst.requestShutdown();
+ waitForLastHandlerAction(mSSTTestHandler.getThreadHandler());
+
+ sst.setImsRegistrationState(false);
+ verify(mAlarmManager).cancel(any(PendingIntent.class));
+ waitForLastHandlerAction(mSSTTestHandler.getThreadHandler());
+ assertEquals(TelephonyManager.RADIO_POWER_UNAVAILABLE, mSimulatedCommands.getRadioState());
+ }
+
+ @Test
+ @SmallTest
public void testSetTimeFromNITZStr() throws Exception {
{
// Mock sending incorrect nitz str from RIL
diff --git a/tests/telephonytests/src/com/android/internal/telephony/imsphone/ImsPhoneTest.java b/tests/telephonytests/src/com/android/internal/telephony/imsphone/ImsPhoneTest.java
index 921a78b..f9885a5 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/imsphone/ImsPhoneTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/imsphone/ImsPhoneTest.java
@@ -668,7 +668,7 @@
@SmallTest
public void testImsRegistered() throws Exception {
mImsPhoneUT.setServiceState(ServiceState.STATE_IN_SERVICE);
- mImsPhoneUT.setImsRegistrationState(RegistrationManager.REGISTRATION_STATE_REGISTERED);
+ mImsPhoneUT.setImsRegistered(true);
assertTrue(mImsPhoneUT.isImsRegistered());
LinkedBlockingQueue<Integer> result = new LinkedBlockingQueue<>(1);
@@ -680,23 +680,9 @@
@Test
@SmallTest
- public void testImsRegistering() throws Exception {
- mImsPhoneUT.setServiceState(ServiceState.STATE_OUT_OF_SERVICE);
- mImsPhoneUT.setImsRegistrationState(RegistrationManager.REGISTRATION_STATE_REGISTERING);
- assertFalse(mImsPhoneUT.isImsRegistered());
-
- LinkedBlockingQueue<Integer> result = new LinkedBlockingQueue<>(1);
- mImsPhoneUT.getImsRegistrationState(result::offer);
- Integer regResult = result.poll(1000, TimeUnit.MILLISECONDS);
- assertNotNull(regResult);
- assertEquals(RegistrationManager.REGISTRATION_STATE_REGISTERING, regResult.intValue());
- }
-
- @Test
- @SmallTest
public void testImsDeregistered() throws Exception {
mImsPhoneUT.setServiceState(ServiceState.STATE_OUT_OF_SERVICE);
- mImsPhoneUT.setImsRegistrationState(RegistrationManager.REGISTRATION_STATE_NOT_REGISTERED);
+ mImsPhoneUT.setImsRegistered(false);
assertFalse(mImsPhoneUT.isImsRegistered());
LinkedBlockingQueue<Integer> result = new LinkedBlockingQueue<>(1);