summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorandroid-build-team Robot <android-build-team-robot@google.com>2020-07-07 01:06:18 +0000
committerandroid-build-team Robot <android-build-team-robot@google.com>2020-07-07 01:06:18 +0000
commitaa75ddf825e9f86bbb09abba16be47756b05ee34 (patch)
tree237244fd61326457c0eda0644925913a513fe16e
parent5bef4c4830e9913090291354df9ef5e32e8a35e0 (diff)
parent4d67769d0680687e696186f0bb456ee08b53a2cd (diff)
downloadwifi-aa75ddf825e9f86bbb09abba16be47756b05ee34.tar.gz
Snap for 6657150 from 4d67769d0680687e696186f0bb456ee08b53a2cd to rvc-release
Change-Id: I5e38a512f4e7c01554afa7e6aaf63c7c62369e23
-rw-r--r--service/java/com/android/server/wifi/ActiveModeWarden.java12
-rw-r--r--service/java/com/android/server/wifi/WifiDiagnostics.java4
-rw-r--r--tests/wifitests/src/com/android/server/wifi/ActiveModeWardenTest.java37
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();