diff options
3 files changed, 31 insertions, 0 deletions
diff --git a/service/java/com/android/server/wifi/ClientModeImpl.java b/service/java/com/android/server/wifi/ClientModeImpl.java index d6645dfd8..14866c87e 100644 --- a/service/java/com/android/server/wifi/ClientModeImpl.java +++ b/service/java/com/android/server/wifi/ClientModeImpl.java @@ -3515,6 +3515,10 @@ public class ClientModeImpl extends StateMachine { mTemporarilyDisconnectWifi = (message.arg1 == 1); replyToMessage(message, WifiP2pServiceImpl.DISCONNECT_WIFI_RESPONSE); break; + case WifiP2pServiceImpl.SET_MIRACAST_MODE: + if (mVerboseLoggingEnabled) logd("SET_MIRACAST_MODE: " + (int)message.arg1); + mWifiConnectivityManager.saveMiracastMode((int)message.arg1); + break; /* Link configuration (IP address, DNS, ...) changes notified via netlink */ case CMD_UPDATE_LINKPROPERTIES: updateLinkProperties((LinkProperties) message.obj); diff --git a/service/java/com/android/server/wifi/WifiConnectivityManager.java b/service/java/com/android/server/wifi/WifiConnectivityManager.java index 12c64b542..6413f9711 100644 --- a/service/java/com/android/server/wifi/WifiConnectivityManager.java +++ b/service/java/com/android/server/wifi/WifiConnectivityManager.java @@ -23,6 +23,7 @@ import android.annotation.NonNull; import android.app.AlarmManager; import android.content.Context; import android.net.MacAddress; +import android.net.wifi.p2p.WifiP2pManager; import android.net.wifi.ScanResult; import android.net.wifi.SupplicantState; import android.net.wifi.WifiConfiguration; @@ -160,6 +161,7 @@ public class WifiConnectivityManager { private boolean mAutoJoinEnabled = false; // disabled by default, enabled by external triggers private boolean mRunning = false; private boolean mScreenOn = false; + private int mMiracastMode = WifiP2pManager.MIRACAST_DISABLED; private int mWifiState = WIFI_STATE_UNKNOWN; private int mInitialScanState = INITIAL_SCAN_STATE_COMPLETE; private boolean mAutoJoinEnabledExternal = true; // enabled by default @@ -1256,6 +1258,17 @@ public class WifiConnectivityManager { // Start a single scan private void startForcedSingleScan(boolean isFullBandScan, WorkSource workSource) { + // Any scans will impact wifi performance including WFD performance, + // So at least ignore scans triggered internally by ConnectivityManager + // when WFD session is active. We still allow connectivity scans initiated + // by other work source. + if (WIFI_WORK_SOURCE.equals(workSource) && + (mMiracastMode == WifiP2pManager.MIRACAST_SOURCE || + mMiracastMode == WifiP2pManager.MIRACAST_SINK)) { + localLog("Ignore connectivity scan, MiracastMode:" + mMiracastMode); + return; + } + mPnoScanListener.resetLowRssiNetworkRetryDelay(); ScanSettings settings = new ScanSettings(); @@ -1596,6 +1609,15 @@ public class WifiConnectivityManager { } /** + * Save current miracast mode, it will be used to ignore + * connectivity scan during the time when miracast is enabled. + */ + public void saveMiracastMode(int mode) { + localLog("saveMiracastMode: mode=" + mode); + mMiracastMode = mode; + } + + /** * Helper function that converts the WIFI_STATE_XXX constants to string */ private static String stateToString(int state) { diff --git a/service/java/com/android/server/wifi/p2p/WifiP2pServiceImpl.java b/service/java/com/android/server/wifi/p2p/WifiP2pServiceImpl.java index eb2a89c4e..05b00f4d9 100644 --- a/service/java/com/android/server/wifi/p2p/WifiP2pServiceImpl.java +++ b/service/java/com/android/server/wifi/p2p/WifiP2pServiceImpl.java @@ -706,6 +706,11 @@ public class WifiP2pServiceImpl extends IWifiP2pManager.Stub { public void setMiracastMode(int mode) { checkConfigureWifiDisplayPermission(); mP2pStateMachine.sendMessage(SET_MIRACAST_MODE, mode); + if (mWifiChannel != null) { + mWifiChannel.sendMessage(WifiP2pServiceImpl.SET_MIRACAST_MODE, mode); + } else { + Log.e(TAG, "setMiracastMode(): WifiChannel is null"); + } } @Override |