Loading src/java/com/android/internal/telephony/ServiceStateTracker.java +3 −14 Original line number Diff line number Diff line Loading @@ -227,7 +227,6 @@ public class ServiceStateTracker extends Handler { private final RegistrantList mAreaCodeChangedRegistrants = new RegistrantList(); /* Radio power off pending flag */ // @GuardedBy("this") private volatile boolean mPendingRadioPowerOffAfterDataOff = false; /** Waiting period before recheck gprs and voice registration. */ Loading Loading @@ -5016,20 +5015,10 @@ public class ServiceStateTracker extends Handler { } /** * process the pending request to turn radio off after data is disconnected * * return true if there is pending request to process; false otherwise. * return true if there is pending disconnect data request to process; false otherwise. */ public boolean processPendingRadioPowerOffAfterDataOff() { synchronized(this) { if (mPendingRadioPowerOffAfterDataOff) { if (DBG) log("Process pending request to turn radio off."); hangupAndPowerOff(); mPendingRadioPowerOffAfterDataOff = false; return true; } return false; } public boolean isPendingRadioPowerOffAfterDataOff() { return mPendingRadioPowerOffAfterDataOff; } private void onCarrierConfigurationChanged(int slotIndex) { Loading src/java/com/android/internal/telephony/data/DataNetworkController.java +2 −11 Original line number Diff line number Diff line Loading @@ -399,12 +399,6 @@ public class DataNetworkController extends Handler { /** Event counter for WWAN setup data failure within time window to trigger anomaly report. */ private @NonNull SlidingWindowEventCounter mSetupDataCallWwanFailureCounter; /** * {@code true} if {@link #tearDownAllDataNetworks(int)} was invoked and waiting for all * networks torn down. */ private boolean mPendingTearDownAllNetworks = false; /** * The capabilities of the latest released IMS request. To detect back to back release/request * IMS network. Loading Loading @@ -1628,7 +1622,7 @@ public class DataNetworkController extends Handler { } // Check if there are pending tear down all networks request. if (mPendingTearDownAllNetworks) { if (mPhone.getServiceStateTracker().isPendingRadioPowerOffAfterDataOff()) { evaluation.addDataDisallowedReason(DataDisallowedReason.PENDING_TEAR_DOWN_ALL); } Loading Loading @@ -2944,7 +2938,6 @@ public class DataNetworkController extends Handler { mDataNetworkList.remove(dataNetwork); trackSetupDataCallFailure(dataNetwork.getTransport(), cause); if (mAnyDataNetworkExisting && mDataNetworkList.isEmpty()) { mPendingTearDownAllNetworks = false; mAnyDataNetworkExisting = false; mDataNetworkControllerCallbacks.forEach(callback -> callback.invokeFromExecutor( () -> callback.onAnyDataNetworkExistingChanged(mAnyDataNetworkExisting))); Loading Loading @@ -3275,7 +3268,6 @@ public class DataNetworkController extends Handler { if (mAnyDataNetworkExisting && mDataNetworkList.isEmpty()) { log("All data networks disconnected now."); mPendingTearDownAllNetworks = false; mAnyDataNetworkExisting = false; mDataNetworkControllerCallbacks.forEach(callback -> callback.invokeFromExecutor( () -> callback.onAnyDataNetworkExistingChanged(mAnyDataNetworkExisting))); Loading Loading @@ -4009,14 +4001,13 @@ public class DataNetworkController extends Handler { * * @param reason The reason to tear down. */ public void onTearDownAllDataNetworks(@TearDownReason int reason) { private void onTearDownAllDataNetworks(@TearDownReason int reason) { log("onTearDownAllDataNetworks: reason=" + DataNetwork.tearDownReasonToString(reason)); if (mDataNetworkList.isEmpty()) { log("tearDownAllDataNetworks: No pending networks. All disconnected now."); return; } mPendingTearDownAllNetworks = true; for (DataNetwork dataNetwork : mDataNetworkList) { if (!dataNetwork.isDisconnecting()) { tearDownGracefully(dataNetwork, reason); Loading tests/telephonytests/src/com/android/internal/telephony/data/DataNetworkControllerTest.java +19 −0 Original line number Diff line number Diff line Loading @@ -5395,4 +5395,23 @@ public class DataNetworkControllerTest extends TelephonyTest { verify(mMockedWwanDataServiceManager, never()).deactivateDataCall(anyInt(), eq(DataService.REQUEST_REASON_NORMAL), any(Message.class)); } @Test public void testRadioOffTearDown() throws Exception { testSetupDataNetwork(); doReturn(true).when(mSST).isPendingRadioPowerOffAfterDataOff(); mDataNetworkControllerUT.tearDownAllDataNetworks( DataNetwork.TEAR_DOWN_REASON_AIRPLANE_MODE_ON); processAllMessages(); verifyAllDataDisconnected(); verify(mMockedDataNetworkControllerCallback).onAnyDataNetworkExistingChanged(eq(false)); clearInvocations(mMockedDataNetworkControllerCallback); mDataNetworkControllerUT.addNetworkRequest( createNetworkRequest(NetworkCapabilities.NET_CAPABILITY_INTERNET)); processAllMessages(); verifyAllDataDisconnected(); verify(mMockedDataNetworkControllerCallback, never()).onAnyDataNetworkExistingChanged( anyBoolean()); } } Loading
src/java/com/android/internal/telephony/ServiceStateTracker.java +3 −14 Original line number Diff line number Diff line Loading @@ -227,7 +227,6 @@ public class ServiceStateTracker extends Handler { private final RegistrantList mAreaCodeChangedRegistrants = new RegistrantList(); /* Radio power off pending flag */ // @GuardedBy("this") private volatile boolean mPendingRadioPowerOffAfterDataOff = false; /** Waiting period before recheck gprs and voice registration. */ Loading Loading @@ -5016,20 +5015,10 @@ public class ServiceStateTracker extends Handler { } /** * process the pending request to turn radio off after data is disconnected * * return true if there is pending request to process; false otherwise. * return true if there is pending disconnect data request to process; false otherwise. */ public boolean processPendingRadioPowerOffAfterDataOff() { synchronized(this) { if (mPendingRadioPowerOffAfterDataOff) { if (DBG) log("Process pending request to turn radio off."); hangupAndPowerOff(); mPendingRadioPowerOffAfterDataOff = false; return true; } return false; } public boolean isPendingRadioPowerOffAfterDataOff() { return mPendingRadioPowerOffAfterDataOff; } private void onCarrierConfigurationChanged(int slotIndex) { Loading
src/java/com/android/internal/telephony/data/DataNetworkController.java +2 −11 Original line number Diff line number Diff line Loading @@ -399,12 +399,6 @@ public class DataNetworkController extends Handler { /** Event counter for WWAN setup data failure within time window to trigger anomaly report. */ private @NonNull SlidingWindowEventCounter mSetupDataCallWwanFailureCounter; /** * {@code true} if {@link #tearDownAllDataNetworks(int)} was invoked and waiting for all * networks torn down. */ private boolean mPendingTearDownAllNetworks = false; /** * The capabilities of the latest released IMS request. To detect back to back release/request * IMS network. Loading Loading @@ -1628,7 +1622,7 @@ public class DataNetworkController extends Handler { } // Check if there are pending tear down all networks request. if (mPendingTearDownAllNetworks) { if (mPhone.getServiceStateTracker().isPendingRadioPowerOffAfterDataOff()) { evaluation.addDataDisallowedReason(DataDisallowedReason.PENDING_TEAR_DOWN_ALL); } Loading Loading @@ -2944,7 +2938,6 @@ public class DataNetworkController extends Handler { mDataNetworkList.remove(dataNetwork); trackSetupDataCallFailure(dataNetwork.getTransport(), cause); if (mAnyDataNetworkExisting && mDataNetworkList.isEmpty()) { mPendingTearDownAllNetworks = false; mAnyDataNetworkExisting = false; mDataNetworkControllerCallbacks.forEach(callback -> callback.invokeFromExecutor( () -> callback.onAnyDataNetworkExistingChanged(mAnyDataNetworkExisting))); Loading Loading @@ -3275,7 +3268,6 @@ public class DataNetworkController extends Handler { if (mAnyDataNetworkExisting && mDataNetworkList.isEmpty()) { log("All data networks disconnected now."); mPendingTearDownAllNetworks = false; mAnyDataNetworkExisting = false; mDataNetworkControllerCallbacks.forEach(callback -> callback.invokeFromExecutor( () -> callback.onAnyDataNetworkExistingChanged(mAnyDataNetworkExisting))); Loading Loading @@ -4009,14 +4001,13 @@ public class DataNetworkController extends Handler { * * @param reason The reason to tear down. */ public void onTearDownAllDataNetworks(@TearDownReason int reason) { private void onTearDownAllDataNetworks(@TearDownReason int reason) { log("onTearDownAllDataNetworks: reason=" + DataNetwork.tearDownReasonToString(reason)); if (mDataNetworkList.isEmpty()) { log("tearDownAllDataNetworks: No pending networks. All disconnected now."); return; } mPendingTearDownAllNetworks = true; for (DataNetwork dataNetwork : mDataNetworkList) { if (!dataNetwork.isDisconnecting()) { tearDownGracefully(dataNetwork, reason); Loading
tests/telephonytests/src/com/android/internal/telephony/data/DataNetworkControllerTest.java +19 −0 Original line number Diff line number Diff line Loading @@ -5395,4 +5395,23 @@ public class DataNetworkControllerTest extends TelephonyTest { verify(mMockedWwanDataServiceManager, never()).deactivateDataCall(anyInt(), eq(DataService.REQUEST_REASON_NORMAL), any(Message.class)); } @Test public void testRadioOffTearDown() throws Exception { testSetupDataNetwork(); doReturn(true).when(mSST).isPendingRadioPowerOffAfterDataOff(); mDataNetworkControllerUT.tearDownAllDataNetworks( DataNetwork.TEAR_DOWN_REASON_AIRPLANE_MODE_ON); processAllMessages(); verifyAllDataDisconnected(); verify(mMockedDataNetworkControllerCallback).onAnyDataNetworkExistingChanged(eq(false)); clearInvocations(mMockedDataNetworkControllerCallback); mDataNetworkControllerUT.addNetworkRequest( createNetworkRequest(NetworkCapabilities.NET_CAPABILITY_INTERNET)); processAllMessages(); verifyAllDataDisconnected(); verify(mMockedDataNetworkControllerCallback, never()).onAnyDataNetworkExistingChanged( anyBoolean()); } }