diff options
Diffstat (limited to 'service/java/com')
5 files changed, 88 insertions, 11 deletions
diff --git a/service/java/com/android/server/wifi/WifiConnectivityManager.java b/service/java/com/android/server/wifi/WifiConnectivityManager.java index 216c27cbb..24215617e 100644 --- a/service/java/com/android/server/wifi/WifiConnectivityManager.java +++ b/service/java/com/android/server/wifi/WifiConnectivityManager.java @@ -23,6 +23,7 @@ import static com.android.server.wifi.WifiStateMachine.WIFI_WORK_SOURCE; import android.app.AlarmManager; import android.content.Context; import android.content.pm.PackageManager; +import android.net.wifi.p2p.WifiP2pManager; import android.net.wifi.ScanResult; import android.net.wifi.SupplicantState; import android.net.wifi.WifiConfiguration; @@ -152,6 +153,7 @@ public class WifiConnectivityManager { private boolean mWifiEnabled = false; private boolean mWifiConnectivityManagerEnabled = true; private boolean mScreenOn = false; + private int mMiracastMode = WifiP2pManager.MIRACAST_DISABLED; private int mWifiState = WIFI_STATE_UNKNOWN; private boolean mUntrustedConnectionAllowed = false; private int mScanRestartCount = 0; @@ -902,6 +904,17 @@ public class WifiConnectivityManager { return; } + // 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(); @@ -1099,6 +1112,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/WifiServiceImpl.java b/service/java/com/android/server/wifi/WifiServiceImpl.java index 6a8e0639b..c38aa1c66 100644 --- a/service/java/com/android/server/wifi/WifiServiceImpl.java +++ b/service/java/com/android/server/wifi/WifiServiceImpl.java @@ -89,6 +89,7 @@ import android.os.UserHandle; import android.os.UserManager; import android.os.WorkSource; import android.provider.Settings; +import android.telephony.TelephonyManager; import android.util.Log; import android.util.MutableInt; import android.util.Slog; @@ -494,6 +495,39 @@ public class WifiServiceImpl extends IWifiManager.Stub { mClientHandler.setWifiLog(log); } + // Return true if it is DUAL SIM and either SIM is active. + private boolean checkDualSimActive() { + TelephonyManager tm = (TelephonyManager) + mContext.getSystemService(Context.TELEPHONY_SERVICE); + + if (tm == null) { + Log.i(TAG, "checkDualSimActive() is false, tm == null"); + return false; + } + + int phoneCount = tm.getPhoneCount(); + if (phoneCount < 2) { + Log.i(TAG, "checkDualSimActive() is false, phoneCount=" + + phoneCount + " slot0State=" + tm.getSimState(0)); + return false; + } + + int slot0State = tm.getSimState(0); + int slot1State = tm.getSimState(1); + if (slot0State != TelephonyManager.SIM_STATE_READY && + slot1State != TelephonyManager.SIM_STATE_READY) { + Log.i(TAG, "checkDualSimActive() is false, slot0State=" + + slot0State + " slot1State=" + slot1State); + return false; + } + + Log.i(TAG, "checkDualSimActive() is true, phoneCount=" + + phoneCount + + " slot0State=" + slot0State + " slot1State=" + slot1State); + + return true; + } + /** * Check if we are ready to start wifi. * @@ -536,6 +570,10 @@ public class WifiServiceImpl extends IWifiManager.Stub { public void onReceive(Context context, Intent intent) { String state = intent.getStringExtra(IccCardConstants.INTENT_KEY_ICC_STATE); if (IccCardConstants.INTENT_VALUE_ICC_ABSENT.equals(state)) { + if (checkDualSimActive()) { + Log.d(TAG, "Not resetting networks as other SIM may active"); + return; + } Log.d(TAG, "resetting networks because SIM was removed"); mWifiStateMachine.resetSimAuthNetworks(false); } else if (IccCardConstants.INTENT_VALUE_ICC_LOADED.equals(state)) { diff --git a/service/java/com/android/server/wifi/WifiStateMachine.java b/service/java/com/android/server/wifi/WifiStateMachine.java index 390a10238..c0f8f2266 100644 --- a/service/java/com/android/server/wifi/WifiStateMachine.java +++ b/service/java/com/android/server/wifi/WifiStateMachine.java @@ -313,6 +313,8 @@ public class WifiStateMachine extends StateMachine { private final NetworkCapabilities mDfltNetworkCapabilities; private SupplicantStateTracker mSupplicantStateTracker; + private int mWifiLinkLayerStatsSupported = 4; // Temporary disable + // Indicates that framework is attempting to roam, set true on CMD_START_ROAM, set false when // wifi connects or fails to connect private boolean mIsAutoRoaming = false; @@ -1249,18 +1251,23 @@ public class WifiStateMachine extends StateMachine { loge("getWifiLinkLayerStats called without an interface"); return null; } + WifiLinkLayerStats stats = null; lastLinkLayerStatsUpdate = mClock.getWallClockMillis(); - WifiLinkLayerStats stats = mWifiNative.getWifiLinkLayerStats(mInterfaceName); - if (stats != null) { - mOnTime = stats.on_time; - mTxTime = stats.tx_time; - mRxTime = stats.rx_time; - mRunningBeaconCount = stats.beacon_rx; - mWifiInfo.updatePacketRates(stats, lastLinkLayerStatsUpdate); - } else { - long mTxPkts = mFacade.getTxPackets(mInterfaceName); - long mRxPkts = mFacade.getRxPackets(mInterfaceName); - mWifiInfo.updatePacketRates(mTxPkts, mRxPkts, lastLinkLayerStatsUpdate); + if (mWifiLinkLayerStatsSupported > 0) { + stats = mWifiNative.getWifiLinkLayerStats(mInterfaceName); + if (stats == null) { + mWifiLinkLayerStatsSupported -= 1; + } else { + mOnTime = stats.on_time; + mTxTime = stats.tx_time; + mRxTime = stats.rx_time; + mRunningBeaconCount = stats.beacon_rx; + mWifiInfo.updatePacketRates(stats, lastLinkLayerStatsUpdate); + } + } else { // LinkLayerStats are broken or unsupported + long mTxPkts = mFacade.getTxPackets(mInterfaceName); + long mRxPkts = mFacade.getRxPackets(mInterfaceName); + mWifiInfo.updatePacketRates(mTxPkts, mRxPkts, lastLinkLayerStatsUpdate); } return stats; } @@ -3433,6 +3440,10 @@ public class WifiStateMachine 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/p2p/WifiP2pServiceImpl.java b/service/java/com/android/server/wifi/p2p/WifiP2pServiceImpl.java index c089c9c09..97815b160 100644 --- a/service/java/com/android/server/wifi/p2p/WifiP2pServiceImpl.java +++ b/service/java/com/android/server/wifi/p2p/WifiP2pServiceImpl.java @@ -585,6 +585,11 @@ public class WifiP2pServiceImpl extends IWifiP2pManager.Stub { enforceConnectivityInternalPermission(); 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 diff --git a/service/java/com/android/server/wifi/scanner/WificondScannerImpl.java b/service/java/com/android/server/wifi/scanner/WificondScannerImpl.java index 41ff9a5ab..68dce534e 100644 --- a/service/java/com/android/server/wifi/scanner/WificondScannerImpl.java +++ b/service/java/com/android/server/wifi/scanner/WificondScannerImpl.java @@ -411,6 +411,7 @@ public class WificondScannerImpl extends WifiScannerImpl implements Handler.Call } private boolean startHwPnoScan(WifiNative.PnoSettings pnoSettings) { + mWifiNative.removeAllNetworks(mIfaceName); return mWifiNative.startPnoScan(mIfaceName, pnoSettings); } |