Merge "Immediately tear down VCN network when entering Airplane Mode" am: 4bfa0ebc53 am: 65fb393b79

Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/1908637

Change-Id: Ib76348295605ddb5db016c3e87863d6341d43177
This commit is contained in:
Benedict Wong
2021-12-03 22:20:41 +00:00
committed by Automerger Merge Worker
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.Process;
import android.os.SystemClock;
import android.provider.Settings;
import android.util.ArraySet;
import android.util.Slog;
@@ -788,8 +789,19 @@ public class VcnGatewayConnection extends StateMachine {
// TODO(b/179091925): Move the delayed-message handling to BaseState
// 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 (mDeps.isAirplaneModeOn(mVcnContext)) {
sendMessageAndAcquireWakeLock(
EVENT_UNDERLYING_NETWORK_CHANGED,
TOKEN_ALL,
new EventUnderlyingNetworkChangedInfo(null));
sendDisconnectRequestedAndAcquireWakelock(
DISCONNECT_REASON_UNDERLYING_NETWORK_LOST, false /* shouldQuit */);
return;
}
setDisconnectRequestAlarm();
} else {
// Received a new Network so any previous alarm is irrelevant - cancel + clear it,
@@ -2424,6 +2436,12 @@ public class VcnGatewayConnection extends StateMachine {
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. */
public long getElapsedRealTime() {
return SystemClock.elapsedRealtime();

View File

@@ -118,6 +118,8 @@ public class VcnGatewayConnectionConnectedStateTest extends VcnGatewayConnection
@Test
public void testNullNetworkDoesNotTriggerDisconnect() throws Exception {
doReturn(false).when(mDeps).isAirplaneModeOn(any());
mGatewayConnection
.getUnderlyingNetworkControllerCallback()
.onSelectedUnderlyingNetworkChanged(null);
@@ -128,6 +130,19 @@ public class VcnGatewayConnectionConnectedStateTest extends VcnGatewayConnection
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
public void testNewNetworkTriggersMigration() throws Exception {
mGatewayConnection