diff --git a/wifi/services/wifi_standard/wifi_framework/wifi_manage/network_select/wifi_filter_impl.cpp b/wifi/services/wifi_standard/wifi_framework/wifi_manage/network_select/wifi_filter_impl.cpp index 189742814081a547904a128d50a754ff924827f0..91f600ed07d0819664b6c2dd2fb245be12d2db35 100644 --- a/wifi/services/wifi_standard/wifi_framework/wifi_manage/network_select/wifi_filter_impl.cpp +++ b/wifi/services/wifi_standard/wifi_framework/wifi_manage/network_select/wifi_filter_impl.cpp @@ -288,7 +288,7 @@ bool PoorPortalWifiFilter::Filter(NetworkCandidate &networkCandidate) if (networkCandidate.wifiDeviceConfig.isPortal && networkCandidate.wifiDeviceConfig.noInternetAccess && !NetworkStatusHistoryManager::IsAllowRecoveryByHistory( - networkCandidate.wifiDeviceConfig.networkStatusHistory)) { + networkCandidate.wifiDeviceConfig.networkStatusHistory) && !WifiConfigCenter::GetInstance().IsWlanPage()) { networkCandidate.filtedReason[filterName].insert({FiltedReason::PORTAL_NETWORK, FiltedReason::NO_INTERNET, FiltedReason::UNRECOVERABLE_NETWORK}); return false; @@ -331,7 +331,7 @@ bool PortalWifiFilter::Filter(NetworkCandidate &networkCandidate) if (networkCandidate.wifiDeviceConfig.isPortal && networkCandidate.wifiDeviceConfig.noInternetAccess && !NetworkStatusHistoryManager::IsAllowRecoveryByHistory( - networkCandidate.wifiDeviceConfig.networkStatusHistory)) { + networkCandidate.wifiDeviceConfig.networkStatusHistory) && !WifiConfigCenter::GetInstance().IsWlanPage()) { networkCandidate.filtedReason[filterName].insert({FiltedReason::PORTAL_NETWORK, FiltedReason::NO_INTERNET, FiltedReason::UNRECOVERABLE_NETWORK}); return false; diff --git a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_sub_manage/wifi_event_subscriber_manager.cpp b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_sub_manage/wifi_event_subscriber_manager.cpp index f1e62fa0783a4cdfbe0ec81bb2b68d0c86d07859..563c700e3f21423f2e0d2557b2b4e400aa17c449 100644 --- a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_sub_manage/wifi_event_subscriber_manager.cpp +++ b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_sub_manage/wifi_event_subscriber_manager.cpp @@ -1367,13 +1367,17 @@ SettingsEnterSubscriber::SettingsEnterSubscriber( void SettingsEnterSubscriber::OnReceiveEvent(const EventFwk::CommonEventData &eventData) { const auto &action = eventData.GetWant().GetAction(); - WIFI_LOGI("SettingsEnterSubscriber OnReceiveEvent: %{public}s", action.c_str()); + bool isSettingsEnter = eventData.GetWant().GetBoolParam(WLAN_PAGE_ENTER, false); + WIFI_LOGI("SettingsEnterSubscriber OnReceiveEvent: %{public}s, isSettingsEnter : %{public}d", + action.c_str(), isSettingsEnter); if (action == ENTER_SETTINGS) { - bool isSettingsEnter = eventData.GetWant().GetBoolParam(WLAN_PAGE_ENTER, false); - BlockConnectService::GetInstance().OnReceiveSettingsEnterEvent(isSettingsEnter); - IEnhanceService *pEnhanceService = WifiServiceManager::GetInstance().GetEnhanceServiceInst(); - if (pEnhanceService != nullptr) { - pEnhanceService->OnSettingsWlanEnterReceive(); + WifiConfigCenter::GetInstance().SetWlanPage(isSettingsEnter); + if (isSettingsEnter) { + BlockConnectService::GetInstance().OnReceiveSettingsEnterEvent(isSettingsEnter); + IEnhanceService *pEnhanceService = WifiServiceManager::GetInstance().GetEnhanceServiceInst(); + if (pEnhanceService != nullptr) { + pEnhanceService->OnSettingsWlanEnterReceive(); + } } } } diff --git a/wifi/services/wifi_standard/wifi_framework/wifi_toolkit/config/wifi_config_center.cpp b/wifi/services/wifi_standard/wifi_framework/wifi_toolkit/config/wifi_config_center.cpp index 5128ea9790f85e666200a8d37522b416bef94899..bf9cd3c44dc038782c0028e4362040d90c6b1ebe 100644 --- a/wifi/services/wifi_standard/wifi_framework/wifi_toolkit/config/wifi_config_center.cpp +++ b/wifi/services/wifi_standard/wifi_framework/wifi_toolkit/config/wifi_config_center.cpp @@ -1049,6 +1049,16 @@ int WifiConfigCenter::GetScreenState() const return mScreenState.load(); } +void WifiConfigCenter::SetWlanPage(bool isWlanPage) +{ + isWlanPage_.store(isWlanPage); +} + +int WifiConfigCenter::IsWlanPage() const +{ + return isWlanPage_.load(); +} + void WifiConfigCenter::SetThermalLevel(const int &level) { mThermalLevel = level; diff --git a/wifi/services/wifi_standard/wifi_framework/wifi_toolkit/config/wifi_config_center.h b/wifi/services/wifi_standard/wifi_framework/wifi_toolkit/config/wifi_config_center.h index 35c78c73a3e6e371ba7a54addfb7679aa1846922..80302c971b011de227211400d11a453392396198 100644 --- a/wifi/services/wifi_standard/wifi_framework/wifi_toolkit/config/wifi_config_center.h +++ b/wifi/services/wifi_standard/wifi_framework/wifi_toolkit/config/wifi_config_center.h @@ -281,6 +281,10 @@ public: int GetScreenState() const; + void SetWlanPage(bool isWlanPage); + + int IsWlanPage() const; + void SetThermalLevel(const int &level); int GetThermalLevel() const; @@ -478,6 +482,7 @@ private: // COMMON std::atomic mIsSupportCoex {false}; std::atomic mScreenState {MODE_STATE_DEFAULT}; + std::atomic isWlanPage_{false}; std::atomic mThermalLevel {static_cast(ThermalLevel::NORMAL)}; std::atomic mPowerIdelState {MODE_STATE_CLOSE}; std::atomic mGnssFixState {MODE_STATE_CLOSE}; diff --git a/wifi/test/wifi_standard/wifi_base/mock_wifi_settings.h b/wifi/test/wifi_standard/wifi_base/mock_wifi_settings.h index 8fd25d008ee43be73237a83e0ff4a905e7fdbfc2..aabca39e16228a816be1e7dfb281b5daa55b7e8f 100644 --- a/wifi/test/wifi_standard/wifi_base/mock_wifi_settings.h +++ b/wifi/test/wifi_standard/wifi_base/mock_wifi_settings.h @@ -120,6 +120,8 @@ public: virtual int GetP2pInfo(WifiP2pLinkedInfo &linkedInfo) = 0; virtual void SetWifiToggledState(int state) = 0; virtual int GetScreenState() const = 0; + virtual void SetWlanPage(bool isWlanPage) = 0; + virtual bool IsWlanPage() const = 0; virtual int SetDeviceRandomizedMacSuccessEver(int networkId) = 0; virtual bool StoreWifiMacAddrPairInfo(WifiMacAddrInfoType type, const std::string &realMacAddr, const std::string &randomAddr) = 0; @@ -304,6 +306,8 @@ public: MOCK_METHOD1(GetP2pInfo, int(WifiP2pLinkedInfo &linkedInfo)); MOCK_METHOD1(SetWifiToggledState, void(int state)); MOCK_CONST_METHOD0(GetScreenState, int()); + MOCK_METHOD1(SetWlanPage, void(bool isWlanPage)); + MOCK_CONST_METHOD0(IsWlanPage, bool()); MOCK_METHOD1(SetDeviceRandomizedMacSuccessEver, int(int networkId)); MOCK_METHOD1(SetValidChannels, int(const ChannelsTable &channelsInfo)); MOCK_METHOD1(GetPackageInfoMap, int(std::map> &filterMap)); diff --git a/wifi/test/wifi_standard/wifi_framework/wifi_manage/wifi_sta/wifi_filter_impl_test.cpp b/wifi/test/wifi_standard/wifi_framework/wifi_manage/wifi_sta/wifi_filter_impl_test.cpp index cc6a5ff5a494c3b48ba000cdd275308c141a3bb1..016bd8c591e305e28224356547eab7c447fd7337 100644 --- a/wifi/test/wifi_standard/wifi_framework/wifi_manage/wifi_sta/wifi_filter_impl_test.cpp +++ b/wifi/test/wifi_standard/wifi_framework/wifi_manage/wifi_sta/wifi_filter_impl_test.cpp @@ -17,6 +17,7 @@ #include "wifi_filter_impl.h" #include "mock_wifi_settings.h" #include "network_selection_utils.h" +#include "mock_wifi_config_center.h" using ::testing::_; using ::testing::Return; @@ -445,6 +446,37 @@ HWTEST_F(WifiFilterImplTest, PoorPortalWifiFilter5gReturnFalse, TestSize.Level1) EXPECT_FALSE(poorPortalWifiFilter->DoFilter(networkCandidate5)); } +HWTEST_F(WifiFilterImplTest, PoorPortalWifiFilterIsWlanPageReturnTrue, TestSize.Level1) { + InterScanInfo scanInfo4; + scanInfo4.ssid = "x"; + scanInfo4.rssi = -50; + scanInfo4.band = 2; + scanInfo4.bssid = "11:11:11:11:11:22"; + NetworkSelection::NetworkCandidate networkCandidate4(scanInfo4); + networkCandidate4.wifiDeviceConfig.isPortal = 1; + networkCandidate4.wifiDeviceConfig.networkId = 1; + networkCandidate4.wifiDeviceConfig.noInternetAccess = 0; + EXPECT_CALL(WifiSettings::GetInstance(), GetSignalLevel(_, _, _)).WillRepeatedly(Return(4)); + EXPECT_CALL(WifiConfigCenter::GetInstance(), IsWlanPage()).WillRepeatedly(Return(true)); + + auto poorportalWifiFilter = std::make_shared(); + EXPECT_TRUE(poorportalWifiFilter->DoFilter(networkCandidate4)); +} + +HWTEST_F(WifiFilterImplTest, PortalWifiFilterIsWlanPageReturnTrue, TestSize.Level1) { + InterScanInfo scanInfo3; + scanInfo3.ssid = "x"; + scanInfo3.bssid = "11:11:11:11:11:22"; + NetworkSelection::NetworkCandidate networkCandidate3(scanInfo3); + networkCandidate3.wifiDeviceConfig.isPortal = 1; + networkCandidate3.wifiDeviceConfig.networkId = 1; + networkCandidate3.wifiDeviceConfig.noInternetAccess = 0; + EXPECT_CALL(WifiConfigCenter::GetInstance(), IsWlanPage()).WillRepeatedly(Return(true)); + + auto portalWifiFilter = std::make_shared(); + EXPECT_TRUE(portalWifiFilter->DoFilter(networkCandidate3)); +} + HWTEST_F(WifiFilterImplTest, PortalWifiFilterReturnTrue, TestSize.Level1) { InterScanInfo scanInfo3; scanInfo3.ssid = "x"; @@ -475,6 +507,7 @@ HWTEST_F(WifiFilterImplTest, PortalWifiFilterReturnFalse, TestSize.Level1) { networkCandidate2.wifiDeviceConfig.isPortal = 0; networkCandidate2.wifiDeviceConfig.networkId = 1; networkCandidate2.wifiDeviceConfig.noInternetAccess = 0; + EXPECT_CALL(WifiConfigCenter::GetInstance(), IsWlanPage()).WillRepeatedly(Return(false)); auto portalWifiFilter = std::make_shared(); EXPECT_FALSE(portalWifiFilter->DoFilter(networkCandidate1)); diff --git a/wifi/test/wifi_standard/wifi_framework/wifi_toolkit/unittest/Mock/mock_wifi_config_center.h b/wifi/test/wifi_standard/wifi_framework/wifi_toolkit/unittest/Mock/mock_wifi_config_center.h index e55dce910a72b77e486c0ee6918918c25d2c1617..4a83a6f1eb70a67e1bcd1e84d9f3eeea8a4e996e 100644 --- a/wifi/test/wifi_standard/wifi_framework/wifi_toolkit/unittest/Mock/mock_wifi_config_center.h +++ b/wifi/test/wifi_standard/wifi_framework/wifi_toolkit/unittest/Mock/mock_wifi_config_center.h @@ -103,6 +103,8 @@ public: virtual bool GetCoexSupport() const = 0; virtual void SetScreenState(const int &state) = 0; virtual int GetScreenState() const = 0; + virtual void SetWlanPage(bool isWlanPage) = 0; + virtual bool IsWlanPage() const = 0; virtual void SetThermalLevel(const int &level) = 0; virtual int GetThermalLevel() const = 0; virtual bool SetWifiStateOnAirplaneChanged(const int &state); @@ -265,6 +267,8 @@ public: MOCK_CONST_METHOD0(GetCoexSupport, bool()); MOCK_METHOD1(SetScreenState, void(const int &state)); MOCK_CONST_METHOD0(GetScreenState, int()); + MOCK_METHOD1(SetWlanPage, void(bool isWlanPage)); + MOCK_CONST_METHOD0(IsWlanPage, bool()); MOCK_METHOD1(SetThermalLevel, void(const int &level)); MOCK_CONST_METHOD0(GetThermalLevel, int()); MOCK_METHOD1(SetWifiStateOnAirplaneChanged, bool(const int &state));