Merge "Immediately tear down VCN network when entering Airplane Mode"

This commit is contained in:
Benedict Wong
2021-12-03 21:26:06 +00:00
committed by Gerrit Code Review
2 changed files with 34 additions and 1 deletions

View File

@@ -77,6 +77,7 @@ import android.os.PowerManager;
import android.os.PowerManager.WakeLock; import android.os.PowerManager.WakeLock;
import android.os.Process; import android.os.Process;
import android.os.SystemClock; import android.os.SystemClock;
import android.provider.Settings;
import android.util.ArraySet; import android.util.ArraySet;
import android.util.Slog; import android.util.Slog;
@@ -788,8 +789,19 @@ public class VcnGatewayConnection extends StateMachine {
// TODO(b/179091925): Move the delayed-message handling to BaseState // TODO(b/179091925): Move the delayed-message handling to BaseState
// If underlying is null, all underlying networks have been lost. Disconnect VCN after a // If underlying is null, all underlying networks have been lost. Disconnect VCN after a
// timeout. // timeout (or immediately if in airplane mode, since the device user has indicated that
// the radios should all be turned off).
if (underlying == null) { if (underlying == null) {
if (mDeps.isAirplaneModeOn(mVcnContext)) {
sendMessageAndAcquireWakeLock(
EVENT_UNDERLYING_NETWORK_CHANGED,
TOKEN_ALL,
new EventUnderlyingNetworkChangedInfo(null));
sendDisconnectRequestedAndAcquireWakelock(
DISCONNECT_REASON_UNDERLYING_NETWORK_LOST, false /* shouldQuit */);
return;
}
setDisconnectRequestAlarm(); setDisconnectRequestAlarm();
} else { } else {
// Received a new Network so any previous alarm is irrelevant - cancel + clear it, // Received a new Network so any previous alarm is irrelevant - cancel + clear it,
@@ -2424,6 +2436,12 @@ public class VcnGatewayConnection extends StateMachine {
validationStatusCallback); validationStatusCallback);
} }
/** Checks if airplane mode is enabled. */
public boolean isAirplaneModeOn(@NonNull VcnContext vcnContext) {
return Settings.Global.getInt(vcnContext.getContext().getContentResolver(),
Settings.Global.AIRPLANE_MODE_ON, 0) != 0;
}
/** Gets the elapsed real time since boot, in millis. */ /** Gets the elapsed real time since boot, in millis. */
public long getElapsedRealTime() { public long getElapsedRealTime() {
return SystemClock.elapsedRealtime(); return SystemClock.elapsedRealtime();

View File

@@ -118,6 +118,8 @@ public class VcnGatewayConnectionConnectedStateTest extends VcnGatewayConnection
@Test @Test
public void testNullNetworkDoesNotTriggerDisconnect() throws Exception { public void testNullNetworkDoesNotTriggerDisconnect() throws Exception {
doReturn(false).when(mDeps).isAirplaneModeOn(any());
mGatewayConnection mGatewayConnection
.getUnderlyingNetworkControllerCallback() .getUnderlyingNetworkControllerCallback()
.onSelectedUnderlyingNetworkChanged(null); .onSelectedUnderlyingNetworkChanged(null);
@@ -128,6 +130,19 @@ public class VcnGatewayConnectionConnectedStateTest extends VcnGatewayConnection
verifyDisconnectRequestAlarmAndGetCallback(false /* expectCanceled */); verifyDisconnectRequestAlarmAndGetCallback(false /* expectCanceled */);
} }
@Test
public void testNullNetworkAirplaneModeDisconnects() throws Exception {
doReturn(true).when(mDeps).isAirplaneModeOn(any());
mGatewayConnection
.getUnderlyingNetworkControllerCallback()
.onSelectedUnderlyingNetworkChanged(null);
mTestLooper.dispatchAll();
assertEquals(mGatewayConnection.mDisconnectingState, mGatewayConnection.getCurrentState());
verify(mIkeSession).kill();
}
@Test @Test
public void testNewNetworkTriggersMigration() throws Exception { public void testNewNetworkTriggersMigration() throws Exception {
mGatewayConnection mGatewayConnection