Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit bfe2397f authored by Brad Ebinger's avatar Brad Ebinger Committed by Automerger Merge Worker
Browse files

Merge "Configure the radio power off delay timer using a device config" am: 97a73dbb

Original change: https://android-review.googlesource.com/c/platform/frameworks/opt/telephony/+/1833875

Change-Id: Ie891d662d59b385c13d0c885fd46bc52eca63cd0
parents 03a5c445 97a73dbb
Loading
Loading
Loading
Loading
+13 −9
Original line number Diff line number Diff line
@@ -249,12 +249,6 @@ public class ServiceStateTracker extends Handler {
    /** Signal strength poll rate. */
    private static final int POLL_PERIOD_MILLIS = 20 * 1000;

    /**
     * The time we wait for IMS to deregister before executing a pending radio power off request.
     */
    @VisibleForTesting
    public static final int DELAY_RADIO_OFF_FOR_IMS_DEREG_TIMEOUT = 3 * 1000;

    /** Waiting period before recheck gprs and voice registration. */
    public static final int DEFAULT_GPRS_CHECK_PERIOD_MILLIS = 60 * 1000;

@@ -866,6 +860,16 @@ public class ServiceStateTracker extends Handler {
        setPowerStateToDesired();
    }

    /**
     * @return the timeout value in milliseconds that the framework will delay a pending radio power
     * off command while waiting for an IMS deregistered indication.
     */
    @VisibleForTesting
    public int getRadioPowerOffDelayTimeoutForImsRegistration() {
        return mPhone.getContext().getResources().getInteger(
                R.integer.config_delay_for_ims_dereg_millis);
    }

    public void dispose() {
        mCi.unSetOnSignalStrengthUpdate(this);
        mUiccController.unregisterForIccChanged(this);
@@ -3193,7 +3197,7 @@ public class ServiceStateTracker extends Handler {
        } else if ((!mDesiredPowerState || mRadioDisabledByCarrier) && mCi.getRadioState()
                == TelephonyManager.RADIO_POWER_ON) {
            // If it's on and available and we want it off gracefully
            if (mImsRegistrationOnOff) {
            if (mImsRegistrationOnOff && getRadioPowerOffDelayTimeoutForImsRegistration() > 0) {
                if (DBG) log("setPowerStateToDesired: delaying power off until IMS dereg.");
                startDelayRadioOffWaitingForImsDeregTimeout();
                // Return early here as we do not want to hit the cancel timeout code below.
@@ -3236,7 +3240,7 @@ public class ServiceStateTracker extends Handler {
        }
        if (DBG) log("startDelayRadioOffWaitingForImsDeregTimeout: starting timer");
        sendEmptyMessageDelayed(EVENT_POWER_OFF_RADIO_IMS_DEREG_TIMEOUT,
                DELAY_RADIO_OFF_FOR_IMS_DEREG_TIMEOUT);
                getRadioPowerOffDelayTimeoutForImsRegistration());
    }

    protected void onUpdateIccAvailability() {
@@ -5645,7 +5649,7 @@ public class ServiceStateTracker extends Handler {
        pw.println(" mImsRegistered=" + mImsRegistered);
        pw.println(" mImsRegistrationOnOff=" + mImsRegistrationOnOff);
        pw.println(" pending radio off event="
                + hasMessages(DELAY_RADIO_OFF_FOR_IMS_DEREG_TIMEOUT));
                + hasMessages(EVENT_POWER_OFF_RADIO_IMS_DEREG_TIMEOUT));
        pw.println(" mRadioDisabledByCarrier" + mRadioDisabledByCarrier);
        pw.println(" mDeviceShuttingDown=" + mDeviceShuttingDown);
        pw.println(" mSpnUpdatePending=" + mSpnUpdatePending);
+29 −2
Original line number Diff line number Diff line
@@ -286,6 +286,10 @@ public class ServiceStateTrackerTest extends TelephonyTest {
                com.android.internal.R.array.wfcSpnFormats,
                WIFI_CALLING_FORMATTERS);

        // Start with power off delay disabled.
        mContextFixture.putIntResource(
                com.android.internal.R.integer.config_delay_for_ims_dereg_millis, 0);

        mBundle.putBoolean(
                CarrierConfigManager.KEY_ENABLE_CARRIER_DISPLAY_NAME_RESOLVER_BOOL, true);
        mBundle.putInt(CarrierConfigManager.KEY_WFC_SPN_FORMAT_IDX_INT, 0);
@@ -1945,6 +1949,8 @@ public class ServiceStateTrackerTest extends TelephonyTest {
    @SmallTest
    public void testImsRegisteredDelayShutDown() throws Exception {
        doReturn(true).when(mPhone).isPhoneTypeGsm();
        mContextFixture.putIntResource(
                com.android.internal.R.integer.config_delay_for_ims_dereg_millis, 1000 /*ms*/);
        sst.setImsRegistrationState(true);
        mSimulatedCommands.setRadioPowerFailResponse(false);
        sst.setRadioPower(true);
@@ -1962,10 +1968,29 @@ public class ServiceStateTrackerTest extends TelephonyTest {
        assertEquals(TelephonyManager.RADIO_POWER_OFF, mSimulatedCommands.getRadioState());
    }

    @Test
    @SmallTest
    public void testImsRegisteredNoDelayShutDown() throws Exception {
        doReturn(true).when(mPhone).isPhoneTypeGsm();
        // The radio power off delay time is 0, so there should should be no delay.
        sst.setImsRegistrationState(true);
        mSimulatedCommands.setRadioPowerFailResponse(false);
        sst.setRadioPower(true);
        waitForLastHandlerAction(mSSTTestHandler.getThreadHandler());

        // Turn off the radio and ensure radio power is off
        assertEquals(TelephonyManager.RADIO_POWER_ON, mSimulatedCommands.getRadioState());
        sst.setRadioPower(false);
        waitForLastHandlerAction(mSSTTestHandler.getThreadHandler());
        assertEquals(TelephonyManager.RADIO_POWER_OFF, mSimulatedCommands.getRadioState());
    }

    @Test
    @SmallTest
    public void testImsRegisteredDelayShutDownTimeout() throws Exception {
        doReturn(true).when(mPhone).isPhoneTypeGsm();
        mContextFixture.putIntResource(
                com.android.internal.R.integer.config_delay_for_ims_dereg_millis, 1000 /*ms*/);
        sst.setImsRegistrationState(true);
        mSimulatedCommands.setRadioPowerFailResponse(false);
        sst.setRadioPower(true);
@@ -1981,7 +2006,7 @@ public class ServiceStateTrackerTest extends TelephonyTest {
        // move to off.
        // Timeout for IMS reg + some extra time to remove race conditions
        waitForDelayedHandlerAction(mSSTTestHandler.getThreadHandler(),
                ServiceStateTracker.DELAY_RADIO_OFF_FOR_IMS_DEREG_TIMEOUT + 100, 1000);
                sst.getRadioPowerOffDelayTimeoutForImsRegistration() + 1000, 1000);
        waitForLastHandlerAction(mSSTTestHandler.getThreadHandler());
        assertEquals(TelephonyManager.RADIO_POWER_OFF, mSimulatedCommands.getRadioState());
    }
@@ -1990,6 +2015,8 @@ public class ServiceStateTrackerTest extends TelephonyTest {
    @SmallTest
    public void testImsRegisteredAPMOnOffToggle() throws Exception {
        doReturn(true).when(mPhone).isPhoneTypeGsm();
        mContextFixture.putIntResource(
                com.android.internal.R.integer.config_delay_for_ims_dereg_millis, 1000 /*ms*/);
        sst.setImsRegistrationState(true);
        mSimulatedCommands.setRadioPowerFailResponse(false);
        sst.setRadioPower(true);
@@ -2005,7 +2032,7 @@ public class ServiceStateTrackerTest extends TelephonyTest {
        // Ensure the timeout was cancelled and we still see radio power is on.
        // Timeout for IMS reg + some extra time to remove race conditions
        waitForDelayedHandlerAction(mSSTTestHandler.getThreadHandler(),
                ServiceStateTracker.DELAY_RADIO_OFF_FOR_IMS_DEREG_TIMEOUT + 100, 1000);
                sst.getRadioPowerOffDelayTimeoutForImsRegistration() + 1000, 1000);
        waitForLastHandlerAction(mSSTTestHandler.getThreadHandler());
        assertEquals(TelephonyManager.RADIO_POWER_ON, mSimulatedCommands.getRadioState());
    }