diff options
author | android-build-team Robot <android-build-team-robot@google.com> | 2020-07-07 01:06:18 +0000 |
---|---|---|
committer | android-build-team Robot <android-build-team-robot@google.com> | 2020-07-07 01:06:18 +0000 |
commit | aa75ddf825e9f86bbb09abba16be47756b05ee34 (patch) | |
tree | 237244fd61326457c0eda0644925913a513fe16e | |
parent | 5bef4c4830e9913090291354df9ef5e32e8a35e0 (diff) | |
parent | 4d67769d0680687e696186f0bb456ee08b53a2cd (diff) | |
download | wifi-aa75ddf825e9f86bbb09abba16be47756b05ee34.tar.gz |
Snap for 6657150 from 4d67769d0680687e696186f0bb456ee08b53a2cd to rvc-release
Change-Id: I5e38a512f4e7c01554afa7e6aaf63c7c62369e23
3 files changed, 49 insertions, 4 deletions
diff --git a/service/java/com/android/server/wifi/ActiveModeWarden.java b/service/java/com/android/server/wifi/ActiveModeWarden.java index e0a0a3d29..cf54e328b 100644 --- a/service/java/com/android/server/wifi/ActiveModeWarden.java +++ b/service/java/com/android/server/wifi/ActiveModeWarden.java @@ -850,6 +850,9 @@ public class ActiveModeWarden { } class EnabledState extends BaseState { + + private boolean mIsDisablingDueToAirplaneMode; + @Override public void enter() { log("EnabledState.enter()"); @@ -857,6 +860,7 @@ public class ActiveModeWarden { if (!hasAnyModeManager()) { Log.e(TAG, "Entered EnabledState, but no active mode managers"); } + mIsDisablingDueToAirplaneMode = false; } @Override @@ -894,11 +898,15 @@ public class ActiveModeWarden { case CMD_AIRPLANE_TOGGLED: // airplane mode toggled on is handled in the default state if (mSettingsStore.isAirplaneModeOn()) { + mIsDisablingDueToAirplaneMode = true; return NOT_HANDLED; } else { - if (hasAnyModeManagerStopping()) { - // previous airplane mode toggle on is being processed, defer the + if (mIsDisablingDueToAirplaneMode) { + // Previous airplane mode toggle on is being processed, defer the // message toggle off until previous processing is completed. + // Once previous airplane mode toggle is complete, we should + // transition to DisabledState. There, we will process the deferred + // airplane mode toggle message to disable airplane mode. deferMessage(msg); } else { // when airplane mode is toggled off, but wifi is on, we can keep it diff --git a/service/java/com/android/server/wifi/WifiDiagnostics.java b/service/java/com/android/server/wifi/WifiDiagnostics.java index db9b075a4..6fc75c6ea 100644 --- a/service/java/com/android/server/wifi/WifiDiagnostics.java +++ b/service/java/com/android/server/wifi/WifiDiagnostics.java @@ -110,10 +110,10 @@ class WifiDiagnostics extends BaseWifiDiagnostics { public static final long MIN_DUMP_TIME_WINDOW_MILLIS = 10 * 60 * 1000; // 10 mins // Timeout for logcat process termination - private static final long LOGCAT_PROC_TIMEOUT_MILLIS = 500; + private static final long LOGCAT_PROC_TIMEOUT_MILLIS = 50; // Timeout for logcat read from input/error stream each. @VisibleForTesting - public static final long LOGCAT_READ_TIMEOUT_MILLIS = 500; + public static final long LOGCAT_READ_TIMEOUT_MILLIS = 50; private long mLastBugReportTime; diff --git a/tests/wifitests/src/com/android/server/wifi/ActiveModeWardenTest.java b/tests/wifitests/src/com/android/server/wifi/ActiveModeWardenTest.java index ceaf76dc8..8294bdb04 100644 --- a/tests/wifitests/src/com/android/server/wifi/ActiveModeWardenTest.java +++ b/tests/wifitests/src/com/android/server/wifi/ActiveModeWardenTest.java @@ -2240,6 +2240,43 @@ public class ActiveModeWardenTest extends WifiBaseTest { } @Test + public void airplaneModeToggleOffIsDeferredWhileProcessingToggleOnWithOneModeManager2() + throws Exception { + enterClientModeActiveState(); + assertInEnabledState(); + + // APM toggle on + assertWifiShutDown(() -> { + when(mSettingsStore.isAirplaneModeOn()).thenReturn(true); + mActiveModeWarden.airplaneModeToggled(); + mLooper.dispatchAll(); + }); + + + // APM toggle off before the stop is complete. + assertInEnabledState(); + when(mClientModeManager.isStopping()).thenReturn(true); + when(mSettingsStore.isAirplaneModeOn()).thenReturn(false); + mActiveModeWarden.airplaneModeToggled(); + // This test is identical to + // airplaneModeToggleOffIsDeferredWhileProcessingToggleOnWithOneModeManager, except the + // dispatchAll() here is removed. There could be a race between airplaneModeToggled and + // mClientListener.onStopped(). See b/160105640#comment5. + + mClientListener.onStopped(); + mLooper.dispatchAll(); + + verify(mClientModeManager, times(2)).start(); + verify(mClientModeManager, times(2)).setRole(ROLE_CLIENT_PRIMARY); + + mClientListener.onStarted(); + mLooper.dispatchAll(); + + // We should be back to enabled state. + assertInEnabledState(); + } + + @Test public void airplaneModeToggleOffIsDeferredWhileProcessingToggleOnWithTwoModeManager() throws Exception { enterClientModeActiveState(); |