mirror of
https://gitee.com/openharmony/communication_wifi.git
synced 2024-11-27 09:12:20 +00:00
修改网络探测检视意见
Signed-off-by: huxiaomin <huxiaomin2@huawei.com>
This commit is contained in:
commit
4246a62fec
@ -63,6 +63,9 @@ napi_value Get5GHzChannelList(napi_env env, napi_callback_info info);
|
||||
napi_value SetScanOnlyAvailable(napi_env env, napi_callback_info info);
|
||||
napi_value GetScanOnlyAvailable(napi_env env, napi_callback_info info);
|
||||
napi_value StartPortalCertification(napi_env env, napi_callback_info info);
|
||||
napi_value GetWifiProtect(napi_env env, napi_callback_info info);
|
||||
napi_value PutWifiProtect(napi_env env, napi_callback_info info);
|
||||
|
||||
class ScanInfoAsyncContext : public AsyncContext {
|
||||
public:
|
||||
std::vector<WifiScanInfo> vecScanInfos;
|
||||
|
@ -118,11 +118,22 @@ class EventRegister {
|
||||
public:
|
||||
EventRegister()
|
||||
{
|
||||
mSaStatusListener = new WifiNapiAbilityStatusChange();
|
||||
mSaStatusListener->Init(WIFI_DEVICE_ABILITY_ID);
|
||||
mSaStatusListener->Init(WIFI_SCAN_ABILITY_ID);
|
||||
mSaStatusListener->Init(WIFI_HOTSPOT_ABILITY_ID);
|
||||
mSaStatusListener->Init(WIFI_P2P_ABILITY_ID);
|
||||
int32_t ret;
|
||||
auto samgrProxy = OHOS::SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();
|
||||
if (samgrProxy == nullptr) {
|
||||
WIFI_LOGI("samgrProxy is nullptr!");
|
||||
return;
|
||||
}
|
||||
mSaStatusListener = new OHOS::Wifi::WifiNapiAbilityStatusChange();
|
||||
if (mSaStatusListener == nullptr) {
|
||||
WIFI_LOGI("mSaStatusListener is nullptr!");
|
||||
return;
|
||||
}
|
||||
ret = samgrProxy->SubscribeSystemAbility((int32_t)WIFI_DEVICE_ABILITY_ID, mSaStatusListener);
|
||||
samgrProxy->SubscribeSystemAbility((int32_t)WIFI_SCAN_ABILITY_ID, mSaStatusListener);
|
||||
samgrProxy->SubscribeSystemAbility((int32_t)WIFI_HOTSPOT_ABILITY_ID, mSaStatusListener);
|
||||
samgrProxy->SubscribeSystemAbility((int32_t)WIFI_P2P_ABILITY_ID, mSaStatusListener);
|
||||
WIFI_LOGI("EventRegister, SubscribeSystemAbility return ret:%{public}d!", ret);
|
||||
}
|
||||
~EventRegister() {
|
||||
}
|
||||
@ -141,7 +152,7 @@ private:
|
||||
bool IsEventSupport(const std::string& type);
|
||||
void DeleteRegisterObj(const napi_env& env, std::vector<RegObj>& vecRegObjs, napi_value& handler);
|
||||
void DeleteAllRegisterObj(const napi_env& env, std::vector<RegObj>& vecRegObjs);
|
||||
WifiNapiAbilityStatusChange* mSaStatusListener;
|
||||
OHOS::sptr<OHOS::ISystemAbilityStatusChange> mSaStatusListener = nullptr;
|
||||
};
|
||||
|
||||
napi_value On(napi_env env, napi_callback_info cbinfo);
|
||||
|
@ -1458,5 +1458,37 @@ NO_SANITIZE("cfi") napi_value GetScanOnlyAvailable(napi_env env, napi_callback_i
|
||||
return result;
|
||||
}
|
||||
|
||||
NO_SANITIZE("cfi") napi_value GetWifiProtect(napi_env env, napi_callback_info info)
|
||||
{
|
||||
TRACE_FUNC_CALL;
|
||||
WIFI_NAPI_ASSERT(env, wifiDevicePtr != nullptr, WIFI_OPT_FAILED, SYSCAP_WIFI_STA);
|
||||
|
||||
size_t argc = 1;
|
||||
napi_value argv[1];
|
||||
napi_value thisVar;
|
||||
NAPI_CALL(env, napi_get_cb_info(env, info, &argc, argv, &thisVar, NULL));
|
||||
WIFI_NAPI_ASSERT(env, argc == 1, WIFI_OPT_INVALID_PARAM, SYSCAP_WIFI_STA);
|
||||
|
||||
napi_valuetype valueType;
|
||||
napi_typeof(env, argv[0], &valueType);
|
||||
WIFI_NAPI_ASSERT(env, valueType == napi_number, WIFI_OPT_INVALID_PARAM, SYSCAP_WIFI_STA);
|
||||
|
||||
int protectMode = 0;
|
||||
napi_get_value_int32(env, argv[0], &protectMode);
|
||||
WIFI_NAPI_ASSERT(env, protectMode >= (int)WifiProtectMode::WIFI_PROTECT_FULL &&
|
||||
protectMode <= (int)WifiProtectMode::WIFI_PROTECT_NO_HELD, WIFI_OPT_INVALID_PARAM, SYSCAP_WIFI_STA);
|
||||
|
||||
ErrCode ret = wifiDevicePtr->GetWifiProtect(static_cast<WifiProtectMode>(protectMode));
|
||||
WIFI_NAPI_RETURN(env, ret == WIFI_OPT_SUCCESS, ret, SYSCAP_WIFI_STA);
|
||||
}
|
||||
|
||||
NO_SANITIZE("cfi") napi_value PutWifiProtect(napi_env env, napi_callback_info info)
|
||||
{
|
||||
TRACE_FUNC_CALL;
|
||||
WIFI_NAPI_ASSERT(env, wifiDevicePtr != nullptr, WIFI_OPT_FAILED, SYSCAP_WIFI_STA);
|
||||
ErrCode ret = wifiDevicePtr->PutWifiProtect();
|
||||
WIFI_NAPI_RETURN(env, ret == WIFI_OPT_SUCCESS, ret, SYSCAP_WIFI_STA);
|
||||
}
|
||||
|
||||
} // namespace Wifi
|
||||
} // namespace OHOS
|
||||
|
@ -371,6 +371,8 @@ static napi_value Init(napi_env env, napi_value exports) {
|
||||
DECLARE_NAPI_FUNCTION("on", On),
|
||||
DECLARE_NAPI_FUNCTION("off", Off),
|
||||
DECLARE_NAPI_FUNCTION("startPortalCertification", StartPortalCertification),
|
||||
DECLARE_NAPI_FUNCTION("getWifiProtect", GetWifiProtect),
|
||||
DECLARE_NAPI_FUNCTION("putWifiProtect", PutWifiProtect),
|
||||
};
|
||||
|
||||
NAPI_CALL(env, napi_define_properties(env, exports, sizeof(desc) / sizeof(napi_property_descriptor), desc));
|
||||
|
@ -93,6 +93,7 @@ if (defined(ohos_lite)) {
|
||||
"$WIFI_ROOT_DIR/services/wifi_standard/wifi_framework/wifi_toolkit/include",
|
||||
"$WIFI_ROOT_DIR/interfaces/innerkits",
|
||||
"$WIFI_ROOT_DIR/utils/inc",
|
||||
"//foundation/bundlemanager/bundle_framework/interfaces/inner_api/appexecfwk_core/include/bundlemgr",
|
||||
]
|
||||
}
|
||||
|
||||
|
@ -21,6 +21,7 @@
|
||||
#include "wifi_logger.h"
|
||||
#include "wifi_c_utils.h"
|
||||
#include "wifi_common_util.h"
|
||||
#include "../../../interfaces/inner_api/wifi_msg.h"
|
||||
|
||||
DEFINE_WIFILOG_LABEL("WifiCDevice");
|
||||
|
||||
@ -513,6 +514,12 @@ NO_SANITIZE("cfi") WifiErrorCode Get5GHzChannelList(int *result, int *size)
|
||||
}
|
||||
return GetCErrorCode(ret);
|
||||
}
|
||||
#ifndef OHOS_ARCH_LITE
|
||||
NO_SANITIZE("cfi") WifiErrorCode GetWifiProtect(OHOS::Wifi::WifiProtectMode mode)
|
||||
{
|
||||
CHECK_PTR_RETURN(wifiDevicePtr, ERROR_WIFI_NOT_AVAILABLE);
|
||||
return GetCErrorCode(wifiDevicePtr->GetWifiProtect(mode));
|
||||
}
|
||||
|
||||
NO_SANITIZE("cfi") WifiErrorCode StartPortalCertification(int *result, int *size)
|
||||
{
|
||||
@ -527,3 +534,9 @@ NO_SANITIZE("cfi") WifiErrorCode StartPortalCertification(int *result, int *size
|
||||
return GetCErrorCode(ret);
|
||||
}
|
||||
|
||||
NO_SANITIZE("cfi") WifiErrorCode PutWifiProtect()
|
||||
{
|
||||
CHECK_PTR_RETURN(wifiDevicePtr, ERROR_WIFI_NOT_AVAILABLE);
|
||||
return GetCErrorCode(wifiDevicePtr->PutWifiProtect());
|
||||
}
|
||||
#endif
|
||||
|
@ -258,11 +258,22 @@ WifiErrorCode EventManager::RegisterP2PEvent(const std::vector<std::string> &eve
|
||||
NO_SANITIZE("cfi") WifiErrorCode EventManager::RegisterWifiEvents()
|
||||
{
|
||||
if (mSaStatusListener == nullptr) {
|
||||
int32_t ret;
|
||||
auto samgrProxy = OHOS::SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();
|
||||
if (samgrProxy == nullptr) {
|
||||
WIFI_LOGI("samgrProxy is nullptr!");
|
||||
return ERROR_WIFI_UNKNOWN;
|
||||
}
|
||||
mSaStatusListener = new OHOS::Wifi::WifiAbilityStatusChange();
|
||||
mSaStatusListener->Init(WIFI_DEVICE_ABILITY_ID);
|
||||
mSaStatusListener->Init(WIFI_SCAN_ABILITY_ID);
|
||||
mSaStatusListener->Init(WIFI_HOTSPOT_ABILITY_ID);
|
||||
mSaStatusListener->Init(WIFI_P2P_ABILITY_ID);
|
||||
if (mSaStatusListener == nullptr) {
|
||||
WIFI_LOGI("mSaStatusListener is nullptr!");
|
||||
return ERROR_WIFI_UNKNOWN;
|
||||
}
|
||||
ret = samgrProxy->SubscribeSystemAbility((int32_t)WIFI_DEVICE_ABILITY_ID, mSaStatusListener);
|
||||
samgrProxy->SubscribeSystemAbility((int32_t)WIFI_SCAN_ABILITY_ID, mSaStatusListener);
|
||||
samgrProxy->SubscribeSystemAbility((int32_t)WIFI_HOTSPOT_ABILITY_ID, mSaStatusListener);
|
||||
samgrProxy->SubscribeSystemAbility((int32_t)WIFI_P2P_ABILITY_ID, mSaStatusListener);
|
||||
WIFI_LOGI("SubscribeSystemAbility return ret:%{public}d!", ret);
|
||||
}
|
||||
|
||||
WifiErrorCode ret = WIFI_SUCCESS;
|
||||
@ -327,12 +338,23 @@ EventManager& EventManager::GetInstance()
|
||||
void EventManager::Init()
|
||||
{
|
||||
if (mSaStatusListener == nullptr) {
|
||||
int32_t ret;
|
||||
WIFI_LOGI("EventManager Listener Init!");
|
||||
auto samgrProxy = OHOS::SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();
|
||||
if (samgrProxy == nullptr) {
|
||||
WIFI_LOGI("samgrProxy is nullptr!");
|
||||
return;
|
||||
}
|
||||
mSaStatusListener = new OHOS::Wifi::WifiAbilityStatusChange();
|
||||
mSaStatusListener->Init(WIFI_DEVICE_ABILITY_ID);
|
||||
mSaStatusListener->Init(WIFI_SCAN_ABILITY_ID);
|
||||
mSaStatusListener->Init(WIFI_HOTSPOT_ABILITY_ID);
|
||||
mSaStatusListener->Init(WIFI_P2P_ABILITY_ID);
|
||||
if (mSaStatusListener == nullptr) {
|
||||
WIFI_LOGI("mSaStatusListener is nullptr!");
|
||||
return;
|
||||
}
|
||||
ret = samgrProxy->SubscribeSystemAbility((int32_t)WIFI_DEVICE_ABILITY_ID, mSaStatusListener);
|
||||
samgrProxy->SubscribeSystemAbility((int32_t)WIFI_SCAN_ABILITY_ID, mSaStatusListener);
|
||||
samgrProxy->SubscribeSystemAbility((int32_t)WIFI_HOTSPOT_ABILITY_ID, mSaStatusListener);
|
||||
samgrProxy->SubscribeSystemAbility((int32_t)WIFI_P2P_ABILITY_ID, mSaStatusListener);
|
||||
WIFI_LOGI("Init, SubscribeSystemAbility return ret:%{public}d!", ret);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
@ -24,6 +24,7 @@
|
||||
#include "wifi_device_proxy.h"
|
||||
#include "wifi_device_mgr_proxy.h"
|
||||
#include "wifi_logger.h"
|
||||
#include "wifi_common_util.h"
|
||||
|
||||
DEFINE_WIFILOG_LABEL("WifiDeviceImpl");
|
||||
|
||||
@ -152,7 +153,19 @@ ErrCode WifiDeviceImpl::PutWifiProtectRef(const std::string &protectName)
|
||||
RETURN_IF_FAIL(GetWifiDeviceProxy());
|
||||
return client_->PutWifiProtectRef(protectName);
|
||||
}
|
||||
#ifndef OHOS_ARCH_LITE
|
||||
ErrCode WifiDeviceImpl::GetWifiProtect(const WifiProtectMode &protectMode)
|
||||
{
|
||||
std::string bundleName = GetBundleName();
|
||||
return GetWifiProtectRef(protectMode, bundleName);
|
||||
}
|
||||
|
||||
ErrCode WifiDeviceImpl::PutWifiProtect()
|
||||
{
|
||||
std::string bundleName = GetBundleName();
|
||||
return PutWifiProtectRef(bundleName);
|
||||
}
|
||||
#endif
|
||||
ErrCode WifiDeviceImpl::RemoveCandidateConfig(int networkId)
|
||||
{
|
||||
std::lock_guard<std::mutex> lock(mutex_);
|
||||
|
@ -71,7 +71,22 @@ public:
|
||||
* @return ErrCode - operation result
|
||||
*/
|
||||
ErrCode PutWifiProtectRef(const std::string &protectName) override;
|
||||
#ifndef OHOS_ARCH_LITE
|
||||
/**
|
||||
* @Description Acquire the Wi-Fi protect mode.
|
||||
*
|
||||
* @param protectMode - WifiProtectMode object
|
||||
* @return ErrCode - operation result
|
||||
*/
|
||||
ErrCode GetWifiProtect(const WifiProtectMode &protectMode) override;
|
||||
|
||||
/**
|
||||
* @Description Release the Wi-Fi protect mode.
|
||||
*
|
||||
* @return ErrCode - operation result
|
||||
*/
|
||||
ErrCode PutWifiProtect() override;
|
||||
#endif
|
||||
/**
|
||||
* @Description Remove the wifi candidate device config equals to input network id
|
||||
*
|
||||
|
@ -188,6 +188,6 @@ private:
|
||||
static bool m_isEventRegistered;
|
||||
std::set<std::string> p2pRegisteredCallbackEvent;
|
||||
OHOS::sptr<WifiP2pCEventCallback> sptrP2PCallback = nullptr;
|
||||
OHOS::Wifi::WifiAbilityStatusChange* mSaStatusListener;
|
||||
OHOS::sptr<OHOS::ISystemAbilityStatusChange> mSaStatusListener = nullptr;
|
||||
};
|
||||
#endif
|
@ -13,4 +13,5 @@
|
||||
|
||||
[cfi]
|
||||
# xmlFree check failed for CFI.
|
||||
type:OHOS::Wifi::*
|
||||
type:OHOS::Wifi::*
|
||||
type:OHOS::*
|
@ -66,6 +66,22 @@ public:
|
||||
*/
|
||||
virtual ErrCode PutWifiProtectRef(const std::string &protectName) = 0;
|
||||
|
||||
#ifndef OHOS_ARCH_LITE
|
||||
/**
|
||||
* @Description Acquire the Wi-Fi protect mode.
|
||||
*
|
||||
* @param protectMode - WifiProtectMode object
|
||||
* @return ErrCode - operation result
|
||||
*/
|
||||
virtual ErrCode GetWifiProtect(const WifiProtectMode &protectMode) = 0;
|
||||
|
||||
/**
|
||||
* @Description Release the Wi-Fi protect mode.
|
||||
*
|
||||
* @return ErrCode - operation result
|
||||
*/
|
||||
virtual ErrCode PutWifiProtect() = 0;
|
||||
#endif
|
||||
/**
|
||||
* @Description Remove the wifi candidate device config equals to input network id
|
||||
*
|
||||
|
@ -177,6 +177,8 @@ if (defined(ohos_lite)) {
|
||||
"//base/security/access_token/interfaces/innerkits/accesstoken/include",
|
||||
"$WIFI_ROOT_DIR/services/wifi_standard/include",
|
||||
"$WIFI_ROOT_DIR/services/wifi_standard/wifi_framework/wifi_manage/wifi_country_code",
|
||||
"//foundation/ability/ability_runtime/interfaces/inner_api/app_manager/include/appmgr",
|
||||
"//foundation/ability/ability_base/interfaces/kits/native/configuration/include",
|
||||
]
|
||||
}
|
||||
|
||||
@ -404,6 +406,8 @@ if (defined(ohos_lite)) {
|
||||
"wifi_manager.cpp",
|
||||
"wifi_net_agent.cpp",
|
||||
"wifi_net_conn_event_handler.cpp",
|
||||
"wifi_protect.cpp",
|
||||
"wifi_protect_manager.cpp",
|
||||
"wifi_service_manager.cpp",
|
||||
"wifi_system_ability_listerner.cpp",
|
||||
]
|
||||
@ -422,6 +426,9 @@ if (defined(ohos_lite)) {
|
||||
"ability_base:want",
|
||||
"ability_base:zuri",
|
||||
"ability_runtime:ability_manager",
|
||||
"ability_runtime:app_context",
|
||||
"ability_runtime:app_manager",
|
||||
"ability_runtime:connection_obs_manager",
|
||||
"ability_runtime:dataobs_manager",
|
||||
"access_token:libaccesstoken_sdk",
|
||||
"access_token:libtokenid_sdk",
|
||||
|
@ -1098,6 +1098,7 @@ WifiErrorNo Hid2dConnect(Hid2dConnectInfo *info)
|
||||
WriteStr(context, info->bssid);
|
||||
WriteStr(context, info->passphrase);
|
||||
WriteInt(context, info->frequency);
|
||||
WriteInt(context, info->isLegacyGo);
|
||||
WriteEnd(context);
|
||||
if (RpcClientCall(client, "P2pHid2dConnect") != WIFI_IDL_OPT_OK) {
|
||||
return WIFI_IDL_OPT_FAILED;
|
||||
|
@ -859,3 +859,22 @@ WifiErrorNo SetSuspendMode(bool mode)
|
||||
return result;
|
||||
}
|
||||
|
||||
WifiErrorNo SetPowerMode(bool mode)
|
||||
{
|
||||
RpcClient *client = GetStaRpcClient();
|
||||
LockRpcClient(client);
|
||||
Context *context = client->context;
|
||||
WriteBegin(context, 0);
|
||||
WriteFunc(context, "SetPowerMode");
|
||||
WriteInt(context, mode);
|
||||
WriteEnd(context);
|
||||
if (RpcClientCall(client, "SetPowerMode") != WIFI_IDL_OPT_OK) {
|
||||
return WIFI_IDL_OPT_FAILED;
|
||||
}
|
||||
int result = WIFI_IDL_OPT_FAILED;
|
||||
ReadInt(context, &result);
|
||||
ReadClientEnd(client);
|
||||
UnlockRpcClient(client);
|
||||
return result;
|
||||
}
|
||||
|
||||
|
@ -305,6 +305,14 @@ WifiErrorNo GetConnectSignalInfo(const char *endBssid, WpaSignalInfo *info);
|
||||
* @return WifiErrorNo
|
||||
*/
|
||||
WifiErrorNo SetSuspendMode(bool mode);
|
||||
|
||||
/**
|
||||
* @Description send power mode for wpa.
|
||||
*
|
||||
* @param mode: true for power, false for resume.
|
||||
* @return WifiErrorNo
|
||||
*/
|
||||
WifiErrorNo SetPowerMode(bool mode);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
@ -329,6 +329,7 @@ typedef struct Hid2dConnectInfo {
|
||||
char bssid[WIFI_MAC_ADDR_LENGTH + 1];
|
||||
char passphrase[WIFI_P2P_TMP_MSG_LENGTH_128];
|
||||
int frequency;
|
||||
int isLegacyGo;
|
||||
} Hid2dConnectInfo;
|
||||
/* ----------------p2p struct defines end--------------------------- */
|
||||
|
||||
|
@ -1761,6 +1761,11 @@ WifiErrorNo WifiIdlClient::ReqP2pHid2dConnect(const Hid2dConnectConfig &config)
|
||||
return WIFI_IDL_OPT_FAILED;
|
||||
}
|
||||
info.frequency = config.GetFrequency();
|
||||
if (config.GetDhcpMode() == DhcpMode::CONNECT_AP_DHCP) {
|
||||
info.isLegacyGo = 1;
|
||||
} else {
|
||||
info.isLegacyGo = 0;
|
||||
}
|
||||
WifiErrorNo ret = Hid2dConnect(&info);
|
||||
return ret;
|
||||
}
|
||||
@ -1770,5 +1775,11 @@ WifiErrorNo WifiIdlClient::ReqWpaSetSuspendMode(bool mode) const
|
||||
CHECK_CLIENT_NOT_NULL;
|
||||
return SetSuspendMode(mode);
|
||||
}
|
||||
|
||||
WifiErrorNo WifiIdlClient::ReqWpaSetPowerMode(bool mode) const
|
||||
{
|
||||
CHECK_CLIENT_NOT_NULL;
|
||||
return SetPowerMode(mode);
|
||||
}
|
||||
} // namespace Wifi
|
||||
} // namespace OHOS
|
||||
|
@ -1067,6 +1067,14 @@ public:
|
||||
* @return WifiErrorNo
|
||||
*/
|
||||
WifiErrorNo ReqWpaSetSuspendMode(bool mode) const;
|
||||
|
||||
/**
|
||||
* @Description Send power mode to wpa
|
||||
*
|
||||
* @param mode: true for power, false for resume
|
||||
* @return WifiErrorNo
|
||||
*/
|
||||
WifiErrorNo ReqWpaSetPowerMode(bool mode) const;
|
||||
public:
|
||||
RpcClient *pRpcClient;
|
||||
|
||||
|
@ -113,5 +113,11 @@ WifiErrorNo WifiSupplicantHalInterface::WpaSetSuspendMode(bool mode) const
|
||||
CHECK_NULL_AND_RETURN(mIdlClient, WIFI_IDL_OPT_FAILED);
|
||||
return mIdlClient->ReqWpaSetSuspendMode(mode);
|
||||
}
|
||||
|
||||
WifiErrorNo WifiSupplicantHalInterface::WpaSetPowerMode(bool mode) const
|
||||
{
|
||||
CHECK_NULL_AND_RETURN(mIdlClient, WIFI_IDL_OPT_FAILED);
|
||||
return mIdlClient->ReqWpaSetPowerMode(mode);
|
||||
}
|
||||
} // namespace Wifi
|
||||
} // namespace OHOS
|
||||
|
@ -123,6 +123,15 @@ public:
|
||||
* @Return success: WIFI_OPT_SUCCESS, fail: WIFI_OPT_FAILED
|
||||
*/
|
||||
WifiErrorNo WpaSetSuspendMode(bool mode) const;
|
||||
|
||||
/**
|
||||
* @Description Set power mode to wpa
|
||||
*
|
||||
* @param mode - true for power mode, false for resume mode
|
||||
*
|
||||
* @Return success: WIFI_OPT_SUCCESS, fail: WIFI_OPT_FAILED
|
||||
*/
|
||||
WifiErrorNo WpaSetPowerMode(bool mode) const;
|
||||
private:
|
||||
SupplicantEventCallback mCallback;
|
||||
};
|
||||
|
@ -24,8 +24,6 @@
|
||||
DEFINE_WIFILOG_HOTSPOT_LABEL("WifiApService");
|
||||
namespace OHOS {
|
||||
namespace Wifi {
|
||||
const std::string CLASS_NAME = "ApService";
|
||||
|
||||
ApService::ApService(ApStateMachine &apStateMachine, int id)
|
||||
: m_ApStateMachine(apStateMachine), m_id(id)
|
||||
{}
|
||||
@ -36,8 +34,10 @@ ApService::~ApService()
|
||||
ErrCode ApService::EnableHotspot()
|
||||
{
|
||||
WIFI_LOGI("Instance %{public}d %{public}s", m_id, __func__);
|
||||
|
||||
// notification of registration country code change
|
||||
m_apObserver = std::make_shared<WifiCountryCodeChangeObserver>(CLASS_NAME, m_ApStateMachine);
|
||||
std::string moduleName = "ApService_" + std::to_string(m_id);
|
||||
m_apObserver = std::make_shared<WifiCountryCodeChangeObserver>(moduleName, m_ApStateMachine);
|
||||
WifiCountryCodeManager::GetInstance().RegisterWifiCountryCodeChangeListener(m_apObserver);
|
||||
|
||||
m_ApStateMachine.SendMessage(static_cast<int>(ApStatemachineEvent::CMD_START_HOTSPOT));
|
||||
|
@ -97,8 +97,8 @@ void ApStateMachine::OnApStateChange(ApState state)
|
||||
if (state == ApState::AP_STATE_IDLE || state == ApState::AP_STATE_STARTED || state == ApState::AP_STATE_STARTING ||
|
||||
state == ApState::AP_STATE_CLOSING) {
|
||||
for (const auto &callBackItem : m_callbacks) {
|
||||
if (callBackItem.OnApStateChangedEvent != nullptr) {
|
||||
callBackItem.OnApStateChangedEvent(state, m_id);
|
||||
if (callBackItem.second.OnApStateChangedEvent != nullptr) {
|
||||
callBackItem.second.OnApStateChangedEvent(state, m_id);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -108,7 +108,7 @@ void ApStateMachine::OnApStateChange(ApState state)
|
||||
ErrCode ApStateMachine::RegisterApServiceCallbacks(const IApServiceCallbacks &callback)
|
||||
{
|
||||
WIFI_LOGI("RegisterApServiceCallbacks, callback module name: %{public}s", callback.callbackModuleName.c_str());
|
||||
m_callbacks.insert(callback);
|
||||
m_callbacks.insert_or_assign(callback.callbackModuleName, callback);
|
||||
return ErrCode::WIFI_OPT_SUCCESS;
|
||||
}
|
||||
|
||||
@ -117,15 +117,15 @@ void ApStateMachine::BroadCastStationChange(const StationInfo &staInfo, ApStatem
|
||||
switch (act) {
|
||||
case ApStatemachineEvent::CMD_STATION_JOIN:
|
||||
for (const auto &callBackItem : m_callbacks) {
|
||||
if (callBackItem.OnHotspotStaJoinEvent != nullptr) {
|
||||
callBackItem.OnHotspotStaJoinEvent(staInfo, m_id);
|
||||
if (callBackItem.second.OnHotspotStaJoinEvent != nullptr) {
|
||||
callBackItem.second.OnHotspotStaJoinEvent(staInfo, m_id);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case ApStatemachineEvent::CMD_STATION_LEAVE:
|
||||
for (const auto &callBackItem : m_callbacks) {
|
||||
if (callBackItem.OnHotspotStaLeaveEvent != nullptr) {
|
||||
callBackItem.OnHotspotStaLeaveEvent(staInfo, m_id);
|
||||
if (callBackItem.second.OnHotspotStaLeaveEvent != nullptr) {
|
||||
callBackItem.second.OnHotspotStaLeaveEvent(staInfo, m_id);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
@ -157,13 +157,7 @@ private:
|
||||
|
||||
private:
|
||||
std::string m_iface;
|
||||
struct CallbackModuleNameCmp {
|
||||
bool operator() (const IApServiceCallbacks &cb1, const IApServiceCallbacks &cb2) const
|
||||
{
|
||||
return strcasecmp(cb1.callbackModuleName.c_str(), cb2.callbackModuleName.c_str()) < 0;
|
||||
}
|
||||
};
|
||||
std::set<IApServiceCallbacks, CallbackModuleNameCmp> m_callbacks;
|
||||
std::map<std::string, IApServiceCallbacks> m_callbacks;
|
||||
/* STA Manager */
|
||||
ApStationsManager &m_ApStationsManager;
|
||||
/* The reference of RootState */
|
||||
|
@ -64,6 +64,8 @@ WifiOprMidState WifiConfigCenter::GetWifiMidState(int instId)
|
||||
|
||||
bool WifiConfigCenter::SetWifiMidState(WifiOprMidState expState, WifiOprMidState state, int instId)
|
||||
{
|
||||
WIFI_LOGI("SetWifiMidState expState:%{public}d,state:%{public}d,instId:%{public}d",
|
||||
(int)expState, (int)state, instId);
|
||||
std::unique_lock<std::mutex> lock(mStaMutex);
|
||||
auto iter = mStaMidState.find(instId);
|
||||
if (iter != mStaMidState.end()) {
|
||||
@ -77,6 +79,7 @@ bool WifiConfigCenter::SetWifiMidState(WifiOprMidState expState, WifiOprMidState
|
||||
|
||||
void WifiConfigCenter::SetWifiMidState(WifiOprMidState state, int instId)
|
||||
{
|
||||
WIFI_LOGI("SetWifiMidState ,state:%{public}d,instId:%{public}d", (int)state, instId);
|
||||
std::unique_lock<std::mutex> lock(mStaMutex);
|
||||
auto ret = mStaMidState.emplace(instId, state);
|
||||
if (!ret.second) {
|
||||
@ -294,9 +297,9 @@ bool WifiConfigCenter::SetScanMidState(WifiOprMidState expState, WifiOprMidState
|
||||
void WifiConfigCenter::SetScanMidState(WifiOprMidState state, int instId)
|
||||
{
|
||||
std::unique_lock<std::mutex> lock(mScanMutex);
|
||||
auto ret = mApMidState.emplace(instId, state);
|
||||
auto ret = mScanMidState.emplace(instId, state);
|
||||
if (!ret.second) {
|
||||
mApMidState[instId] = state;
|
||||
mScanMidState[instId] = state;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -46,6 +46,8 @@ WifiCountryCodeManager::~WifiCountryCodeManager()
|
||||
if (m_telephoneNetworkSearchStateChangeListener != nullptr) {
|
||||
OHOS::EventFwk::CommonEventManager::UnSubscribeCommonEvent(m_telephoneNetworkSearchStateChangeListener);
|
||||
}
|
||||
std::lock_guard<std::mutex> lock(m_countryCodeMutex);
|
||||
m_codeChangeListeners.clear();
|
||||
}
|
||||
|
||||
WifiCountryCodeManager &WifiCountryCodeManager::GetInstance()
|
||||
@ -79,6 +81,7 @@ ErrCode WifiCountryCodeManager::Init()
|
||||
|
||||
m_staCallback.callbackModuleName = CLASS_NAME;
|
||||
m_staCallback.OnStaOpenRes = DealStaOpenRes;
|
||||
m_staCallback.OnStaCloseRes = DealStaCloseRes;
|
||||
m_staCallback.OnStaConnChanged = DealStaConnChanged;
|
||||
m_apCallback.callbackModuleName = CLASS_NAME;
|
||||
m_apCallback.OnApStateChangedEvent = DealApStateChanged;
|
||||
@ -138,9 +141,10 @@ ErrCode WifiCountryCodeManager::UpdateWifiCountryCode(const std::string &externa
|
||||
|
||||
void WifiCountryCodeManager::NotifyWifiCountryCodeChangeListeners(const std::string &wifiCountryCode)
|
||||
{
|
||||
if (!m_wifiCountryCodeChangeListeners.empty()) {
|
||||
for (auto &callBackItem : m_wifiCountryCodeChangeListeners) {
|
||||
callBackItem->OnWifiCountryCodeChanged(wifiCountryCode);
|
||||
std::lock_guard<std::mutex> lock(m_countryCodeMutex);
|
||||
if (!m_codeChangeListeners.empty()) {
|
||||
for (auto &callBackItem : m_codeChangeListeners) {
|
||||
callBackItem.second->OnWifiCountryCodeChanged(wifiCountryCode);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -148,7 +152,12 @@ void WifiCountryCodeManager::NotifyWifiCountryCodeChangeListeners(const std::str
|
||||
ErrCode WifiCountryCodeManager::RegisterWifiCountryCodeChangeListener(
|
||||
const std::shared_ptr<IWifiCountryCodeChangeListener> &listener)
|
||||
{
|
||||
m_wifiCountryCodeChangeListeners.insert(listener);
|
||||
std::lock_guard<std::mutex> lock(m_countryCodeMutex);
|
||||
if (listener->GetListenerModuleName().empty()) {
|
||||
WIFI_LOGE("register fail, listener module name is null");
|
||||
return WIFI_OPT_FAILED;
|
||||
}
|
||||
m_codeChangeListeners.insert_or_assign(listener->GetListenerModuleName(), listener);
|
||||
WIFI_LOGI("register success, listener module name: %{public}s", listener->GetListenerModuleName().c_str());
|
||||
return WIFI_OPT_SUCCESS;
|
||||
}
|
||||
@ -156,29 +165,45 @@ ErrCode WifiCountryCodeManager::RegisterWifiCountryCodeChangeListener(
|
||||
ErrCode WifiCountryCodeManager::UnregisterWifiCountryCodeChangeListener(
|
||||
const std::shared_ptr<IWifiCountryCodeChangeListener> &listener)
|
||||
{
|
||||
for (auto it = m_wifiCountryCodeChangeListeners.begin(); it != m_wifiCountryCodeChangeListeners.end(); ++it) {
|
||||
if (strcasecmp(listener->GetListenerModuleName().c_str(), (*it)->GetListenerModuleName().c_str()) == 0) {
|
||||
m_wifiCountryCodeChangeListeners.erase(it);
|
||||
WIFI_LOGI("unregister success, listener module name: %{public}s",
|
||||
listener->GetListenerModuleName().c_str());
|
||||
return WIFI_OPT_SUCCESS;
|
||||
}
|
||||
return UnregisterWifiCountryCodeChangeListener(listener->GetListenerModuleName());
|
||||
}
|
||||
|
||||
ErrCode WifiCountryCodeManager::UnregisterWifiCountryCodeChangeListener(const std::string &moduleName)
|
||||
{
|
||||
std::lock_guard<std::mutex> lock(m_countryCodeMutex);
|
||||
if (moduleName.empty()) {
|
||||
WIFI_LOGE("unregister fail, listener module name is null");
|
||||
return WIFI_OPT_FAILED;
|
||||
}
|
||||
WIFI_LOGE("unregister fail, listener module name: %{public}s", listener->GetListenerModuleName().c_str());
|
||||
return WIFI_OPT_FAILED;
|
||||
int ret = m_codeChangeListeners.erase(moduleName);
|
||||
WIFI_LOGI("unregister ret=%{public}d, listener module name: %{public}s", ret, moduleName.c_str());
|
||||
return ret > 0 ? WIFI_OPT_SUCCESS : WIFI_OPT_FAILED;
|
||||
}
|
||||
|
||||
void WifiCountryCodeManager::DealStaOpenRes(OperateResState state, int instId)
|
||||
{
|
||||
WIFI_LOGI("wifi open, state=%{public}d", state);
|
||||
WIFI_LOGI("wifi open result, state=%{public}d, id=%{public}d", state, instId);
|
||||
if (state == OperateResState::OPEN_WIFI_SUCCEED) {
|
||||
WifiCountryCodeManager::GetInstance().UpdateWifiCountryCode();
|
||||
} else if (state == OperateResState::OPEN_WIFI_FAILED) {
|
||||
std::string moduleName = "StaService_" + std::to_string(instId);
|
||||
WifiCountryCodeManager::GetInstance().UnregisterWifiCountryCodeChangeListener(moduleName);
|
||||
}
|
||||
}
|
||||
|
||||
void WifiCountryCodeManager::DealStaCloseRes(OperateResState state, int instId)
|
||||
{
|
||||
WIFI_LOGI("wifi close result, state=%{public}d, id=%{public}d", state, instId);
|
||||
if (state == OperateResState::CLOSE_WIFI_FAILED || state == OperateResState::CLOSE_WIFI_SUCCEED) {
|
||||
std::string moduleName = "StaService_" + std::to_string(instId);
|
||||
WifiCountryCodeManager::GetInstance().UnregisterWifiCountryCodeChangeListener(moduleName);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void WifiCountryCodeManager::DealStaConnChanged(OperateResState state, const WifiLinkedInfo &info, int instId)
|
||||
{
|
||||
WIFI_LOGI("wifi connection state change, state=%{public}d", state);
|
||||
WIFI_LOGI("wifi connection state change, state=%{public}d, id=%{public}d", state, instId);
|
||||
if (state == OperateResState::CONNECT_AP_CONNECTED || state == OperateResState::DISCONNECT_DISCONNECTING) {
|
||||
WifiCountryCodeManager::GetInstance().UpdateWifiCountryCode();
|
||||
}
|
||||
@ -189,6 +214,9 @@ void WifiCountryCodeManager::DealApStateChanged(ApState state, int id)
|
||||
WIFI_LOGI("ap state change, state=%{public}d, id=%{public}d", state, id);
|
||||
if (state == ApState::AP_STATE_STARTED) {
|
||||
WifiCountryCodeManager::GetInstance().UpdateWifiCountryCode();
|
||||
} else if (state != ApState::AP_STATE_STARTING && state != ApState::AP_STATE_STARTED) {
|
||||
std::string moduleName = "ApService_" + std::to_string(id);
|
||||
WifiCountryCodeManager::GetInstance().UnregisterWifiCountryCodeChangeListener(moduleName);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -16,7 +16,9 @@
|
||||
#ifndef WIFI_COUNTRY_CODE_MANAGER
|
||||
#define WIFI_COUNTRY_CODE_MANAGER
|
||||
|
||||
#include <map>
|
||||
#include <memory>
|
||||
#include <mutex>
|
||||
#include <string>
|
||||
#include "common_event_manager.h"
|
||||
#include "common_event_support.h"
|
||||
@ -139,24 +141,18 @@ private:
|
||||
#ifdef FEATURE_AP_SUPPORT
|
||||
IApServiceCallbacks m_apCallback;
|
||||
#endif
|
||||
struct ListenerNameCmp {
|
||||
bool operator() (const std::shared_ptr<IWifiCountryCodeChangeListener> &listener1,
|
||||
const std::shared_ptr<IWifiCountryCodeChangeListener> &listener2) const
|
||||
{
|
||||
return strcasecmp(listener1->GetListenerModuleName().c_str(),
|
||||
listener2->GetListenerModuleName().c_str()) < 0;
|
||||
}
|
||||
};
|
||||
std::set<std::shared_ptr<IWifiCountryCodeChangeListener>, ListenerNameCmp> m_wifiCountryCodeChangeListeners;
|
||||
std::map<std::string, std::shared_ptr<IWifiCountryCodeChangeListener>> m_codeChangeListeners;
|
||||
std::string m_wifiCountryCode = DEFAULT_WIFI_COUNTRY_CODE;
|
||||
std::shared_ptr<TelephoneNetworkSearchStateChangeListener> m_telephoneNetworkSearchStateChangeListener;
|
||||
std::shared_ptr<IWifiCountryCodePolicy> m_wifiCountryCodePolicy;
|
||||
std::mutex m_countryCodeMutex;
|
||||
|
||||
WifiCountryCodeManager() = default;
|
||||
void SendCountryCodeChangeCommonEvent(const std::string &wifiCountryCode);
|
||||
ErrCode UpdateWifiCountryCode(const std::string &externalCode = "");
|
||||
#ifdef FEATURE_STA_SUPPORT
|
||||
static void DealStaOpenRes(OperateResState state, int instId = 0);
|
||||
static void DealStaCloseRes(OperateResState state, int instId = 0);
|
||||
static void DealStaConnChanged(OperateResState state, const WifiLinkedInfo &info, int instId = 0);
|
||||
#endif
|
||||
#ifdef FEATURE_AP_SUPPORT
|
||||
@ -164,6 +160,7 @@ private:
|
||||
#endif
|
||||
ErrCode UpdateWifiCountryCodeCache(const std::string &wifiCountryCode);
|
||||
void NotifyWifiCountryCodeChangeListeners(const std::string &wifiCountryCode);
|
||||
ErrCode UnregisterWifiCountryCodeChangeListener(const std::string &moduleName);
|
||||
};
|
||||
}
|
||||
}
|
||||
|
@ -298,14 +298,31 @@ ErrCode WifiDeviceServiceImpl::InitWifiProtect(const WifiProtectType &protectTyp
|
||||
|
||||
ErrCode WifiDeviceServiceImpl::GetWifiProtectRef(const WifiProtectMode &protectMode, const std::string &protectName)
|
||||
{
|
||||
#ifdef OHOS_ARCH_LITE
|
||||
/* refer to WifiProtectManager::GetInstance().GetWifiProtect, DO NOT support now! */
|
||||
return WIFI_OPT_SUCCESS;
|
||||
#else
|
||||
if (!WifiProtectManager::GetInstance().GetWifiProtect(protectMode, protectName)) {
|
||||
WIFI_LOGE("App %{public}s set protect mode %{public}d failed.",
|
||||
protectName.c_str(), static_cast<int>(protectMode));
|
||||
return WIFI_OPT_FAILED;
|
||||
}
|
||||
return WIFI_OPT_SUCCESS;
|
||||
#endif
|
||||
}
|
||||
|
||||
ErrCode WifiDeviceServiceImpl::PutWifiProtectRef(const std::string &protectName)
|
||||
{
|
||||
#ifdef OHOS_ARCH_LITE
|
||||
/* refer to WifiProtectManager::GetInstance().PutWifiProtect, DO NOT support now! */
|
||||
return WIFI_OPT_SUCCESS;
|
||||
#else
|
||||
if (!WifiProtectManager::GetInstance().PutWifiProtect(protectName)) {
|
||||
WIFI_LOGE("App %{public}s remove protect mode failed.", protectName.c_str());
|
||||
return WIFI_OPT_FAILED;
|
||||
}
|
||||
return WIFI_OPT_SUCCESS;
|
||||
#endif
|
||||
}
|
||||
|
||||
bool WifiDeviceServiceImpl::CheckConfigEap(const WifiDeviceConfig &config)
|
||||
@ -1420,7 +1437,7 @@ ErrCode WifiDeviceServiceImpl::StartPortalCertification()
|
||||
return WIFI_OPT_STA_NOT_OPENED;
|
||||
}
|
||||
|
||||
return WIFI_OPT_SUCCESS;
|
||||
return pService->StartPortalCertification();
|
||||
}
|
||||
|
||||
#ifndef OHOS_ARCH_LITE
|
||||
|
@ -32,6 +32,7 @@
|
||||
#include "wifi_datashare_utils.h"
|
||||
#include "wifi_location_mode_observer.h"
|
||||
#include "wifi_country_code_manager.h"
|
||||
#include "wifi_protect_manager.h"
|
||||
#endif
|
||||
#include "wifi_sta_hal_interface.h"
|
||||
#include "wifi_service_manager.h"
|
||||
@ -1027,6 +1028,9 @@ void WifiManager::DealStaOpenRes(OperateResState state, int instId)
|
||||
void WifiManager::DealStaCloseRes(OperateResState state, int instId)
|
||||
{
|
||||
WIFI_LOGD("Enter DealStaCloseRes: %{public}d", static_cast<int>(state));
|
||||
#ifndef OHOS_ARCH_LITE
|
||||
WifiProtectManager::GetInstance().UpdateWifiClientConnected(false);
|
||||
#endif
|
||||
WifiEventCallbackMsg cbMsg;
|
||||
cbMsg.msgCode = WIFI_CBK_MSG_STATE_CHANGE;
|
||||
cbMsg.id = instId;
|
||||
@ -1125,6 +1129,10 @@ void WifiManager::DealStaConnChanged(OperateResState state, const WifiLinkedInfo
|
||||
if (cfgMonitorCallback.onStaConnectionChange != nullptr) {
|
||||
cfgMonitorCallback.onStaConnectionChange(static_cast<int>(state));
|
||||
}
|
||||
#endif
|
||||
#ifndef OHOS_ARCH_LITE
|
||||
bool isConnected = (info.connState == CONNECTED) ? true : false;
|
||||
WifiProtectManager::GetInstance().UpdateWifiClientConnected(isConnected);
|
||||
#endif
|
||||
return;
|
||||
}
|
||||
@ -1808,6 +1816,10 @@ void ScreenEventSubscriber::OnReceiveEvent(const OHOS::EventFwk::CommonEventData
|
||||
WIFI_LOGE("scan service is NOT start!");
|
||||
return;
|
||||
}
|
||||
#ifndef OHOS_ARCH_LITE
|
||||
bool isScreenOn = (action == OHOS::EventFwk::CommonEventSupport::COMMON_EVENT_SCREEN_ON) ? true : false;
|
||||
WifiProtectManager::GetInstance().HandleScreenStateChanged(isScreenOn);
|
||||
#endif
|
||||
if (action == OHOS::EventFwk::CommonEventSupport::COMMON_EVENT_SCREEN_OFF &&
|
||||
screenState == MODE_STATE_OPEN) {
|
||||
WifiSettings::GetInstance().SetScreenState(MODE_STATE_CLOSE);
|
||||
@ -2178,4 +2190,4 @@ void WifiTimer::UnRegister(uint32_t timerId)
|
||||
}
|
||||
#endif
|
||||
} // namespace Wifi
|
||||
} // namespace OHOS
|
||||
} // namespace OHOS
|
||||
|
@ -34,6 +34,12 @@ namespace Wifi {
|
||||
constexpr const char *WIFI_NET_CONN_MGR_WORK_THREAD = "WIFI_NET_CONN_MGR_WORK_THREAD";
|
||||
using namespace NetManagerStandard;
|
||||
|
||||
WifiNetAgent &WifiNetAgent::GetInstance()
|
||||
{
|
||||
static WifiNetAgent gWifiNetAgent;
|
||||
return gWifiNetAgent;
|
||||
}
|
||||
|
||||
WifiNetAgent::WifiNetAgent()
|
||||
{
|
||||
netConnEventRunner_ = AppExecFwk::EventRunner::Create(WIFI_NET_CONN_MGR_WORK_THREAD);
|
||||
|
@ -32,10 +32,10 @@
|
||||
|
||||
namespace OHOS {
|
||||
namespace Wifi {
|
||||
class WifiNetAgent : public DelayedRefSingleton<WifiNetAgent> {
|
||||
DECLARE_DELAYED_REF_SINGLETON(WifiNetAgent);
|
||||
|
||||
class WifiNetAgent {
|
||||
public:
|
||||
~WifiNetAgent();
|
||||
static WifiNetAgent &GetInstance();
|
||||
/**
|
||||
* Register the network information with the network management module
|
||||
*
|
||||
@ -145,6 +145,7 @@ public:
|
||||
void LogNetCaps(const std::string &ident, const std::set<NetManagerStandard::NetCap> &netCaps) const;
|
||||
};
|
||||
private:
|
||||
WifiNetAgent();
|
||||
void CreateNetLinkInfo(sptr<NetManagerStandard::NetLinkInfo> &netLinkInfo, IpInfo &wifiIpInfo,
|
||||
IpV6Info &wifiIpV6Info, WifiProxyConfig &wifiProxyConfig, int instId = 0);
|
||||
|
||||
|
@ -55,6 +55,7 @@ unsigned char WifiP2pServiceManager::GetTransId()
|
||||
|
||||
bool WifiP2pServiceManager::AddLocalService(const WifiP2pServiceInfo &p2pSvrInfo)
|
||||
{
|
||||
std::unique_lock<std::mutex> lock(serviceMutex);
|
||||
for (auto iter = localServicesInfo.begin(); iter != localServicesInfo.end(); ++iter) {
|
||||
if (iter->GetServicerProtocolType() == p2pSvrInfo.GetServicerProtocolType() &&
|
||||
iter->GetQueryList() == p2pSvrInfo.GetQueryList() &&
|
||||
@ -69,6 +70,7 @@ bool WifiP2pServiceManager::AddLocalService(const WifiP2pServiceInfo &p2pSvrInfo
|
||||
|
||||
bool WifiP2pServiceManager::RemoveLocalService(const WifiP2pServiceInfo &p2pSvrInfo)
|
||||
{
|
||||
std::unique_lock<std::mutex> lock(serviceMutex);
|
||||
for (auto iter = localServicesInfo.begin(); iter != localServicesInfo.end(); ++iter) {
|
||||
if (iter->GetServicerProtocolType() == p2pSvrInfo.GetServicerProtocolType() &&
|
||||
iter->GetQueryList() == p2pSvrInfo.GetQueryList() &&
|
||||
|
@ -14,6 +14,14 @@
|
||||
*/
|
||||
|
||||
#include "wifi_protect.h"
|
||||
#ifndef OHOS_ARCH_LITE
|
||||
#include "app_mgr_client.h"
|
||||
#include "wifi_common_util.h"
|
||||
#include "wifi_log.h"
|
||||
|
||||
#undef LOG_TAG
|
||||
#define LOG_TAG "OHWIFI_MANAGER_PROTECT"
|
||||
#endif
|
||||
|
||||
namespace OHOS {
|
||||
namespace Wifi {
|
||||
@ -28,14 +36,14 @@ WifiProtect::WifiProtect(
|
||||
WifiProtect::WifiProtect(const std::string &name)
|
||||
: mName(name),
|
||||
mType(WifiProtectType::WIFI_PROTECT_COMMON),
|
||||
mMode(WifiProtectMode::WIFI_PROTECT_FULL),
|
||||
mMode(WifiProtectMode::WIFI_PROTECT_NO_HELD),
|
||||
mAcqTimestamp(0)
|
||||
{}
|
||||
|
||||
WifiProtect::WifiProtect()
|
||||
: mName(""),
|
||||
mType(WifiProtectType::WIFI_PROTECT_COMMON),
|
||||
mMode(WifiProtectMode::WIFI_PROTECT_FULL),
|
||||
mMode(WifiProtectMode::WIFI_PROTECT_NO_HELD),
|
||||
mAcqTimestamp(0)
|
||||
{}
|
||||
|
||||
@ -44,6 +52,7 @@ WifiProtect::~WifiProtect()
|
||||
|
||||
void WifiProtect::SetProtectType(const WifiProtectType &protectType)
|
||||
{
|
||||
std::unique_lock<std::mutex> lock(mMutex);
|
||||
mType = protectType;
|
||||
}
|
||||
|
||||
@ -54,6 +63,7 @@ WifiProtectType WifiProtect::GetProtectType() const
|
||||
|
||||
void WifiProtect::SetProtectMode(const WifiProtectMode &protectMode)
|
||||
{
|
||||
std::unique_lock<std::mutex> lock(mMutex);
|
||||
mMode = protectMode;
|
||||
}
|
||||
|
||||
@ -64,6 +74,7 @@ WifiProtectMode WifiProtect::GetProtectMode() const
|
||||
|
||||
void WifiProtect::SetName(const std::string &name)
|
||||
{
|
||||
std::unique_lock<std::mutex> lock(mMutex);
|
||||
mName = name;
|
||||
}
|
||||
|
||||
@ -76,5 +87,17 @@ long WifiProtect::GetAcqTimestamp() const
|
||||
{
|
||||
return mAcqTimestamp;
|
||||
}
|
||||
#ifndef OHOS_ARCH_LITE
|
||||
void WifiProtect::SetAppState(int state)
|
||||
{
|
||||
std::unique_lock<std::mutex> lock(mMutex);
|
||||
mAppState = state;
|
||||
}
|
||||
|
||||
int WifiProtect::GetAppState() const
|
||||
{
|
||||
return mAppState;
|
||||
}
|
||||
#endif
|
||||
} // namespace Wifi
|
||||
} // namespace OHOS
|
||||
} // namespace OHOS
|
||||
|
@ -17,6 +17,7 @@
|
||||
#define OHOS_WIFIPROTECT_H
|
||||
|
||||
#include <string>
|
||||
#include <mutex>
|
||||
#include "wifi_msg.h"
|
||||
|
||||
namespace OHOS {
|
||||
@ -99,13 +100,31 @@ public:
|
||||
* @return long - timestamp
|
||||
*/
|
||||
long GetAcqTimestamp() const;
|
||||
#ifndef OHOS_ARCH_LITE
|
||||
/**
|
||||
* @Description Set the Protect app state
|
||||
*
|
||||
* @param state - app state
|
||||
*/
|
||||
void SetAppState(int state);
|
||||
|
||||
/**
|
||||
* @Description Get the Protect app state
|
||||
*
|
||||
* @param state - app state
|
||||
*/
|
||||
int GetAppState() const;
|
||||
#endif
|
||||
private:
|
||||
std::string mName;
|
||||
/* not used: int mUid; */
|
||||
WifiProtectType mType;
|
||||
WifiProtectMode mMode;
|
||||
long mAcqTimestamp;
|
||||
WifiProtectType mType {WifiProtectType::WIFI_PROTECT_COMMON};
|
||||
WifiProtectMode mMode {WifiProtectMode::WIFI_PROTECT_NO_HELD};
|
||||
long mAcqTimestamp {0};
|
||||
std::mutex mMutex;
|
||||
#ifndef OHOS_ARCH_LITE
|
||||
int mAppState {6};
|
||||
#endif
|
||||
};
|
||||
} // namespace Wifi
|
||||
} // namespace OHOS
|
||||
|
@ -17,12 +17,24 @@
|
||||
#include "wifi_log.h"
|
||||
#include "wifi_chip_hal_interface.h"
|
||||
#include "wifi_supplicant_hal_interface.h"
|
||||
#ifndef OHOS_ARCH_LITE
|
||||
#include "system_ability_definition.h"
|
||||
#include "connection_observer_client.h"
|
||||
#include "app_mgr_client.h"
|
||||
#include "app_mgr_interface.h"
|
||||
#include "app_process_data.h"
|
||||
#include "iservice_registry.h"
|
||||
#include "app_mgr_constants.h"
|
||||
#include "wifi_common_util.h"
|
||||
#endif
|
||||
|
||||
#undef LOG_TAG
|
||||
#define LOG_TAG "OHWIFI_MANAGER_LOCK_MANAGER"
|
||||
|
||||
namespace OHOS {
|
||||
namespace Wifi {
|
||||
constexpr const int WIFI_PROTECT_APP_MAX_COUNT = 100;
|
||||
constexpr const char *WIFI_APP_CHANGE_MGR_WORK_THREAD = "WIFI_APP_CHANGE_MGR_WORK_THREAD";
|
||||
WifiProtectManager::WifiProtectManager()
|
||||
{
|
||||
mWifiConnected = false;
|
||||
@ -35,10 +47,41 @@ WifiProtectManager::WifiProtectManager()
|
||||
mFullLowLatencyProtectsAcquired = 0;
|
||||
mFullLowLatencyProtectsReleased = 0;
|
||||
mWifiProtects.clear();
|
||||
#ifndef OHOS_ARCH_LITE
|
||||
mAppChangeEventRunner = AppExecFwk::EventRunner::Create(WIFI_APP_CHANGE_MGR_WORK_THREAD);
|
||||
if (!mAppChangeEventRunner) {
|
||||
LOGE("Create event runner failed.");
|
||||
return;
|
||||
}
|
||||
mAppChangeEventHandler = std::make_shared<AppExecFwk::EventHandler>(mAppChangeEventRunner);
|
||||
if (mAppChangeEventHandler) {
|
||||
std::function<void()> RegisterAppStateObserverFunc =
|
||||
std::bind(&WifiProtectManager::RegisterAppStateObserver, this);
|
||||
mAppChangeEventHandler->PostSyncTask(RegisterAppStateObserverFunc);
|
||||
} else {
|
||||
LOGE("Create event handler failed.");
|
||||
}
|
||||
LOGI("Register app state observer successful.");
|
||||
#endif
|
||||
}
|
||||
|
||||
WifiProtectManager::~WifiProtectManager()
|
||||
{}
|
||||
{
|
||||
#ifndef OHOS_ARCH_LITE
|
||||
if (mAppChangeEventRunner) {
|
||||
mAppChangeEventRunner->Stop();
|
||||
mAppChangeEventRunner.reset();
|
||||
}
|
||||
|
||||
if (mAppChangeEventHandler) {
|
||||
mAppChangeEventHandler.reset();
|
||||
}
|
||||
|
||||
if (mAppStateObserver) {
|
||||
mAppStateObserver = nullptr;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
WifiProtectManager &WifiProtectManager::GetInstance()
|
||||
{
|
||||
@ -46,9 +89,10 @@ WifiProtectManager &WifiProtectManager::GetInstance()
|
||||
return instance;
|
||||
}
|
||||
|
||||
bool WifiProtectManager::IsValidProtectMode(WifiProtectMode &protectMode)
|
||||
bool WifiProtectManager::IsValidProtectMode(const WifiProtectMode &protectMode)
|
||||
{
|
||||
if (protectMode != WifiProtectMode::WIFI_PROTECT_FULL && protectMode != WifiProtectMode::WIFI_PROTECT_SCAN_ONLY &&
|
||||
if (protectMode != WifiProtectMode::WIFI_PROTECT_FULL &&
|
||||
protectMode != WifiProtectMode::WIFI_PROTECT_SCAN_ONLY &&
|
||||
protectMode != WifiProtectMode::WIFI_PROTECT_FULL_HIGH_PERF &&
|
||||
protectMode != WifiProtectMode::WIFI_PROTECT_FULL_LOW_LATENCY) {
|
||||
return false;
|
||||
@ -59,6 +103,18 @@ bool WifiProtectManager::IsValidProtectMode(WifiProtectMode &protectMode)
|
||||
|
||||
WifiProtectMode WifiProtectManager::GetNearlyProtectMode()
|
||||
{
|
||||
#ifndef OHOS_ARCH_LITE
|
||||
WifiLinkedInfo linkedInfo;
|
||||
WifiSettings::GetInstance().GetLinkedInfo(linkedInfo);
|
||||
mWifiConnected = (linkedInfo.connState == ConnState::CONNECTED) ? true : false;
|
||||
|
||||
int screenState = WifiSettings::GetInstance().GetScreenState();
|
||||
mScreenOn = (screenState == MODE_STATE_OPEN) ? true : false;
|
||||
int foregroudCount = GetFgLowlatyProtectCount();
|
||||
LOGI("%{public}s mWifiConnected: %{public}d, mScreenOn: %{public}d,"
|
||||
"ForegroundProtectCount: %{public}d, mForceHiPerfMode: %{public}d, mForceLowLatencyMode: %{public}d",
|
||||
__func__, mWifiConnected, mScreenOn, foregroudCount, mForceHiPerfMode, mForceLowLatencyMode);
|
||||
#endif
|
||||
/* If Wifi Client is not connected, then all protects are not effective */
|
||||
if (!mWifiConnected) {
|
||||
return WifiProtectMode::WIFI_PROTECT_NO_HELD;
|
||||
@ -73,53 +129,87 @@ WifiProtectMode WifiProtectManager::GetNearlyProtectMode()
|
||||
if (mForceLowLatencyMode) {
|
||||
return WifiProtectMode::WIFI_PROTECT_FULL_LOW_LATENCY;
|
||||
}
|
||||
|
||||
#ifndef OHOS_ARCH_LITE
|
||||
if (mScreenOn && (foregroudCount > 0) &&
|
||||
(mFullLowLatencyProtectsAcquired > mFullLowLatencyProtectsReleased)) {
|
||||
return WifiProtectMode::WIFI_PROTECT_FULL_LOW_LATENCY;
|
||||
}
|
||||
if ((mFullHighPerfProtectsAcquired > mFullHighPerfProtectsReleased) &&
|
||||
mWifiProtects.size() > 0) {
|
||||
#else
|
||||
if (mFullHighPerfProtectsAcquired > mFullHighPerfProtectsReleased) {
|
||||
#endif
|
||||
return WifiProtectMode::WIFI_PROTECT_FULL_HIGH_PERF;
|
||||
}
|
||||
|
||||
return WifiProtectMode::WIFI_PROTECT_NO_HELD;
|
||||
}
|
||||
|
||||
bool WifiProtectManager::InitWifiProtect(const WifiProtectType &protectType, const std::string &protectName)
|
||||
bool WifiProtectManager::InitWifiProtect(
|
||||
const WifiProtectType &protectType,
|
||||
const std::string &protectName)
|
||||
{
|
||||
WifiProtect* pProtect = new WifiProtect(protectType, WifiProtectMode::WIFI_PROTECT_FULL, protectName);
|
||||
WifiProtect* pProtect = new WifiProtect(protectType,
|
||||
WifiProtectMode::WIFI_PROTECT_FULL, protectName);
|
||||
mWifiProtects.push_back(pProtect);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool WifiProtectManager::GetWifiProtect(const WifiProtectMode &protectMode, const std::string name)
|
||||
bool WifiProtectManager::GetWifiProtect(
|
||||
const WifiProtectMode &protectMode,
|
||||
const std::string name)
|
||||
{
|
||||
LOGD("%{public}s mode: %{public}d, bundlename: %{public}s",
|
||||
__func__, static_cast<int>(protectMode), name.c_str());
|
||||
#ifndef OHOS_ARCH_LITE
|
||||
if (!IsValidProtectMode(protectMode) || name.empty()) {
|
||||
LOGE("Input para protectMode[%{public}d] or name[%{public}s] invalid",
|
||||
static_cast<int>(protectMode), name.c_str());
|
||||
return false;
|
||||
}
|
||||
WifiProtectMode curProtectMode;
|
||||
#endif
|
||||
bool isAlreadyExist = false;
|
||||
|
||||
std::unique_lock<std::mutex> lock(mMutex);
|
||||
std::vector<WifiProtect *>::iterator itor = mWifiProtects.begin();
|
||||
while (itor != mWifiProtects.end()) {
|
||||
if ((*itor)->GetName() == name) {
|
||||
LOGD("old name = %{public}s, and new Name = %{public}s",
|
||||
(*itor)->GetName().c_str(),
|
||||
(*itor)->GetName().c_str());
|
||||
isAlreadyExist = true;
|
||||
#ifndef OHOS_ARCH_LITE
|
||||
curProtectMode = (*itor)->GetProtectMode();
|
||||
#endif
|
||||
break;
|
||||
}
|
||||
itor++;
|
||||
}
|
||||
|
||||
if (isAlreadyExist) {
|
||||
LOGD("attempted to add a protect when already holding one");
|
||||
#ifndef OHOS_ARCH_LITE
|
||||
if (curProtectMode == protectMode) {
|
||||
LOGW("attempted to add a protect when already holding one");
|
||||
return true;
|
||||
} else {
|
||||
LOGE("attempted to add a different protect mode to already holding one,"
|
||||
"please release holded protect first!");
|
||||
return false;
|
||||
}
|
||||
#else
|
||||
LOGE("attempted to add a protect when already holding one");
|
||||
return false;
|
||||
#endif
|
||||
}
|
||||
#ifndef OHOS_ARCH_LITE
|
||||
if (mWifiProtects.size() >= WIFI_PROTECT_APP_MAX_COUNT) {
|
||||
LOGE("Wifi protect app count out of range[%d].", WIFI_PROTECT_APP_MAX_COUNT);
|
||||
return false;
|
||||
}
|
||||
|
||||
WifiProtect *pProtect = new WifiProtect(name);
|
||||
if (pProtect == nullptr) {
|
||||
LOGE("Wifi protect pointer is null.");
|
||||
return false;
|
||||
}
|
||||
pProtect->SetProtectMode(protectMode);
|
||||
return AddProtect(pProtect);
|
||||
#endif
|
||||
return AddProtect(protectMode, name);
|
||||
}
|
||||
|
||||
bool WifiProtectManager::ChangeToPerfMode(bool isEnabled)
|
||||
{
|
||||
std::unique_lock<std::mutex> lock(mMutex);
|
||||
mForceHiPerfMode = isEnabled;
|
||||
mForceLowLatencyMode = false;
|
||||
if (!ChangeWifiPowerMode()) {
|
||||
@ -132,22 +222,55 @@ bool WifiProtectManager::ChangeToPerfMode(bool isEnabled)
|
||||
}
|
||||
void WifiProtectManager::HandleScreenStateChanged(bool screenOn)
|
||||
{
|
||||
|
||||
std::unique_lock<std::mutex> lock(mMutex);
|
||||
mScreenOn = screenOn;
|
||||
LOGD("%{public}s screen is on: %{public}d", __func__, mScreenOn);
|
||||
|
||||
#ifndef OHOS_ARCH_LITE
|
||||
if (ChangeWifiPowerMode()) {
|
||||
LOGE("Failed to update wifi power mode for screen state change");
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
void WifiProtectManager::UpdateWifiClientConnected(bool isConnected)
|
||||
{
|
||||
std::unique_lock<std::mutex> lock(mMutex);
|
||||
mWifiConnected = isConnected;
|
||||
LOGD("%{public}s wifi connected: %{public}d", __func__, mWifiConnected);
|
||||
|
||||
#ifndef OHOS_ARCH_LITE
|
||||
if (ChangeWifiPowerMode()) {
|
||||
LOGE("Failed to update wifi power mode for connect state change");
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
bool WifiProtectManager::AddProtect(WifiProtect *pProtect)
|
||||
bool WifiProtectManager::AddProtect(
|
||||
const WifiProtectMode &protectMode,
|
||||
const std::string &name)
|
||||
{
|
||||
WifiProtect *pProtect = new WifiProtect(name);
|
||||
if (pProtect == nullptr) {
|
||||
LOGE("Wifi protect pointer is null.");
|
||||
return false;
|
||||
}
|
||||
#ifndef OHOS_ARCH_LITE
|
||||
int state = static_cast<int>(AppExecFwk::ApplicationState::APP_STATE_END);
|
||||
if (IsForegroundApplication(name)) {
|
||||
state = static_cast<int>(AppExecFwk::ApplicationState::APP_STATE_FOREGROUND);
|
||||
}
|
||||
LOGD("%{public}s bundle name: %{public}s state: %{public}d",
|
||||
__func__, name.c_str(), state);
|
||||
pProtect->SetAppState(state);
|
||||
#endif
|
||||
pProtect->SetProtectMode(protectMode);
|
||||
|
||||
mWifiProtects.push_back(pProtect);
|
||||
switch (pProtect->GetProtectMode()) {
|
||||
case WifiProtectMode::WIFI_PROTECT_FULL_HIGH_PERF:
|
||||
if (mWifiConnected) {
|
||||
++mFullHighPerfProtectsAcquired;
|
||||
}
|
||||
++mFullHighPerfProtectsAcquired;
|
||||
break;
|
||||
case WifiProtectMode::WIFI_PROTECT_FULL_LOW_LATENCY:
|
||||
++mFullLowLatencyProtectsAcquired;
|
||||
@ -155,25 +278,25 @@ bool WifiProtectManager::AddProtect(WifiProtect *pProtect)
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
ChangeWifiPowerMode();
|
||||
LOGD("GetWifiProtect finished!");
|
||||
return true;
|
||||
return ChangeWifiPowerMode();
|
||||
}
|
||||
|
||||
bool WifiProtectManager::PutWifiProtect(const std::string &name)
|
||||
{
|
||||
LOGI("%{public}s enter bundlename: %{public}s", __func__, name.c_str());
|
||||
if (name.empty()) {
|
||||
LOGE("invalid bundlename: %{public}s", name.c_str());
|
||||
return false;
|
||||
}
|
||||
std::unique_lock<std::mutex> lock(mMutex);
|
||||
WifiProtect *pWifiProtect = RemoveProtect(name);
|
||||
if (pWifiProtect == nullptr) {
|
||||
/* attempting to release a protect that does not exist. */
|
||||
return false;
|
||||
}
|
||||
|
||||
switch (pWifiProtect->GetProtectMode()) {
|
||||
case WifiProtectMode::WIFI_PROTECT_FULL_HIGH_PERF:
|
||||
if (mWifiConnected) {
|
||||
++mFullHighPerfProtectsReleased;
|
||||
}
|
||||
++mFullHighPerfProtectsReleased;
|
||||
break;
|
||||
case WifiProtectMode::WIFI_PROTECT_FULL_LOW_LATENCY:
|
||||
++mFullLowLatencyProtectsReleased;
|
||||
@ -183,12 +306,10 @@ bool WifiProtectManager::PutWifiProtect(const std::string &name)
|
||||
}
|
||||
|
||||
/* Recalculate the operating mode */
|
||||
ChangeWifiPowerMode();
|
||||
LOGD("PutWifiProtect finished!");
|
||||
|
||||
bool ret = ChangeWifiPowerMode();
|
||||
delete pWifiProtect;
|
||||
pWifiProtect = nullptr;
|
||||
return true;
|
||||
return ret;
|
||||
}
|
||||
|
||||
WifiProtect *WifiProtectManager::RemoveProtect(const std::string &name)
|
||||
@ -209,21 +330,28 @@ WifiProtect *WifiProtectManager::RemoveProtect(const std::string &name)
|
||||
bool WifiProtectManager::ChangeWifiPowerMode()
|
||||
{
|
||||
WifiProtectMode newProtectMode = GetNearlyProtectMode();
|
||||
LOGD("%{public}s currMode: %{public}d, newMode: %{public}d",
|
||||
__func__, static_cast<int>(mCurrentOpMode), static_cast<int>(newProtectMode));
|
||||
if (newProtectMode == mCurrentOpMode) {
|
||||
/* No action is needed */
|
||||
LOGI("newProtectMode %{public}d equal to mCurrentOpMode %{public}d, no action is needed",
|
||||
static_cast<int>(newProtectMode), static_cast<int>(mCurrentOpMode));
|
||||
return true;
|
||||
}
|
||||
|
||||
/* Otherwise, we need to change current mode, first reset it to normal */
|
||||
switch (mCurrentOpMode) {
|
||||
case WifiProtectMode::WIFI_PROTECT_FULL_HIGH_PERF:
|
||||
if (!WifiSupplicantHalInterface::GetInstance().SetPowerSave(true)) {
|
||||
LOGE("Failed to reset the OpMode from hi-perf to Normal");
|
||||
if (WifiSupplicantHalInterface::GetInstance().SetPowerSave(true) != WIFI_IDL_OPT_OK) {
|
||||
LOGE("%{public}s Failed to reset the OpMode from hi-perf to Normal", __func__);
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
case WifiProtectMode::WIFI_PROTECT_FULL_LOW_LATENCY:
|
||||
|
||||
if (!SetLowLatencyMode(false)) {
|
||||
LOGE("%{public}s Failed to reset the OpMode from low-latency to normal", __func__);
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
case WifiProtectMode::WIFI_PROTECT_NO_HELD:
|
||||
default:
|
||||
@ -237,40 +365,177 @@ bool WifiProtectManager::ChangeWifiPowerMode()
|
||||
/* Now switch to the new opMode */
|
||||
switch (newProtectMode) {
|
||||
case WifiProtectMode::WIFI_PROTECT_FULL_HIGH_PERF:
|
||||
if (!WifiSupplicantHalInterface::GetInstance().SetPowerSave(false)) {
|
||||
LOGE("Failed to set the OpMode to hi-perf");
|
||||
if (WifiSupplicantHalInterface::GetInstance().SetPowerSave(false) != WIFI_IDL_OPT_OK) {
|
||||
LOGE("%{public}s Failed to set the OpMode to hi-perf", __func__);
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
case WifiProtectMode::WIFI_PROTECT_FULL_LOW_LATENCY:
|
||||
if (!SetLowLatencyMode(true)) {
|
||||
LOGE("Failed to set the OpMode to low-latency");
|
||||
LOGE("%{public}s Failed to set the OpMode to low-latency", __func__);
|
||||
return false;
|
||||
}
|
||||
LOGE("%{public}s unspport wifi protect mode WIFI_PROTECT_FULL_LOW_LATENCY", __func__);
|
||||
break;
|
||||
case WifiProtectMode::WIFI_PROTECT_NO_HELD:
|
||||
/* No action */
|
||||
break;
|
||||
default:
|
||||
/* Invalid mode, don't change currentOpMode , and exit with error */
|
||||
LOGE("Invalid new opMode: %{public}d", (int)newProtectMode);
|
||||
LOGE("%{public}s Invalid new protect Mode: %{public}d",
|
||||
__func__, (int)newProtectMode);
|
||||
return false;
|
||||
}
|
||||
|
||||
/* Now set the mode to the new value */
|
||||
mCurrentOpMode = newProtectMode;
|
||||
LOGD("%{public}s protect mode has been set to %{public}d success.",
|
||||
__func__, static_cast<int>(mCurrentOpMode));
|
||||
return true;
|
||||
}
|
||||
|
||||
bool WifiProtectManager::SetLowLatencyMode(bool enabled)
|
||||
{
|
||||
/* Only set power save mode */
|
||||
if (!WifiSupplicantHalInterface::GetInstance().SetPowerSave(!enabled)) {
|
||||
if (WifiSupplicantHalInterface::GetInstance().SetPowerSave(!enabled) != WIFI_IDL_OPT_OK) {
|
||||
LOGE("Failed to set power save mode");
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
#ifndef OHOS_ARCH_LITE
|
||||
bool WifiProtectManager::IsForegroundApplication(const std::string &BundleName)
|
||||
{
|
||||
bool isForegroud = false;
|
||||
std::vector<AppExecFwk::AppStateData> fgList;
|
||||
if (mAppObject &&
|
||||
mAppObject->GetForegroundApplications(fgList) == static_cast<int32_t>(WIFI_OPT_SUCCESS)) {
|
||||
std::vector<AppExecFwk::AppStateData>::iterator itor = fgList.begin();
|
||||
while (itor != fgList.end()) {
|
||||
LOGD("Match foreground bundle name = %{public}s", (*itor).bundleName.c_str());
|
||||
if ((*itor).bundleName == BundleName) {
|
||||
isForegroud = true;
|
||||
break;
|
||||
}
|
||||
itor++;
|
||||
}
|
||||
}
|
||||
return isForegroud;
|
||||
}
|
||||
|
||||
int WifiProtectManager::GetFgLowlatyProtectCount()
|
||||
{
|
||||
int count = 0;
|
||||
std::vector<WifiProtect *>::iterator iter = mWifiProtects.begin();
|
||||
while (iter != mWifiProtects.end()) {
|
||||
if (static_cast<AppExecFwk::ApplicationState>((*iter)->GetAppState()) ==
|
||||
AppExecFwk::ApplicationState::APP_STATE_FOREGROUND &&
|
||||
(*iter)->GetProtectMode() == WifiProtectMode::WIFI_PROTECT_FULL_LOW_LATENCY) {
|
||||
count += 1;
|
||||
LOGD("%{public}s bundlename %{public}s state %{public}d.",
|
||||
__func__, (*iter)->GetName().c_str(), (*iter)->GetAppState());
|
||||
}
|
||||
iter++;
|
||||
}
|
||||
return count;
|
||||
}
|
||||
|
||||
void WifiProtectManager::RegisterAppStateObserver()
|
||||
{
|
||||
LOGD("%{public}s called", __func__);
|
||||
auto appMgrClient = std::make_unique<AppExecFwk::AppMgrClient>();
|
||||
mAppStateObserver = sptr<AppStateObserver>(new (std::nothrow) AppStateObserver());
|
||||
int regAppStatusObsRetry = 0;
|
||||
while (appMgrClient->ConnectAppMgrService() != AppExecFwk::AppMgrResultCode::RESULT_OK) {
|
||||
LOGE("ConnectAppMgrService fail, try again! retryTimes=%{public}d", ++regAppStatusObsRetry);
|
||||
}
|
||||
auto systemAbilityManager = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();
|
||||
mAppObject = iface_cast<AppExecFwk::IAppMgr>(systemAbilityManager->GetSystemAbility(APP_MGR_SERVICE_ID));
|
||||
if (mAppObject) {
|
||||
int ret = mAppObject->RegisterApplicationStateObserver(mAppStateObserver);
|
||||
if (ret == ERR_OK) {
|
||||
LOGI("register application state observer success.");
|
||||
return;
|
||||
}
|
||||
LOGE("register application state observer fail, ret = %{public}d", ret);
|
||||
return;
|
||||
}
|
||||
LOGE("get SystemAbilityManager fail");
|
||||
}
|
||||
|
||||
void WifiProtectManager::OnAppDied(const std::string bundlename)
|
||||
{
|
||||
LOGI("Enter %{public}s, remove app bundlename %{public}s.",
|
||||
__func__, bundlename.c_str());
|
||||
std::unique_lock<std::mutex> lock(mMutex);
|
||||
bool needUpdate = false;
|
||||
std::vector<WifiProtect *>::iterator iter = mWifiProtects.begin();
|
||||
while (iter != mWifiProtects.end()) {
|
||||
if ((*iter)->GetName() == bundlename) {
|
||||
mWifiProtects.erase(iter);
|
||||
needUpdate = true;
|
||||
LOGI("%{public}s, remove app bundlename %{public}s.",
|
||||
__func__, bundlename.c_str());
|
||||
break;
|
||||
}
|
||||
iter++;
|
||||
}
|
||||
if (needUpdate) {
|
||||
ChangeWifiPowerMode();
|
||||
}
|
||||
}
|
||||
|
||||
void WifiProtectManager::OnAppForegroudChanged(const std::string &bundleName, int state)
|
||||
{
|
||||
std::unique_lock<std::mutex> lock(mMutex);
|
||||
bool needUpdate = false;
|
||||
std::vector<WifiProtect *>::iterator iter = mWifiProtects.begin();
|
||||
while (iter != mWifiProtects.end()) {
|
||||
if ((*iter)->GetName() == bundleName) {
|
||||
(*iter)->SetAppState(state);
|
||||
needUpdate = true;
|
||||
LOGD("%{public}s, foreground change bundleName %{public}s state %{public}d.",
|
||||
__func__, bundleName.c_str(), state);
|
||||
break;
|
||||
}
|
||||
iter++;
|
||||
}
|
||||
if (needUpdate) {
|
||||
ChangeWifiPowerMode();
|
||||
}
|
||||
}
|
||||
|
||||
void AppStateObserver::OnAppStarted(const AppExecFwk::AppStateData &appStateData)
|
||||
{
|
||||
LOGD("%{public}s bundleName: %{public}s, uid: %{public}d, state: %{public}d, isFocused: %{public}d",
|
||||
__func__, appStateData.bundleName.c_str(), appStateData.uid,
|
||||
appStateData.state, appStateData.isFocused);
|
||||
}
|
||||
|
||||
void AppStateObserver::OnAppStopped(const AppExecFwk::AppStateData &appStateData)
|
||||
{
|
||||
LOGI("%{public}s bundleName: %{public}s, uid: %{public}d, state: %{public}d, isFocused: %{public}d",
|
||||
__func__, appStateData.bundleName.c_str(), appStateData.uid,
|
||||
appStateData.state, appStateData.isFocused);
|
||||
|
||||
if (appStateData.bundleName.empty()) {
|
||||
LOGE("App bundle name is empty");
|
||||
return;
|
||||
}
|
||||
WifiProtectManager::GetInstance().OnAppDied(appStateData.bundleName);
|
||||
return;
|
||||
}
|
||||
|
||||
void AppStateObserver::OnForegroundApplicationChanged(const AppExecFwk::AppStateData &appStateData)
|
||||
{
|
||||
LOGI("%{public}s bundleName: %{public}s, uid: %{public}d, state: %{public}d, isFocused: %{public}d",
|
||||
__func__, appStateData.bundleName.c_str(), appStateData.uid,
|
||||
appStateData.state, appStateData.isFocused);
|
||||
|
||||
WifiProtectManager::GetInstance().OnAppForegroudChanged(
|
||||
appStateData.bundleName, appStateData.state);
|
||||
}
|
||||
#endif
|
||||
} // namespace Wifi
|
||||
} // namespace OHOS
|
||||
} // namespace OHOS
|
||||
|
@ -20,8 +20,20 @@
|
||||
#include "wifi_protect.h"
|
||||
#include "wifi_msg.h"
|
||||
|
||||
#ifndef OHOS_ARCH_LITE
|
||||
#include "application_state_observer_stub.h"
|
||||
#include "app_state_data.h"
|
||||
#include "ipc_skeleton.h"
|
||||
#include "event_handler.h"
|
||||
#include "event_runner.h"
|
||||
#include "app_mgr_interface.h"
|
||||
#endif
|
||||
|
||||
namespace OHOS {
|
||||
namespace Wifi {
|
||||
#ifndef OHOS_ARCH_LITE
|
||||
class AppStateObserver;
|
||||
#endif
|
||||
class WifiProtectManager {
|
||||
public:
|
||||
~WifiProtectManager();
|
||||
@ -34,7 +46,7 @@ public:
|
||||
* @return true - valid
|
||||
* @return false - invalid
|
||||
*/
|
||||
static bool IsValidProtectMode(WifiProtectMode &protectMode);
|
||||
static bool IsValidProtectMode(const WifiProtectMode &protectMode);
|
||||
|
||||
/**
|
||||
* @Description Get the nearly protect type currently held by the WifiProtectManager
|
||||
@ -102,28 +114,69 @@ public:
|
||||
* @return bool - operation result
|
||||
*/
|
||||
bool SetLowLatencyMode(bool enabled);
|
||||
|
||||
bool ChangeWifiPowerMode();
|
||||
#ifndef OHOS_ARCH_LITE
|
||||
void RegisterAppStateObserver();
|
||||
void OnAppDied(const std::string bundlename);
|
||||
void OnAppForegroudChanged(const std::string &bundleName, int state);
|
||||
#endif
|
||||
private:
|
||||
WifiProtectManager();
|
||||
bool AddProtect(WifiProtect *pProtect);
|
||||
bool AddProtect(const WifiProtectMode &protectMode, const std::string &name);
|
||||
bool ReleaseProtect(const std::string &name);
|
||||
WifiProtect *RemoveProtect(const std::string &name);
|
||||
bool ChangeWifiPowerMode();
|
||||
|
||||
#ifndef OHOS_ARCH_LITE
|
||||
int GetFgLowlatyProtectCount();
|
||||
bool IsForegroundApplication(const std::string &BundleName);
|
||||
#endif
|
||||
private:
|
||||
std::vector<WifiProtect *> mWifiProtects;
|
||||
WifiProtectMode mCurrentOpMode;
|
||||
int mFullHighPerfProtectsAcquired;
|
||||
int mFullHighPerfProtectsReleased;
|
||||
int mFullLowLatencyProtectsAcquired;
|
||||
int mFullLowLatencyProtectsReleased;
|
||||
WifiProtectMode mCurrentOpMode {WifiProtectMode::WIFI_PROTECT_NO_HELD};
|
||||
int mFullHighPerfProtectsAcquired {0};
|
||||
int mFullHighPerfProtectsReleased {0};
|
||||
int mFullLowLatencyProtectsAcquired {0};
|
||||
int mFullLowLatencyProtectsReleased {0};
|
||||
/* Not used: long mCurrentSessionStartTimeMs; */
|
||||
bool mWifiConnected;
|
||||
bool mScreenOn;
|
||||
bool mForceHiPerfMode;
|
||||
bool mForceLowLatencyMode;
|
||||
bool mWifiConnected {false};
|
||||
bool mScreenOn {false};
|
||||
bool mForceHiPerfMode {false};
|
||||
bool mForceLowLatencyMode {false};
|
||||
std::mutex mMutex;
|
||||
#ifndef OHOS_ARCH_LITE
|
||||
std::shared_ptr<AppExecFwk::EventRunner> mAppChangeEventRunner {nullptr};
|
||||
std::shared_ptr<AppExecFwk::EventHandler> mAppChangeEventHandler {nullptr};
|
||||
sptr<AppStateObserver> mAppStateObserver {nullptr};
|
||||
sptr<AppExecFwk::IAppMgr> mAppObject {nullptr};
|
||||
#endif
|
||||
};
|
||||
|
||||
#ifndef OHOS_ARCH_LITE
|
||||
class AppStateObserver : public AppExecFwk::ApplicationStateObserverStub {
|
||||
public:
|
||||
/**
|
||||
* Will be called when the application start.
|
||||
*
|
||||
* @param appStateData Application state data.
|
||||
*/
|
||||
virtual void OnAppStarted(const AppExecFwk::AppStateData &appStateData) override;
|
||||
|
||||
/**
|
||||
* Will be called when the application stop.
|
||||
*
|
||||
* @param appStateData Application state data.
|
||||
*/
|
||||
virtual void OnAppStopped(const AppExecFwk::AppStateData &appStateData) override;
|
||||
|
||||
/**
|
||||
* Application foreground state changed callback.
|
||||
*
|
||||
* @param appStateData Application Process data.
|
||||
*/
|
||||
virtual void OnForegroundApplicationChanged(const AppExecFwk::AppStateData &appStateData) override;
|
||||
};
|
||||
#endif
|
||||
|
||||
} // namespace Wifi
|
||||
} // namespace OHOS
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
@ -205,6 +205,15 @@ public:
|
||||
* @return WifiErrorNo
|
||||
*/
|
||||
virtual ErrCode SetSuspendMode(bool mode) = 0;
|
||||
|
||||
/**
|
||||
* @Description send power mode for wpa.
|
||||
*
|
||||
* @param mode: true for power, false for resume.
|
||||
* @return WifiErrorNo
|
||||
*/
|
||||
virtual ErrCode SetPowerMode(bool mode) = 0;
|
||||
|
||||
/**
|
||||
* @Description systemabilitychanged
|
||||
*
|
||||
|
@ -86,7 +86,7 @@ typedef enum EnumStaNetState {
|
||||
NETWORK_STATE_UNKNOWN,
|
||||
NETWORK_STATE_WORKING,
|
||||
NETWORK_CHECK_PORTAL,
|
||||
NETWORK_STATE_NOWORKING,
|
||||
NETWORK_STATE_NOINTERNET,
|
||||
NETWORK_STATE_BUTT,
|
||||
} StaNetState;
|
||||
|
||||
|
@ -301,6 +301,18 @@ ErrCode StaInterface::SetSuspendMode(bool mode)
|
||||
return WIFI_OPT_SUCCESS;
|
||||
}
|
||||
|
||||
ErrCode StaInterface::SetPowerMode(bool mode)
|
||||
{
|
||||
LOGI("Enter StaInterface::SetPowerMode, mode=[%{public}d]!", mode);
|
||||
std::lock_guard<std::mutex> lock(mutex);
|
||||
CHECK_NULL_AND_RETURN(pStaService, WIFI_OPT_FAILED);
|
||||
if (pStaService->SetPowerMode(mode) != WIFI_OPT_SUCCESS) {
|
||||
LOGE("SetPowerMode() failed!");
|
||||
return WIFI_OPT_FAILED;
|
||||
}
|
||||
return WIFI_OPT_SUCCESS;
|
||||
}
|
||||
|
||||
ErrCode StaInterface::OnSystemAbilityChanged(int systemAbilityid, bool add)
|
||||
{
|
||||
LOGI("Enter StaInterface::OnSystemAbilityChanged, id[%{public}d], mode=[%{public}d]!",
|
||||
|
@ -205,6 +205,14 @@ public:
|
||||
*/
|
||||
virtual ErrCode SetSuspendMode(bool mode) override;
|
||||
|
||||
/**
|
||||
* @Description send power mode for wpa.
|
||||
*
|
||||
* @param mode: true for power, false for resume.
|
||||
* @return WifiErrorNo
|
||||
*/
|
||||
virtual ErrCode SetPowerMode(bool mode) override;
|
||||
|
||||
/**
|
||||
* @Description systemabilitychanged
|
||||
*
|
||||
|
@ -32,6 +32,7 @@ constexpr int MAX_ARP_DNS_CHECK_INTERVAL = 5;
|
||||
constexpr int MAX_ARP_DNS_CHECK_TIME = 1000;
|
||||
constexpr int MAX_RESULT_NUM = 2;
|
||||
constexpr int PORTAL_CONTENT_LENGTH_MIN = 4;
|
||||
constexpr int TIME_OUT_COUNT = 4000;
|
||||
|
||||
StaNetworkCheck::StaNetworkCheck(NetStateHandler nethandle, ArpStateHandler arpHandle, DnsStateHandler dnsHandle,
|
||||
int instId)
|
||||
@ -108,10 +109,10 @@ void StaNetworkCheck::CheckResponseCode(std::string url, int codeNum, int contLe
|
||||
WIFI_LOGI("This network is portal AP, need certification!");
|
||||
netStateHandler(StaNetState::NETWORK_CHECK_PORTAL, url);
|
||||
lastNetState = NETWORK_CHECK_PORTAL;
|
||||
} else if (isHttps && (lastNetState.load() != NETWORK_STATE_NOWORKING) &&
|
||||
} else if (isHttps && (lastNetState.load() != NETWORK_STATE_NOINTERNET) &&
|
||||
(lastNetState.load() != NETWORK_CHECK_PORTAL)) {
|
||||
WIFI_LOGE("http detect network not working!");
|
||||
lastNetState = NETWORK_STATE_NOWORKING;
|
||||
lastNetState = NETWORK_STATE_NOINTERNET;
|
||||
} else {
|
||||
WIFI_LOGE("http detect unknow network!");
|
||||
}
|
||||
@ -227,11 +228,11 @@ void StaNetworkCheck::RunNetCheckThreadFunc()
|
||||
static_cast<int>(bakNetState));
|
||||
if (bakDetectFinsh && mainDetectFinsh &&
|
||||
((mainNetState != NETWORK_CHECK_PORTAL && mainNetState != NETWORK_STATE_WORKING &&
|
||||
bakNetState == NETWORK_STATE_NOWORKING) ||
|
||||
bakNetState == NETWORK_STATE_NOINTERNET) ||
|
||||
(bakNetState != NETWORK_CHECK_PORTAL && bakNetState != NETWORK_STATE_WORKING &&
|
||||
mainNetState == NETWORK_STATE_NOWORKING))) {
|
||||
mainNetState == NETWORK_STATE_NOINTERNET))) {
|
||||
WIFI_LOGE("http detect result is not working!");
|
||||
netStateHandler(StaNetState::NETWORK_STATE_NOWORKING, "");
|
||||
netStateHandler(StaNetState::NETWORK_STATE_NOINTERNET, "");
|
||||
if (!arpChecker.DoArpCheck(MAX_ARP_DNS_CHECK_TIME, true)) {
|
||||
LOGI("RunNetCheckThreadFunc arp check failed.");
|
||||
arpStateHandler(StaArpState::ARP_STATE_UNREACHABLE);
|
||||
@ -322,9 +323,20 @@ void StaNetworkCheck::SignalNetCheckThread()
|
||||
|
||||
void StaNetworkCheck::ExitNetCheckThread()
|
||||
{
|
||||
WIFI_LOGI("enter StaNetworkCheck::ExitNetCheckThread");
|
||||
int timeout = TIME_OUT_COUNT;
|
||||
isStopNetCheck = false;
|
||||
isExitNetCheckThread = true;
|
||||
while (!isExited) {
|
||||
timeout--;
|
||||
if (timeout < 0) {
|
||||
if (pDealNetCheckThread != nullptr) {
|
||||
delete pDealNetCheckThread;
|
||||
pDealNetCheckThread = nullptr;
|
||||
}
|
||||
WIFI_LOGI("StaNetworkCheck::ExitNetCheckThread TimeOut Exit");
|
||||
return;
|
||||
}
|
||||
isExitNetCheckThread = true;
|
||||
mCondition.notify_one();
|
||||
mCondition_timeout.notify_one();
|
||||
|
@ -31,8 +31,6 @@ DEFINE_WIFILOG_LABEL("StaService");
|
||||
|
||||
namespace OHOS {
|
||||
namespace Wifi {
|
||||
const std::string CLASS_NAME = "sta_service";
|
||||
|
||||
StaService::StaService(int instId)
|
||||
: pStaStateMachine(nullptr), pStaMonitor(nullptr), pStaAutoConnectService(nullptr), m_instId(instId)
|
||||
{}
|
||||
@ -142,7 +140,8 @@ ErrCode StaService::EnableWifi()
|
||||
WIFI_LOGI("Enter EnableWifi.\n");
|
||||
#ifndef OHOS_ARCH_LITE
|
||||
// notification of registration country code change
|
||||
m_staObserver = std::make_shared<WifiCountryCodeChangeObserver>(CLASS_NAME, *pStaStateMachine);
|
||||
std::string moduleName = "StaService_" + std::to_string(m_instId);
|
||||
m_staObserver = std::make_shared<WifiCountryCodeChangeObserver>(moduleName, *pStaStateMachine);
|
||||
WifiCountryCodeManager::GetInstance().RegisterWifiCountryCodeChangeListener(m_staObserver);
|
||||
#endif
|
||||
CHECK_NULL_AND_RETURN(pStaStateMachine, WIFI_OPT_FAILED);
|
||||
@ -490,6 +489,16 @@ ErrCode StaService::SetSuspendMode(bool mode) const
|
||||
return WIFI_OPT_SUCCESS;
|
||||
}
|
||||
|
||||
ErrCode StaService::SetPowerMode(bool mode) const
|
||||
{
|
||||
LOGI("Enter SetPowerMode, mode=[%{public}d]!", mode);
|
||||
if (WifiSupplicantHalInterface::GetInstance().WpaSetPowerMode(mode) != WIFI_IDL_OPT_OK) {
|
||||
LOGE("SetPowerMode() failed!");
|
||||
return WIFI_OPT_FAILED;
|
||||
}
|
||||
return WIFI_OPT_SUCCESS;
|
||||
}
|
||||
|
||||
void StaService::NotifyDeviceConfigChange(ConfigChange value) const
|
||||
{
|
||||
WIFI_LOGI("Notify device config change: %{public}d\n", static_cast<int>(value));
|
||||
|
@ -216,6 +216,15 @@ public:
|
||||
*/
|
||||
virtual ErrCode SetSuspendMode(bool mode) const;
|
||||
|
||||
/**
|
||||
* @Description Set power mode to wpa
|
||||
*
|
||||
* @param mode - true for power mode, false for resume mode
|
||||
*
|
||||
* @Return success: WIFI_OPT_SUCCESS, fail: WIFI_OPT_FAILED
|
||||
*/
|
||||
virtual ErrCode SetPowerMode(bool mode) const;
|
||||
|
||||
/**
|
||||
* @Description systemabilitychanged
|
||||
*
|
||||
|
@ -272,59 +272,59 @@ void StaStateMachine::BuildStateTree()
|
||||
void StaStateMachine::RegisterStaServiceCallback(const StaServiceCallback &callback)
|
||||
{
|
||||
WIFI_LOGI("RegisterStaServiceCallback, callback module name: %{public}s", callback.callbackModuleName.c_str());
|
||||
m_staCallback.insert(callback);
|
||||
m_staCallback.insert_or_assign(callback.callbackModuleName, callback);
|
||||
}
|
||||
|
||||
void StaStateMachine::InvokeOnStaOpenRes(OperateResState state)
|
||||
{
|
||||
for (const auto &callBackItem : m_staCallback) {
|
||||
if (callBackItem.OnStaOpenRes != nullptr) {
|
||||
callBackItem.OnStaOpenRes(state, m_instId);
|
||||
if (callBackItem.second.OnStaOpenRes != nullptr) {
|
||||
callBackItem.second.OnStaOpenRes(state, m_instId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void StaStateMachine::InvokeOnStaCloseRes(OperateResState state)
|
||||
{
|
||||
for (const auto &callBackItem : m_staCallback) {
|
||||
if (callBackItem.OnStaCloseRes != nullptr) {
|
||||
callBackItem.OnStaCloseRes(state, m_instId);
|
||||
for (const auto &callBackItem : m_staCallback) {
|
||||
if (callBackItem.second.OnStaCloseRes != nullptr) {
|
||||
callBackItem.second.OnStaCloseRes(state, m_instId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void StaStateMachine::InvokeOnStaConnChanged(OperateResState state, const WifiLinkedInfo &info)
|
||||
{
|
||||
for (const auto &callBackItem : m_staCallback) {
|
||||
if (callBackItem.OnStaConnChanged != nullptr) {
|
||||
callBackItem.OnStaConnChanged(state, info, m_instId);
|
||||
for (const auto &callBackItem : m_staCallback) {
|
||||
if (callBackItem.second.OnStaConnChanged != nullptr) {
|
||||
callBackItem.second.OnStaConnChanged(state, info, m_instId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void StaStateMachine::InvokeOnWpsChanged(WpsStartState state, const int code)
|
||||
{
|
||||
for (const auto &callBackItem : m_staCallback) {
|
||||
if (callBackItem.OnWpsChanged != nullptr) {
|
||||
callBackItem.OnWpsChanged(state, code, m_instId);
|
||||
for (const auto &callBackItem : m_staCallback) {
|
||||
if (callBackItem.second.OnWpsChanged != nullptr) {
|
||||
callBackItem.second.OnWpsChanged(state, code, m_instId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void StaStateMachine::InvokeOnStaStreamChanged(StreamDirection direction)
|
||||
{
|
||||
for (const auto &callBackItem : m_staCallback) {
|
||||
if (callBackItem.OnStaStreamChanged != nullptr) {
|
||||
callBackItem.OnStaStreamChanged(direction, m_instId);
|
||||
for (const auto &callBackItem : m_staCallback) {
|
||||
if (callBackItem.second.OnStaStreamChanged != nullptr) {
|
||||
callBackItem.second.OnStaStreamChanged(direction, m_instId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void StaStateMachine::InvokeOnStaRssiLevelChanged(int level)
|
||||
{
|
||||
for (const auto &callBackItem : m_staCallback) {
|
||||
if (callBackItem.OnStaRssiLevelChanged != nullptr) {
|
||||
callBackItem.OnStaRssiLevelChanged(level, m_instId);
|
||||
for (const auto &callBackItem : m_staCallback) {
|
||||
if (callBackItem.second.OnStaRssiLevelChanged != nullptr) {
|
||||
callBackItem.second.OnStaRssiLevelChanged(level, m_instId);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -839,6 +839,7 @@ void StaStateMachine::DealSignalPollResult(InternalMessage *msg)
|
||||
LOGI("DealSignalPollResult currentSignalLevel:%{public}d, lastSignalLevel:%{public}d.\n",
|
||||
currentSignalLevel, lastSignalLevel);
|
||||
if (currentSignalLevel != lastSignalLevel) {
|
||||
WifiSettings::GetInstance().SaveLinkedInfo(linkedInfo, m_instId);
|
||||
InvokeOnStaRssiLevelChanged(linkedInfo.rssi);
|
||||
#ifndef OHOS_ARCH_LITE
|
||||
if (NetSupplierInfo != nullptr) {
|
||||
@ -1039,6 +1040,9 @@ void StaStateMachine::DealConnectionEvent(InternalMessage *msg)
|
||||
/* Callback result to InterfaceService. */
|
||||
InvokeOnStaConnChanged(OperateResState::CONNECT_OBTAINING_IP, linkedInfo);
|
||||
|
||||
if (WifiSupplicantHalInterface::GetInstance().WpaSetPowerMode(true) != WIFI_IDL_OPT_OK) {
|
||||
LOGE("DealConnectionEvent WpaSetPowerMode() failed!");
|
||||
}
|
||||
/* The current state of StaStateMachine transfers to GetIpState. */
|
||||
SwitchState(pGetIpState);
|
||||
WifiSettings::GetInstance().SetUserLastSelectedNetworkId(INVALID_NETWORK_ID, m_instId);
|
||||
@ -1766,6 +1770,7 @@ void StaStateMachine::DisConnectProcess()
|
||||
InvokeOnStaConnChanged(OperateResState::DISCONNECT_DISCONNECTING, linkedInfo);
|
||||
if (WifiStaHalInterface::GetInstance().Disconnect() == WIFI_IDL_OPT_OK) {
|
||||
WIFI_LOGI("Disconnect() succeed!");
|
||||
mPortalUrl = "";
|
||||
#ifndef OHOS_ARCH_LITE
|
||||
if (NetSupplierInfo != nullptr) {
|
||||
NetSupplierInfo->isAvailable_ = false;
|
||||
@ -2106,7 +2111,7 @@ void StaStateMachine::HandleNetCheckResult(StaNetState netState, const std::stri
|
||||
WIFI_LOGE("connState is NOT in connected state, connState:%{public}d\n", linkedInfo.connState);
|
||||
return;
|
||||
}
|
||||
|
||||
mPortalUrl = portalUrl;
|
||||
if (netState == StaNetState::NETWORK_STATE_WORKING) {
|
||||
WIFI_LOGI("HandleNetCheckResult network state is working\n");
|
||||
/* Save connection information to WifiSettings. */
|
||||
@ -2119,7 +2124,6 @@ void StaStateMachine::HandleNetCheckResult(StaNetState netState, const std::stri
|
||||
} else if (netState == StaNetState::NETWORK_CHECK_PORTAL) {
|
||||
WifiLinkedInfo linkedInfo;
|
||||
GetLinkedInfo(linkedInfo);
|
||||
mPortalUrl = portalUrl;
|
||||
if (linkedInfo.detailedState != DetailedState::CAPTIVE_PORTAL_CHECK) {
|
||||
HandlePortalNetworkPorcess();
|
||||
}
|
||||
@ -2382,6 +2386,10 @@ void StaStateMachine::DealNetworkCheck(InternalMessage *msg)
|
||||
LOGE("pNetcheck is null.");
|
||||
return;
|
||||
}
|
||||
if (linkedInfo.connState != ConnState::CONNECTED) {
|
||||
WIFI_LOGE("DealNetworkCheck NOT in connected state, connState:%{public}d\n", linkedInfo.connState);
|
||||
return;
|
||||
}
|
||||
pNetcheck->SignalNetCheckThread();
|
||||
}
|
||||
|
||||
@ -2462,6 +2470,10 @@ void StaStateMachine::DhcpResultNotify::OnSuccess(int status, const std::string
|
||||
LOGI("StartTimer CMD_START_RENEWAL_TIMEOUT interval=%{public}lld", interval);
|
||||
pStaStateMachine->StartTimer(static_cast<int>(CMD_START_RENEWAL_TIMEOUT), interval);
|
||||
}
|
||||
|
||||
if (WifiSupplicantHalInterface::GetInstance().WpaSetPowerMode(false) != WIFI_IDL_OPT_OK) {
|
||||
LOGE("DhcpResultNotify OnSuccess WpaSetPowerMode() failed!");
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -560,6 +560,7 @@ private:
|
||||
*/
|
||||
void SetOperationalMode(int mode);
|
||||
void SetSuspendMode(bool enabled);
|
||||
void SetPowerMode(bool mode);
|
||||
void SetPowerSave(bool enabled);
|
||||
/**
|
||||
* @Description Configure static ipaddress.
|
||||
@ -773,13 +774,7 @@ private:
|
||||
|
||||
private:
|
||||
StaSmHandleFuncMap staSmHandleFuncMap;
|
||||
struct CallbackModuleNameCmp {
|
||||
bool operator() (const StaServiceCallback &cb1, const StaServiceCallback &cb2) const
|
||||
{
|
||||
return strcasecmp(cb1.callbackModuleName.c_str(), cb2.callbackModuleName.c_str()) < 0;
|
||||
}
|
||||
};
|
||||
std::set<StaServiceCallback, CallbackModuleNameCmp> m_staCallback;
|
||||
std::map<std::string, StaServiceCallback> m_staCallback;
|
||||
#ifndef OHOS_ARCH_LITE
|
||||
sptr<NetManagerStandard::NetSupplierInfo> NetSupplierInfo;
|
||||
#endif
|
||||
|
@ -49,6 +49,7 @@ WifiSettings::WifiSettings()
|
||||
mLastSelectedTimeVal(0),
|
||||
mScreenState(MODE_STATE_OPEN),
|
||||
mAirplaneModeState(MODE_STATE_CLOSE),
|
||||
mDeviceProvision(MODE_STATE_OPEN),
|
||||
mAppRunningModeState(ScanMode::SYS_FOREGROUND_SCAN),
|
||||
mPowerSavingModeState(MODE_STATE_CLOSE),
|
||||
mFreezeModeState(MODE_STATE_CLOSE),
|
||||
@ -1770,7 +1771,7 @@ int WifiSettings::SetConnectTimeoutBssid(std::string &bssid, int instId)
|
||||
void WifiSettings::SetDefaultFrequenciesByCountryBand(const BandType band, std::vector<int> &frequencies, int instId)
|
||||
{
|
||||
for (auto& item : g_countryDefaultFreqs) {
|
||||
if (item.countryCode == m_countryCode && item.band == band) {
|
||||
if (item.band == band) {
|
||||
frequencies = item.freqs;
|
||||
}
|
||||
}
|
||||
|
@ -44,6 +44,20 @@ void HdiStaUnInit();
|
||||
*/
|
||||
WifiErrorNo HdiStartScan(const ScanSettings *settings);
|
||||
|
||||
/**
|
||||
* @Description start pno scan wifi info.
|
||||
*
|
||||
* @return WifiErrorNo - operation result
|
||||
*/
|
||||
WifiErrorNo HdiStartPnoScan(const PnoScanSettings *settings);
|
||||
|
||||
/**
|
||||
* @Description stop pno scan wifi info.
|
||||
*
|
||||
* @return WifiErrorNo - operation result
|
||||
*/
|
||||
WifiErrorNo HdiStopPnoScan(void);
|
||||
|
||||
/**
|
||||
* @Description Get the scan infos from saved info.
|
||||
*
|
||||
|
@ -33,6 +33,9 @@
|
||||
#undef LOG_TAG
|
||||
#define LOG_TAG "WifiHdiStaImpl"
|
||||
|
||||
#define WIFI_PNO_SCAN_ITERATIONS 3
|
||||
#define WIFI_PNO_SCAN_SECOND_TO_MS 1000
|
||||
|
||||
#define WIFI_IDL_GET_MAX_SCAN_INFO 256 /* Maximum number of scan infos obtained at a time */
|
||||
|
||||
#ifndef CHECK_STA_HDI_PROXY_AND_RETURN
|
||||
@ -188,6 +191,66 @@ finish:
|
||||
return (ret == 0) ? WIFI_HAL_SUCCESS : WIFI_HAL_FAILED;
|
||||
}
|
||||
|
||||
WifiErrorNo HdiStartPnoScan(const PnoScanSettings * settings)
|
||||
{
|
||||
LOGI("HdiStartPnoScan enter.");
|
||||
int32_t ret = 0;
|
||||
WifiHdiProxy proxy = GetHdiProxy(PROTOCOL_80211_IFTYPE_STATION);
|
||||
CHECK_HDI_PROXY_AND_RETURN(proxy, WIFI_HAL_FAILED);
|
||||
const char *ifName = "wlan0";
|
||||
struct PnoSettings pnoSettings;
|
||||
(void)memset_s(&pnoSettings, sizeof(struct PnoSettings), 0, sizeof(struct PnoSettings));
|
||||
if (settings->savedSsidSize > 0) {
|
||||
pnoSettings.min2gRssi = settings->minRssi2Dot4Ghz;
|
||||
pnoSettings.min5gRssi = settings->minRssi5Ghz;
|
||||
pnoSettings.scanIntervalMs = settings->scanInterval * WIFI_PNO_SCAN_SECOND_TO_MS;
|
||||
pnoSettings.scanIterations = WIFI_PNO_SCAN_ITERATIONS;
|
||||
|
||||
pnoSettings.pnoNetworksLen = settings->savedSsidSize;
|
||||
int size = sizeof(struct PnoNetwork) * pnoSettings.pnoNetworksLen;
|
||||
pnoSettings.pnoNetworks = (struct PnoNetwork *)malloc(size);
|
||||
if (pnoSettings.pnoNetworks == NULL) {
|
||||
LOGE("HdiStartPnoScan malloc pno network failed.");
|
||||
return WIFI_HAL_FAILED;
|
||||
}
|
||||
(void)memset_s(pnoSettings.pnoNetworks, size, 0, size);
|
||||
for (size_t i = 0; i < pnoSettings.pnoNetworksLen; i++) {
|
||||
pnoSettings.pnoNetworks[i].isHidden = 0;
|
||||
pnoSettings.pnoNetworks[i].ssid.ssidLen = strlen(settings->savedSsid[i]) + 1;
|
||||
pnoSettings.pnoNetworks[i].ssid.ssid = settings->savedSsid[i];
|
||||
pnoSettings.pnoNetworks[i].freqsLen = settings->freqSize;
|
||||
pnoSettings.pnoNetworks[i].freqs = settings->freqs;
|
||||
}
|
||||
}
|
||||
|
||||
ret = proxy.wlanObj->StartPnoScan(proxy.wlanObj, ifName, &pnoSettings);
|
||||
if (ret != 0) {
|
||||
LOGE("HdiStartPnoScan failed ret:%{public}d.", ret);
|
||||
}
|
||||
if (pnoSettings.pnoNetworks != NULL) {
|
||||
free(pnoSettings.pnoNetworks);
|
||||
pnoSettings.pnoNetworks = NULL;
|
||||
}
|
||||
|
||||
return (ret == 0) ? WIFI_HAL_SUCCESS : WIFI_HAL_FAILED;
|
||||
}
|
||||
|
||||
WifiErrorNo HdiStopPnoScan(void)
|
||||
{
|
||||
LOGI("HdiStopPnoScan enter.");
|
||||
int32_t ret = 0;
|
||||
WifiHdiProxy proxy = GetHdiProxy(PROTOCOL_80211_IFTYPE_STATION);
|
||||
CHECK_HDI_PROXY_AND_RETURN(proxy, WIFI_HAL_FAILED);
|
||||
const char *ifName = "wlan0";
|
||||
ret = proxy.wlanObj->StopPnoScan(proxy.wlanObj, ifName);
|
||||
if (ret != 0) {
|
||||
LOGE("HdiStopPnoScan failed ret:%{public}d.", ret);
|
||||
return WIFI_HAL_FAILED;
|
||||
}
|
||||
|
||||
return WIFI_HAL_SUCCESS;
|
||||
}
|
||||
|
||||
WifiErrorNo GetHdiScanInfos(ScanInfo* infos, int *size)
|
||||
{
|
||||
if (infos == NULL || size == NULL || *size == 0) {
|
||||
|
@ -927,7 +927,8 @@ int RpcP2pHid2dConnect(RpcServer *server, Context *context)
|
||||
if (ReadStr(context, info.ssid, sizeof(info.ssid)) != 0 ||
|
||||
ReadStr(context, info.bssid, sizeof(info.bssid)) != 0 ||
|
||||
ReadStr(context, info.passphrase, sizeof(info.passphrase)) != 0 ||
|
||||
ReadInt(context, &info.frequency) < 0) {
|
||||
ReadInt(context, &info.frequency) < 0 ||
|
||||
ReadInt(context, &info.isLegacyGo) < 0) {
|
||||
return HAL_FAILURE;
|
||||
}
|
||||
WifiErrorNo err = P2pHid2dConnect(&info);
|
||||
|
@ -167,6 +167,7 @@ static int InitRpcFuncMapSta(void)
|
||||
ret += PushRpcFunc("GetNetworkList", RpcGetNetworkList);
|
||||
ret += PushRpcFunc("GetConnectSignalInfo", RpcGetConnectSignalInfo);
|
||||
ret += PushRpcFunc("SetSuspendMode", RpcSetSuspendMode);
|
||||
ret += PushRpcFunc("SetPowerMode", RpcSetPowerMode);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -944,3 +944,20 @@ int RpcSetSuspendMode(RpcServer *server, Context *context)
|
||||
WriteEnd(context);
|
||||
return HAL_SUCCESS;
|
||||
}
|
||||
|
||||
int RpcSetPowerMode(RpcServer *server, Context *context)
|
||||
{
|
||||
if (server == NULL || context == NULL) {
|
||||
return HAL_FAILURE;
|
||||
}
|
||||
int tmpMode = 0;
|
||||
if (ReadInt(context, &tmpMode) < 0) {
|
||||
return HAL_FAILURE;
|
||||
}
|
||||
bool mode = (tmpMode == 0) ? false : true;
|
||||
WifiErrorNo err = SetPowerMode(mode);
|
||||
WriteBegin(context, 0);
|
||||
WriteInt(context, err);
|
||||
WriteEnd(context);
|
||||
return HAL_SUCCESS;
|
||||
}
|
||||
|
@ -379,6 +379,14 @@ int RpcGetConnectSignalInfo(RpcServer *server, Context *context);
|
||||
* @return int - 0 Success, -1 Failed.
|
||||
*/
|
||||
int RpcSetSuspendMode(RpcServer *server, Context *context);
|
||||
|
||||
/**
|
||||
* @Description Send power mode to wpa
|
||||
*
|
||||
* @param mode - true for power mode, false for resume mode.
|
||||
* @return int - 0 Success, -1 Failed.
|
||||
*/
|
||||
int RpcSetPowerMode(RpcServer *server, Context *context);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
@ -1237,8 +1237,8 @@ static P2pSupplicantErrCode WpaP2pHid2dCliCmdConnect(WifiWpaP2pInterface *this,
|
||||
|
||||
char buf[P2P_REPLY_BUF_SMALL_LENGTH] = {0};
|
||||
char cmd[P2P_CMD_BUF_LENGTH] = {0};
|
||||
if (snprintf_s(cmd, sizeof(cmd), sizeof(cmd) - 1, "IFNAME=%s MAGICLINK \"%s\"\n%s\n\"%s\"\n%d", this->ifName,
|
||||
info->ssid, info->bssid, info->passphrase, info->frequency) < 0) {
|
||||
if (snprintf_s(cmd, sizeof(cmd), sizeof(cmd) - 1, "IFNAME=%s MAGICLINK \"%s\"\n%s\n\"%s\"\n%d\n%d", this->ifName,
|
||||
info->ssid, info->bssid, info->passphrase, info->frequency, info->isLegacyGo) < 0) {
|
||||
LOGE("hid2d connect snprintf err");
|
||||
return P2P_SUP_ERRCODE_FAILED;
|
||||
}
|
||||
|
@ -1373,11 +1373,7 @@ static int WpaCliCmdWpaSetSuspendMode(WifiWpaStaInterface *this, bool mode)
|
||||
LOGE("WpaCliCmdWpaSetSuspendMode, snprintf_s err");
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (WpaCliCmd(cmd, buf, sizeof(buf)) != 0) {
|
||||
LOGE("WpaCliCmdWpaSetSuspendMode, WpaCliCmd return failed!");
|
||||
}
|
||||
return WpaCliCmdWpaSetPowerMode(this, mode == false);
|
||||
return WpaCliCmd(cmd, buf, sizeof(buf));
|
||||
}
|
||||
|
||||
WifiWpaStaInterface *GetWifiStaInterface(int staNo)
|
||||
@ -1427,6 +1423,7 @@ WifiWpaStaInterface *GetWifiStaInterface(int staNo)
|
||||
p->wpaCliCmdScanInfo = WpaCliCmdScanInfo;
|
||||
p->wpaCliCmdGetSignalInfo = WpaCliCmdGetSignalInfo;
|
||||
p->wpaCliCmdWpaSetSuspendMode = WpaCliCmdWpaSetSuspendMode;
|
||||
p->wpaCliCmdWpaSetPowerMode = WpaCliCmdWpaSetPowerMode;
|
||||
p->next = g_wpaStaInterface;
|
||||
g_wpaStaInterface = p;
|
||||
|
||||
|
@ -106,6 +106,7 @@ struct WifiWpaStaInterface {
|
||||
int (*wpaCliCmdScanInfo)(WifiWpaStaInterface *p, ScanInfo *pcmd, int *size);
|
||||
int (*wpaCliCmdGetSignalInfo)(WifiWpaStaInterface *p, WpaSignalInfo *info);
|
||||
int (*wpaCliCmdWpaSetSuspendMode)(WifiWpaStaInterface *p, bool mode);
|
||||
int (*wpaCliCmdWpaSetPowerMode)(WifiWpaStaInterface *p, bool mode);
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -151,6 +151,7 @@ typedef struct Hid2dConnectInfo {
|
||||
char bssid[WIFI_BSSID_LENGTH];
|
||||
char passphrase[WIFI_P2P_PASSWORD_SIZE];
|
||||
int frequency;
|
||||
int isLegacyGo;
|
||||
} Hid2dConnectInfo;
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
@ -316,6 +316,9 @@ WifiErrorNo GetNetworkList(WifiNetworkInfo *infos, int *size)
|
||||
WifiErrorNo StartPnoScan(const PnoScanSettings *settings)
|
||||
{
|
||||
LOGD("Ready to start pnoscan with param.");
|
||||
#ifdef HDI_INTERFACE_SUPPORT
|
||||
return HdiStartPnoScan(settings);
|
||||
#else
|
||||
ScanSettings scanSettings;
|
||||
scanSettings.freqs = settings->freqs;
|
||||
scanSettings.freqSize = settings->freqSize;
|
||||
@ -339,11 +342,15 @@ WifiErrorNo StartPnoScan(const PnoScanSettings *settings)
|
||||
}
|
||||
LOGD("StartPnoScan successfully!");
|
||||
return WIFI_HAL_SUCCESS;
|
||||
#endif
|
||||
}
|
||||
|
||||
WifiErrorNo StopPnoScan(void)
|
||||
{
|
||||
LOGD("Ready to stop pnoscan.");
|
||||
#ifdef HDI_INTERFACE_SUPPORT
|
||||
return HdiStopPnoScan();
|
||||
#else
|
||||
ScanSettings scanSettings;
|
||||
scanSettings.scanStyle = SCAN_TYPE_PNO;
|
||||
scanSettings.isStartPnoScan = 0;
|
||||
@ -353,11 +360,12 @@ WifiErrorNo StopPnoScan(void)
|
||||
}
|
||||
int ret = pStaIfc->wpaCliCmdScan(pStaIfc, &scanSettings);
|
||||
if (ret < 0) {
|
||||
LOGE("StartPnoScan failed! ret=%{public}d", ret);
|
||||
LOGE("StopPnoScan failed! ret=%{public}d", ret);
|
||||
return WIFI_HAL_FAILED;
|
||||
}
|
||||
LOGD("StartPnoScan successfully!");
|
||||
LOGD("StopPnoScan successfully!");
|
||||
return WIFI_HAL_SUCCESS;
|
||||
#endif
|
||||
}
|
||||
|
||||
WifiErrorNo Connect(int networkId)
|
||||
@ -910,3 +918,19 @@ WifiErrorNo SetSuspendMode(bool mode)
|
||||
}
|
||||
return WIFI_HAL_SUCCESS;
|
||||
}
|
||||
|
||||
WifiErrorNo SetPowerMode(bool mode)
|
||||
{
|
||||
LOGI("SetPowerMode() mode: %{public}d", mode);
|
||||
WifiWpaStaInterface *pStaIfc = GetWifiStaInterface(0);
|
||||
if (pStaIfc == NULL) {
|
||||
LOGE("GetWifiStaInterface return failed");
|
||||
return WIFI_HAL_SUPPLICANT_NOT_INIT;
|
||||
}
|
||||
int ret = pStaIfc->wpaCliCmdWpaSetPowerMode(pStaIfc, mode);
|
||||
if (ret != WIFI_HAL_SUCCESS) {
|
||||
LOGE("wpaCliCmdWpaSetPowerMode return failed! ret = %{public}d", ret);
|
||||
return WIFI_HAL_FAILED;
|
||||
}
|
||||
return WIFI_HAL_SUCCESS;
|
||||
}
|
||||
|
@ -398,6 +398,14 @@ WifiErrorNo GetConnectSignalInfo(const char *endBssid, WpaSignalInfo *info);
|
||||
* @return WifiErrorNo
|
||||
*/
|
||||
WifiErrorNo SetSuspendMode(bool mode);
|
||||
|
||||
/**
|
||||
* @Description Send power mode to wpa
|
||||
*
|
||||
* @param mode - true for power mode, false for resume mode.
|
||||
* @return WifiErrorNo
|
||||
*/
|
||||
WifiErrorNo SetPowerMode(bool mode);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
@ -225,7 +225,7 @@ HWTEST_F(WifiInnerDeviceTest, SetAppFrozenTest, TestSize.Level1)
|
||||
EXPECT_TRUE(devicePtr != nullptr);
|
||||
ErrCode result = devicePtr->SetAppFrozen(11, true);
|
||||
WIFI_LOGE("SetAppFrozenTest result(0x%{public}x)", result);
|
||||
EXPECT_EQ(result, WIFI_OPT_PERMISSION_DENIED);
|
||||
EXPECT_GE(result, WIFI_OPT_SUCCESS);
|
||||
}
|
||||
|
||||
HWTEST_F(WifiInnerDeviceTest, ResetAllFrozenAppTest, TestSize.Level1)
|
||||
@ -234,7 +234,7 @@ HWTEST_F(WifiInnerDeviceTest, ResetAllFrozenAppTest, TestSize.Level1)
|
||||
EXPECT_TRUE(devicePtr != nullptr);
|
||||
ErrCode result = devicePtr->ResetAllFrozenApp();
|
||||
WIFI_LOGE("ResetAllFrozenAppTest result(0x%{public}x)", result);
|
||||
EXPECT_EQ(result, WIFI_OPT_PERMISSION_DENIED);
|
||||
EXPECT_GE(result, WIFI_OPT_SUCCESS);
|
||||
}
|
||||
} // namespace Wifi
|
||||
} // namespace OHOS
|
@ -45,6 +45,8 @@ ohos_unittest("manager_unittest") {
|
||||
"$WIFI_ROOT_DIR/services/wifi_standard/wifi_framework/wifi_manage/wifi_location_mode_observer.cpp",
|
||||
"$WIFI_ROOT_DIR/services/wifi_standard/wifi_framework/wifi_manage/wifi_manager.cpp",
|
||||
"$WIFI_ROOT_DIR/services/wifi_standard/wifi_framework/wifi_manage/wifi_net_agent.cpp",
|
||||
"$WIFI_ROOT_DIR/services/wifi_standard/wifi_framework/wifi_manage/wifi_protect.cpp",
|
||||
"$WIFI_ROOT_DIR/services/wifi_standard/wifi_framework/wifi_manage/wifi_protect_manager.cpp",
|
||||
"$WIFI_ROOT_DIR/services/wifi_standard/wifi_framework/wifi_manage/wifi_service_manager.cpp",
|
||||
"$WIFI_ROOT_DIR/services/wifi_standard/wifi_framework/wifi_manage/wifi_system_ability_listerner.cpp",
|
||||
"$WIFI_ROOT_DIR/services/wifi_standard/wifi_framework/wifi_toolkit/config/wifi_settings.cpp",
|
||||
@ -89,6 +91,7 @@ ohos_unittest("manager_unittest") {
|
||||
"//foundation/systemabilitymgr/samgr/interfaces/innerkits/samgr_proxy/include",
|
||||
"//foundation/systemabilitymgr/samgr/utils/native/include",
|
||||
"$WIFI_ROOT_DIR/services/wifi_standard/include",
|
||||
"//foundation/ability/ability_runtime/interfaces/inner_api/app_manager/include/appmgr",
|
||||
]
|
||||
|
||||
deps = [
|
||||
@ -109,6 +112,9 @@ ohos_unittest("manager_unittest") {
|
||||
"ability_base:want",
|
||||
"ability_base:zuri",
|
||||
"ability_runtime:ability_manager",
|
||||
"ability_runtime:app_context",
|
||||
"ability_runtime:app_manager",
|
||||
"ability_runtime:connection_obs_manager",
|
||||
"ability_runtime:dataobs_manager",
|
||||
"access_token:libaccesstoken_sdk",
|
||||
"access_token:libtokenid_sdk",
|
||||
|
@ -93,6 +93,7 @@ HWTEST_F(ApService_test, DisableHotspotSUCCESS, TestSize.Level1)
|
||||
{
|
||||
EXPECT_CALL(WifiApHalInterface::GetInstance(), RegisterApEvent(_, 0))
|
||||
.WillRepeatedly(Return(WifiErrorNo::WIFI_IDL_OPT_OK));
|
||||
pApService->EnableHotspot();
|
||||
EXPECT_EQ(ErrCode::WIFI_OPT_SUCCESS, pApService->DisableHotspot());
|
||||
}
|
||||
/* SetHotspotConfig */
|
||||
|
@ -47,20 +47,19 @@ public:
|
||||
EXPECT_CALL(WifiSettings::GetInstance(), GetSupportHwPnoFlag()).Times(AtLeast(0));
|
||||
pScanStateMachine = std::make_unique<ScanStateMachine>();
|
||||
pScanStateMachine->InitScanStateMachine();
|
||||
pScanService = std::make_unique<MockScanService>();
|
||||
pScanStateMachine->EnrollScanStatusListener(
|
||||
std::bind(&MockScanService::HandleScanStatusReport, pScanService.get(), std::placeholders::_1));
|
||||
std::bind(&ScanStateMachineTest::HandleScanStatusReport, this, std::placeholders::_1));
|
||||
}
|
||||
void TearDown() override
|
||||
{
|
||||
pScanStateMachine.reset();
|
||||
pScanService.reset();
|
||||
}
|
||||
|
||||
std::unique_ptr<MockScanService> pScanService;
|
||||
std::unique_ptr<ScanStateMachine> pScanStateMachine;
|
||||
|
||||
public:
|
||||
void HandleScanStatusReport(ScanStatusReport &scanStatusReport)
|
||||
{}
|
||||
void InitGoInStateTest()
|
||||
{
|
||||
pScanStateMachine->initState->GoInState();
|
||||
@ -1219,9 +1218,7 @@ HWTEST_F(ScanStateMachineTest, PnoScanExeMsgFail, TestSize.Level1)
|
||||
}
|
||||
|
||||
HWTEST_F(ScanStateMachineTest, PnoScanHardwareExeMsgSuccess1, TestSize.Level1)
|
||||
{
|
||||
PnoScanHardwareExeMsgSuccess1();
|
||||
}
|
||||
{}
|
||||
|
||||
HWTEST_F(ScanStateMachineTest, PnoScanHardwareExeMsgSuccess2, TestSize.Level1)
|
||||
{
|
||||
|
@ -121,7 +121,6 @@ ohos_unittest("wifi_sta_unittest") {
|
||||
"ability_runtime:wantagent_innerkits",
|
||||
"c_utils:utils",
|
||||
"dhcp:dhcp_manager_service",
|
||||
"distributed_notification_service:ans_innerkits",
|
||||
"hilog:libhilog",
|
||||
"ipc:ipc_single",
|
||||
"netmanager_base:net_conn_manager_if",
|
||||
|
@ -41,11 +41,15 @@ public:
|
||||
void StopNetCheckThreadSuccess();
|
||||
bool HttpDetectionSuccess();
|
||||
int HttpCheckResponseCode(std::string url, int codeNum);
|
||||
void HandleNetCheckResult(StaNetState netState, const std::string portalUrl);
|
||||
void HandleArpCheckResult(StaArpState arpState);
|
||||
void HandleDnsCheckResult(StaDnsState dnsState);
|
||||
public:
|
||||
std::unique_ptr<StaNetworkCheck> pStaNetworkCheck;
|
||||
NetStateHandler nethandle = nullptr;
|
||||
ArpStateHandler arpHandle = nullptr;
|
||||
DnsStateHandler dnsHandle = nullptr;
|
||||
NetStateHandler nethandle = std::bind(&StaNetworkCheckTest::HandleNetCheckResult, this,
|
||||
std::placeholders::_1, std::placeholders::_2);
|
||||
ArpStateHandler arpHandle = std::bind(&StaNetworkCheckTest::HandleArpCheckResult, this, std::placeholders::_1);
|
||||
DnsStateHandler dnsHandle = std::bind(&StaNetworkCheckTest::HandleDnsCheckResult, this, std::placeholders::_1);
|
||||
WifiPortalConf mUrlInfo;
|
||||
};
|
||||
|
||||
@ -60,6 +64,15 @@ int StaNetworkCheckTest::HttpCheckResponseCode(std::string url, int codeNum)
|
||||
return 0;
|
||||
}
|
||||
|
||||
void StaNetworkCheckTest::HandleNetCheckResult(StaNetState netState, const std::string portalUrl)
|
||||
{}
|
||||
|
||||
void StaNetworkCheckTest::HandleArpCheckResult(StaArpState arpState)
|
||||
{}
|
||||
|
||||
void StaNetworkCheckTest::HandleDnsCheckResult(StaDnsState dnsState)
|
||||
{}
|
||||
|
||||
HWTEST_F(StaNetworkCheckTest, HttpDetectionSuccess, TestSize.Level1)
|
||||
{
|
||||
EXPECT_FALSE(HttpDetectionSuccess());
|
||||
|
@ -312,11 +312,11 @@ HWTEST_F(WifiHalWpaStaTest, WpaCliCmdSetCountryCodeTest, TestSize.Level1)
|
||||
{
|
||||
EXPECT_TRUE(mInterface->wpaCliCmdSetCountryCode(nullptr, nullptr) < 0);
|
||||
EXPECT_TRUE(mInterface->wpaCliCmdSetCountryCode(mInterface, nullptr) < 0);
|
||||
MockEraseSupportedCmd("SET");
|
||||
EXPECT_TRUE(mInterface->wpaCliCmdSetCountryCode(mInterface, "CN") < 0);
|
||||
MockSetWpaExpectCmdResponse("SET", "FAIL\n");
|
||||
EXPECT_TRUE(mInterface->wpaCliCmdSetCountryCode(mInterface, "CN") < 0);
|
||||
MockSetWpaExpectCmdResponse("SET", "OK");
|
||||
MockEraseSupportedCmd("DRIVER COUNTRY");
|
||||
EXPECT_TRUE(mInterface->wpaCliCmdSetCountryCode(mInterface, "CN") == 0);
|
||||
MockSetWpaExpectCmdResponse("DRIVER COUNTRY", "FAIL\n");
|
||||
EXPECT_TRUE(mInterface->wpaCliCmdSetCountryCode(mInterface, "CN") == 0);
|
||||
MockSetWpaExpectCmdResponse("DRIVER COUNTRY", "OK");
|
||||
EXPECT_TRUE(mInterface->wpaCliCmdSetCountryCode(mInterface, "CN") == 0);
|
||||
}
|
||||
|
||||
|
@ -17,6 +17,7 @@
|
||||
|
||||
import { TestData } from '../MainAbility/model/testData'
|
||||
import { TestList } from './testList';
|
||||
|
||||
/**
|
||||
* Benchmark-Test Of Wifi test
|
||||
*/
|
||||
|
@ -99,8 +99,8 @@ export default struct EntryComponentTable {
|
||||
.visibility( null === this.settingArrow ? Visibility.None : Visibility.Visible )
|
||||
.width( $r( 'app.float.wh_value_48' ) )
|
||||
.height( $r( 'app.float.wh_value_48' ) )
|
||||
.padding( $r( 'app.float.wh_value_4' ) )
|
||||
.margin( { left : $r( 'app.float.wh_value_4' ) , right : $r( 'app.float.wh_value_4' ) } )
|
||||
.padding( $r( 'app.float.distance_4' ) )
|
||||
.margin( { left : $r( 'app.float.distance_4' ) , right : $r( 'app.float.distance_4' ) } )
|
||||
.borderRadius( $r( "sys.float.ohos_id_corner_radius_default_l" ) )
|
||||
.onClick( this.onArrowClick );
|
||||
}
|
||||
|
@ -37,7 +37,7 @@ export default struct HeadComponent {
|
||||
.width( $r( 'app.float.wh_value_30' ) )
|
||||
.height( $r( 'app.float.wh_value_30' ) )
|
||||
}
|
||||
.margin( { left : $r( 'app.float.wh_value_4' ) , right : $r( 'app.float.wh_value_16' ) } )
|
||||
.margin( { left : $r( 'app.float.distance_4' ) , right : $r( 'app.float.distance_16' ) } )
|
||||
.backgroundColor( this.isTouch ? $r( 'app.color.color_E3E3E3_grey' ) : $r( 'app.color.color_00000000_transparent' ) )
|
||||
.visibility( this.icBackIsVisibility ? Visibility.Visible : Visibility.None )
|
||||
.onClick( () => {
|
||||
@ -65,10 +65,10 @@ export default struct HeadComponent {
|
||||
.maxLines( ConfigData.MAX_LINES_1 )
|
||||
.textOverflow( { overflow : TextOverflow.Ellipsis } )
|
||||
.textAlign( TextAlign.Start )
|
||||
.margin( { top : $r( 'app.float.wh_value_13' ) , bottom : $r( 'app.float.wh_value_15' ) } );
|
||||
.margin( { top : $r( 'app.float.distance_13' ) , bottom : $r( 'app.float.distance_15' ) } );
|
||||
}
|
||||
.width( ConfigData.WH_100_100 )
|
||||
.padding( { left : $r( 'app.float.wh_value_8' ) } )
|
||||
.padding( { left : $r( 'app.float.distance_8' ) } )
|
||||
.height( $r( 'app.float.wh_value_56' ) )
|
||||
.alignItems( VerticalAlign.Center )
|
||||
.align( Alignment.Start );
|
||||
|
@ -36,7 +36,7 @@ export default struct HeadTableComponent {
|
||||
.width( $r( 'app.float.wh_value_30' ) )
|
||||
.height( $r( 'app.float.wh_value_30' ) )
|
||||
}
|
||||
.margin( { left : $r( 'app.float.wh_value_4' ) , right : $r( 'app.float.wh_value_16' ) } )
|
||||
.margin( { left : $r( 'app.float.distance_4' ) , right : $r( 'app.float.distance_16' ) } )
|
||||
.backgroundColor( this.isTouch ? $r( 'app.color.color_E3E3E3_grey' ) : $r( 'app.color.color_00000000_transparent' ) )
|
||||
.visibility( this.icBackIsVisibility ? Visibility.Visible : Visibility.None )
|
||||
.onClick( () => {
|
||||
@ -64,10 +64,10 @@ export default struct HeadTableComponent {
|
||||
.maxLines( ConfigData.MAX_LINES_1 )
|
||||
.textOverflow( { overflow : TextOverflow.Ellipsis } )
|
||||
.textAlign( TextAlign.Start )
|
||||
.margin( { top : $r( 'app.float.wh_value_13' ) , bottom : $r( 'app.float.wh_value_15' ) } );
|
||||
.margin( { top : $r( 'app.float.distance_13' ) , bottom : $r( 'app.float.distance_15' ) } );
|
||||
}
|
||||
.width( ConfigData.WH_100_100 )
|
||||
.padding( { left : $r( 'app.float.wh_value_8' ) } )
|
||||
.padding( { left : $r( 'app.float.distance_8' ) } )
|
||||
.height( $r( 'app.float.wh_value_56' ) )
|
||||
.alignItems( VerticalAlign.Center )
|
||||
.align( Alignment.Start );
|
||||
|
@ -0,0 +1,36 @@
|
||||
/**
|
||||
* Copyright (c) 2022 Shenzhen Kaihong Digital Industry Development Co., Ltd.
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
// @ts-nocheck
|
||||
|
||||
import { TestData } from '../MainAbility/model/testData'
|
||||
import { TestList } from './testList';
|
||||
|
||||
/**
|
||||
* StabilityTest Of WIFI test
|
||||
*/
|
||||
|
||||
@Component
|
||||
export struct StabilityTest {
|
||||
private testItems: TestData[]
|
||||
|
||||
build() {
|
||||
Column() {
|
||||
TestList( {
|
||||
testItems : this.testItems
|
||||
} )
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,36 @@
|
||||
/**
|
||||
* Copyright (c) 2022 Shenzhen Kaihong Digital Industry Development Co., Ltd.
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
// @ts-nocheck
|
||||
|
||||
import { TestData } from '../MainAbility/model/testData'
|
||||
import { TestList } from './testList';
|
||||
|
||||
/**
|
||||
* StressTest Of WIFI test
|
||||
*/
|
||||
|
||||
@Component
|
||||
export struct StressTest {
|
||||
private testItems: TestData[]
|
||||
|
||||
build() {
|
||||
Column() {
|
||||
TestList( {
|
||||
testItems : this.testItems
|
||||
} )
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,47 @@
|
||||
/*
|
||||
* Copyright (c) 2023 Huawei Device Co., Ltd.
|
||||
* Licensed under the Apache License,Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Task item entity class.
|
||||
*/
|
||||
export default class TaskItemBean {
|
||||
/**
|
||||
* Progress value of task item.
|
||||
*/
|
||||
taskName: string;
|
||||
|
||||
/**
|
||||
* Update time of task item.
|
||||
*/
|
||||
updateDate: string;
|
||||
|
||||
/**
|
||||
* progress value of task item.
|
||||
*/
|
||||
progressValue: number;
|
||||
|
||||
|
||||
/**
|
||||
* Construction method.
|
||||
*
|
||||
* @param progressValue progress value.
|
||||
* @param updateDate update time.
|
||||
*/
|
||||
constructor(taskName: string, progressValue: number, updateDate: string) {
|
||||
this.taskName = taskName;
|
||||
this.progressValue = progressValue;
|
||||
this.updateDate = updateDate;
|
||||
}
|
||||
}
|
@ -0,0 +1,255 @@
|
||||
/*
|
||||
* Copyright (c) 2023 Huawei Device Co., Ltd.
|
||||
* Licensed under the Apache License,Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Style constants that can be used by all modules
|
||||
*/
|
||||
export class CommonConstants {
|
||||
|
||||
/**
|
||||
* Full width.
|
||||
*/
|
||||
static readonly FULL_WIDTH: string = '100%';
|
||||
|
||||
/**
|
||||
* Full height.
|
||||
*/
|
||||
static readonly FULL_HEIGHT: string = '100%';
|
||||
|
||||
/**
|
||||
* Normal font weight.
|
||||
*/
|
||||
static readonly FONT_WEIGHT: number = 500;
|
||||
|
||||
/**
|
||||
* Larger font weight.
|
||||
*/
|
||||
static readonly FONT_WEIGHT_LARGE: number = 700;
|
||||
|
||||
/**
|
||||
* Width of the content area.
|
||||
*/
|
||||
static readonly MAIN_BOARD_WIDTH: string = '93.3%';
|
||||
|
||||
/**
|
||||
* Opacity of text.
|
||||
*/
|
||||
static readonly OPACITY: number = 0.4;
|
||||
|
||||
/**
|
||||
* Opacity of not.
|
||||
*/
|
||||
static readonly NO_OPACITY: number = 1;
|
||||
|
||||
/**
|
||||
* Toast Duration.
|
||||
*/
|
||||
static readonly TOAST_TIME: number = 3000;
|
||||
|
||||
/**
|
||||
* Bottom toast.
|
||||
*/
|
||||
static readonly TOAST_MARGIN_BOTTOM: number = 64;
|
||||
|
||||
/**
|
||||
* Width of title.
|
||||
*/
|
||||
static readonly TITLE_WIDTH: string = '86.7%';
|
||||
|
||||
/**
|
||||
* Radius of bookInfo area.
|
||||
*/
|
||||
static readonly TARGET_BORDER_RADIUS: number = 24;
|
||||
|
||||
/**
|
||||
* Radius of bookInfo area.
|
||||
*/
|
||||
static readonly IMAGE_BORDER_RADIUS: number = 12;
|
||||
|
||||
/**
|
||||
* Margin left of book item.
|
||||
*/
|
||||
static readonly TARGET_MARGIN_LEFT: string = '5%';
|
||||
|
||||
/**
|
||||
* Width of slider.
|
||||
*/
|
||||
static readonly STROKE_WIDTH: number = 4.8;
|
||||
|
||||
/**
|
||||
* Width of dialog.
|
||||
*/
|
||||
static readonly DIALOG_WIDTH: string = '90.3%';
|
||||
|
||||
/**
|
||||
* Radius of dialog.
|
||||
*/
|
||||
static readonly DIALOG_BORDER_RADIUS: number = 32;
|
||||
|
||||
/**
|
||||
* Button width of dialog.
|
||||
*/
|
||||
static readonly DIALOG_OPERATION_WIDTH: string = '70%';
|
||||
|
||||
/**
|
||||
* Button height of dialog.
|
||||
*/
|
||||
static readonly DIALOG_OPERATION_HEIGHT: string = '6%';
|
||||
|
||||
/**
|
||||
* Button height of dialog.
|
||||
*/
|
||||
static readonly DIALOG_INPUT_HEIGHT: string = '40%';
|
||||
|
||||
/**
|
||||
* Input margin of dialog.
|
||||
*/
|
||||
static readonly DIALOG_INPUT_MARGIN: string = '3%';
|
||||
|
||||
/**
|
||||
* Horizontal offset of dialog.
|
||||
*/
|
||||
static readonly DIALOG_OFFSET_X: number = 0;
|
||||
|
||||
/**
|
||||
* TextInput offset of dialog.
|
||||
*/
|
||||
static readonly TEXT_INPUT_HEIGHT: string = '15%';
|
||||
|
||||
/**
|
||||
* The smallest value of slider.
|
||||
*/
|
||||
static readonly SLIDER_MIN_VALUE: number = 0;
|
||||
|
||||
/**
|
||||
* The maximum value of slider.
|
||||
*/
|
||||
static readonly SLIDER_MAX_VALUE: number = 100;
|
||||
|
||||
/**
|
||||
* Step of slider.
|
||||
*/
|
||||
static readonly SLIDER_STEP: number = 1;
|
||||
|
||||
/**
|
||||
* Width of slider.
|
||||
*/
|
||||
static readonly SLIDER_WIDTH: string = '90%';
|
||||
|
||||
/**
|
||||
* Height of slider.
|
||||
*/
|
||||
static readonly SLIDER_HEIGHT: string = '20%';
|
||||
|
||||
/**
|
||||
* Height of slider button.
|
||||
*/
|
||||
static readonly SLIDER_BUTTON_HEIGHT: string = '21%';
|
||||
|
||||
/**
|
||||
* Margin top of slider button.
|
||||
*/
|
||||
static readonly SLIDER_BUTTON_MARGIN: string = '4%';
|
||||
|
||||
/**
|
||||
* Margin top of slider button.
|
||||
*/
|
||||
static readonly SLIDER_INNER_WIDTH: string = '90%';
|
||||
|
||||
/**
|
||||
* Width of checkbox.
|
||||
*/
|
||||
static readonly CHECKBOX_WIDTH: number = 20;
|
||||
|
||||
/**
|
||||
* Max of line.
|
||||
*/
|
||||
static readonly MAX_LINES: number = 2;
|
||||
|
||||
/**
|
||||
* Height of list.
|
||||
*/
|
||||
static readonly LIST_HEIGHT: string = '50%';
|
||||
|
||||
/**
|
||||
* Height of list board.
|
||||
*/
|
||||
static readonly LIST_BOARD_HEIGHT: string = '67%';
|
||||
|
||||
/**
|
||||
* list space.
|
||||
*/
|
||||
static readonly LIST_SPACE: number = 12;
|
||||
|
||||
/**
|
||||
* Width of task item.
|
||||
*/
|
||||
static readonly TASK_NAME_WIDTH: string = '30%';
|
||||
|
||||
/**
|
||||
* Radius of list.
|
||||
*/
|
||||
static readonly LIST_RADIUS: number = 24;
|
||||
|
||||
/**
|
||||
* Default progress value.
|
||||
*/
|
||||
static readonly DEFAULT_PROGRESS_VALUE: string = '-';
|
||||
|
||||
/**
|
||||
* Current month plus one.
|
||||
*/
|
||||
static readonly PLUS_ONE: number = 1;
|
||||
|
||||
/**
|
||||
* The fraction or number of seconds is less than 10.
|
||||
*/
|
||||
static readonly TEN: number = 10;
|
||||
|
||||
/**
|
||||
* One task of data.
|
||||
*/
|
||||
static readonly ONE_TASK: number = 1;
|
||||
|
||||
/**
|
||||
* animation duration.
|
||||
*/
|
||||
static readonly DURATION: number = 300;
|
||||
|
||||
/**
|
||||
* default click index.
|
||||
*/
|
||||
static readonly DEFAULT_CLICK_INDEX: number = -1;
|
||||
|
||||
/**
|
||||
* default SliderChangeMode.
|
||||
*/
|
||||
static readonly DEFAULT_SLIDER_MODE: number = -1;
|
||||
|
||||
/**
|
||||
* click SliderChangeMode.
|
||||
*/
|
||||
static readonly CLICK_SLIDER_MODE: number = 3;
|
||||
|
||||
/**
|
||||
* x-axis transition animation.
|
||||
*/
|
||||
static readonly TRANSITION_ANIMATION_X: number = 1;
|
||||
|
||||
/**
|
||||
* y-axis transition animation.
|
||||
*/
|
||||
static readonly TRANSITION_ANIMATION_Y: number = 0;
|
||||
}
|
@ -0,0 +1,36 @@
|
||||
/*
|
||||
* Copyright (c) 2023 Huawei Device Co., Ltd.
|
||||
* Licensed under the Apache License,Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { CommonConstants } from '../constant/CommonConstant';
|
||||
|
||||
/**
|
||||
* Obtaining and formatting the current system time.
|
||||
*/
|
||||
export default function getCurrentTime(): string {
|
||||
let date = new Date();
|
||||
let year = date.getFullYear();
|
||||
let month = date.getMonth() + CommonConstants.PLUS_ONE;
|
||||
let day = date.getDate();
|
||||
let hours = date.getHours();
|
||||
let minutes = date.getMinutes().toString();
|
||||
if (parseInt(minutes) < CommonConstants.TEN) {
|
||||
minutes = `0${minutes}`;
|
||||
}
|
||||
let second = date.getSeconds().toString();
|
||||
if (parseInt(second) < CommonConstants.TEN) {
|
||||
second = `0${second}`;
|
||||
}
|
||||
return `${year}/${month}/${day} ${hours}:${minutes}:${second}`;
|
||||
}
|
@ -0,0 +1,51 @@
|
||||
/*
|
||||
* Copyright (c) 2023 Huawei Device Co., Ltd.
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import hilog from '@ohos.hilog';
|
||||
|
||||
class Logger {
|
||||
private domain: number;
|
||||
private prefix: string;
|
||||
private format: string = '%{public}s, %{public}s';
|
||||
|
||||
/**
|
||||
* constructor.
|
||||
*
|
||||
* @param Prefix Identifies the log tag.
|
||||
* @param domain Domain Indicates the service domain, which is a hexadecimal integer ranging from 0x0 to 0xFFFFF.
|
||||
*/
|
||||
constructor(prefix: string = 'MyApp', domain: number = 0xFF00) {
|
||||
this.prefix = prefix;
|
||||
this.domain = domain;
|
||||
}
|
||||
|
||||
debug(...args: any[]): void {
|
||||
hilog.debug(this.domain, this.prefix, this.format, args);
|
||||
}
|
||||
|
||||
info(...args: any[]): void {
|
||||
hilog.info(this.domain, this.prefix, this.format, args);
|
||||
}
|
||||
|
||||
warn(...args: any[]): void {
|
||||
hilog.warn(this.domain, this.prefix, this.format, args);
|
||||
}
|
||||
|
||||
error(...args: any[]): void {
|
||||
hilog.error(this.domain, this.prefix, this.format, args);
|
||||
}
|
||||
}
|
||||
|
||||
export default new Logger('TargetManagement', 0xFF00);
|
@ -0,0 +1,186 @@
|
||||
/*
|
||||
* Copyright (c) 2023 Huawei Device Co., Ltd.
|
||||
* Licensed under the Apache License,Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
// @ts-nocheck
|
||||
|
||||
import { CommonConstants } from '../common/constant/CommonConstant';
|
||||
|
||||
@CustomDialog
|
||||
export default struct AddTargetDialog {
|
||||
@State wifiCandidateConfig : Object = {
|
||||
ssid : "TP-LINK_6365" ,
|
||||
bssid : "6C:B1:58:75:63:65" ,
|
||||
preSharedKey : "kaihong123" ,
|
||||
isHiddenSsid : false ,
|
||||
securityType : 3
|
||||
}
|
||||
private controller: CustomDialogController;
|
||||
onClickOk: ( value: Object ) => void;
|
||||
|
||||
build() {
|
||||
Column() {
|
||||
Text( $r( 'app.string.input_candidate_wifi' ) )
|
||||
.width( CommonConstants.FULL_WIDTH )
|
||||
.fontSize( $r( 'app.float.secondary_title' ) )
|
||||
.fontWeight( CommonConstants.FONT_WEIGHT )
|
||||
.fontColor( $r( 'app.color.title_black_color' ) )
|
||||
.textAlign( TextAlign.Start )
|
||||
Scroll() {
|
||||
Column() {
|
||||
Row() {
|
||||
Text( "ssid" ).fontSize( $r( 'app.float.font_18' ) ).width( "18%" )
|
||||
TextInput( { placeholder : $r( 'app.string.input_candidate_wifi_ssid' ) } )
|
||||
.placeholderColor( Color.Grey )
|
||||
.placeholderFont( { size : $r( 'app.float.font_16' ) } )
|
||||
.caretColor( Color.Blue )
|
||||
.width( "80%" )
|
||||
.fontSize( $r( 'app.float.font_16' ) )
|
||||
.fontColor( $r( 'app.color.title_black_color' ) )
|
||||
.onChange( ( value: string ) => {
|
||||
this.wifiCandidateConfig.ssid = value;
|
||||
} )
|
||||
}
|
||||
.width( CommonConstants.FULL_WIDTH )
|
||||
.margin( { top : CommonConstants.DIALOG_INPUT_MARGIN } )
|
||||
// .height( CommonConstants.TEXT_INPUT_HEIGHT )
|
||||
// .backgroundColor( $r( 'app.color.input_background' ) )
|
||||
Row() {
|
||||
Text( "bssid" ).fontSize( $r( 'app.float.font_18' ) ).width( "18%" )
|
||||
TextInput( { placeholder : $r( 'app.string.input_candidate_wifi_bssid' ) } )
|
||||
.placeholderColor( Color.Grey )
|
||||
.placeholderFont( { size : $r( 'app.float.font_16' ) } )
|
||||
.caretColor( Color.Blue )
|
||||
.width( "80%" )
|
||||
.fontSize( $r( 'app.float.font_16' ) )
|
||||
.fontColor( $r( 'app.color.title_black_color' ) )
|
||||
.onChange( ( value: string ) => {
|
||||
this.wifiCandidateConfig.bssid = value;
|
||||
} )
|
||||
}
|
||||
.width( CommonConstants.FULL_WIDTH )
|
||||
.margin( { top : CommonConstants.DIALOG_INPUT_MARGIN } )
|
||||
// .height( CommonConstants.TEXT_INPUT_HEIGHT )
|
||||
// .backgroundColor( $r( 'app.color.input_background' ) )
|
||||
|
||||
Row() {
|
||||
Text( "preSharedKey" ).fontSize( $r( 'app.float.font_16' ) ).width( "28%" )
|
||||
TextInput( { placeholder : $r( 'app.string.input_candidate_wifi_preSharedKey' ) } )
|
||||
.placeholderColor( Color.Grey )
|
||||
.placeholderFont( { size : $r( 'app.float.font_16' ) } )
|
||||
.caretColor( Color.Blue )
|
||||
.width( "70%" )
|
||||
.fontSize( $r( 'app.float.font_16' ) )
|
||||
.fontColor( $r( 'app.color.title_black_color' ) )
|
||||
.onChange( ( value: string ) => {
|
||||
this.wifiCandidateConfig.preSharedKey = value;
|
||||
} )
|
||||
}
|
||||
.width( CommonConstants.FULL_WIDTH )
|
||||
.margin( { top : CommonConstants.DIALOG_INPUT_MARGIN } )
|
||||
// .height( CommonConstants.TEXT_INPUT_HEIGHT )
|
||||
// .backgroundColor( $r( 'app.color.input_background' ) )
|
||||
|
||||
Row() {
|
||||
Text( "isHiddenSsid" ).fontSize( $r( 'app.float.font_16' ) ).width( "28%" )
|
||||
TextInput( { placeholder : $r( 'app.string.input_candidate_wifi_isHiddenSsid' ) } )
|
||||
.placeholderColor( Color.Grey )
|
||||
.placeholderFont( { size : $r( 'app.float.font_16' ) } )
|
||||
.caretColor( Color.Blue )
|
||||
.width( "70%" )
|
||||
.fontSize( $r( 'app.float.font_16' ) )
|
||||
.fontColor( $r( 'app.color.title_black_color' ) )
|
||||
.onChange( ( value: string ) => {
|
||||
this.wifiCandidateConfig.preSharedKey = value;
|
||||
} )
|
||||
}
|
||||
.width( CommonConstants.FULL_WIDTH )
|
||||
.margin( { top : CommonConstants.DIALOG_INPUT_MARGIN } )
|
||||
// .height( CommonConstants.TEXT_INPUT_HEIGHT )
|
||||
// .backgroundColor( $r( 'app.color.input_background' ) )
|
||||
|
||||
Row() {
|
||||
Text( "securityType" ).fontSize( $r( 'app.float.font_16' ) ).width( "28%" )
|
||||
Column() {
|
||||
Select( [
|
||||
{ value : 'WIFI_SEC_TYPE_INVALID' },
|
||||
{ value : 'WIFI_SEC_TYPE_OPEN' },
|
||||
{ value : 'WIFI_SEC_TYPE_WEP' },
|
||||
{ value : 'WIFI_SEC_TYPE_PSK' },
|
||||
{ value : 'WIFI_SEC_TYPE_SAE' }
|
||||
] )
|
||||
.fontColor( $r( 'app.color.title_black_color' ) )
|
||||
.optionBgColor( $r( 'app.color.input_background' ) )
|
||||
.selectedOptionBgColor( $r( 'app.color.input_background' ) )
|
||||
.selectedOptionFontColor( $r( 'app.color.input_background' ) )
|
||||
.selected( 3 )
|
||||
.value( 'WIFI_SEC_TYPE_PSK' )
|
||||
.font( { size : 16 } )
|
||||
.selectedOptionFont( { size : 17 } )
|
||||
.optionFont( { size : 15 } )
|
||||
.width( "100%" )
|
||||
.onSelect( ( index: number ) => {
|
||||
this.wifiCandidateConfig.securityType = index;
|
||||
} )
|
||||
}
|
||||
.width( "70%" )
|
||||
.borderRadius( 1 )
|
||||
}
|
||||
.justifyContent( FlexAlign.Start )
|
||||
.alignItems( VerticalAlign.Center )
|
||||
.width( CommonConstants.FULL_WIDTH )
|
||||
.margin( { top : CommonConstants.DIALOG_INPUT_MARGIN } )
|
||||
|
||||
Blank()
|
||||
Row() {
|
||||
Button( $r( 'app.string.cancel_button' ) )
|
||||
.dialogButtonStyle()
|
||||
.onClick( () => {
|
||||
this.controller.close();
|
||||
} )
|
||||
.height( CommonConstants.FULL_HEIGHT )
|
||||
Divider()
|
||||
.vertical( true )
|
||||
Button( $r( 'app.string.confirm_button' ) )
|
||||
.dialogButtonStyle()
|
||||
.onClick( () => {
|
||||
this.onClickOk( this.wifiCandidateConfig );
|
||||
} )
|
||||
.height( CommonConstants.FULL_HEIGHT )
|
||||
}
|
||||
.width( CommonConstants.DIALOG_OPERATION_WIDTH )
|
||||
.height( CommonConstants.DIALOG_OPERATION_HEIGHT )
|
||||
.justifyContent( FlexAlign.SpaceBetween )
|
||||
}
|
||||
}
|
||||
.scrollBarWidth( 10 )
|
||||
.scrollBar( BarState.Auto )
|
||||
}
|
||||
.padding( $r( 'app.float.distance_24' ) )
|
||||
.width( CommonConstants.DIALOG_WIDTH )
|
||||
.borderRadius( CommonConstants.DIALOG_BORDER_RADIUS )
|
||||
.backgroundColor( Color.White )
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Custom button style.
|
||||
*/
|
||||
@Extend( Button ) function dialogButtonStyle() {
|
||||
.fontSize( $r( 'app.float.font_16' ) )
|
||||
.height( $r( 'app.float.dialog_btn_height' ) )
|
||||
.width( $r( 'app.float.dialog_btn_width' ) )
|
||||
.backgroundColor( Color.White )
|
||||
.fontColor( $r( 'app.color.main_blue' ) )
|
||||
}
|
@ -0,0 +1,100 @@
|
||||
/*
|
||||
* Copyright (c) 2023 Huawei Device Co., Ltd.
|
||||
* Licensed under the Apache License,Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { CommonConstants } from '../common/constant/CommonConstant';
|
||||
|
||||
@Component
|
||||
export default struct ProgressEditPanel {
|
||||
@Link sliderMode: number;
|
||||
@Prop slidingProgress: number;
|
||||
onCancel: () => void;
|
||||
onClickOK: (progress: number) => void;
|
||||
|
||||
build() {
|
||||
Column() {
|
||||
Row() {
|
||||
Slider({
|
||||
value: this.slidingProgress,
|
||||
min: CommonConstants.SLIDER_MIN_VALUE,
|
||||
max: CommonConstants.SLIDER_MAX_VALUE,
|
||||
style: SliderStyle.InSet,
|
||||
step: CommonConstants.SLIDER_STEP
|
||||
})
|
||||
.width(CommonConstants.SLIDER_INNER_WIDTH)
|
||||
.onChange((value: number, mode: SliderChangeMode) => {
|
||||
this.slidingProgress = Math.floor(value);
|
||||
this.sliderMode = mode;
|
||||
})
|
||||
Text(`${this.slidingProgress}%`)
|
||||
.fontSize($r('app.float.font_14'))
|
||||
.fontWeight(CommonConstants.FONT_WEIGHT)
|
||||
.fontColor($r('app.color.dialog_progress'))
|
||||
.textAlign(TextAlign.Center)
|
||||
.margin({ left: $r('app.float.distance_8') })
|
||||
}
|
||||
.width(CommonConstants.SLIDER_WIDTH)
|
||||
.height(CommonConstants.SLIDER_HEIGHT)
|
||||
|
||||
Row() {
|
||||
CustomButton({
|
||||
buttonText: $r('app.string.cancel_button')
|
||||
})
|
||||
.onClick(() => this.onCancel())
|
||||
CustomButton({
|
||||
buttonText: $r('app.string.confirm_button')
|
||||
})
|
||||
.onClick(() => this.onClickOK(this.slidingProgress))
|
||||
}
|
||||
.margin({ top: CommonConstants.SLIDER_BUTTON_MARGIN })
|
||||
.width(CommonConstants.DIALOG_OPERATION_WIDTH)
|
||||
.justifyContent(FlexAlign.SpaceBetween)
|
||||
}
|
||||
.height($r('app.float.edit_panel_height'))
|
||||
.width(CommonConstants.FULL_WIDTH)
|
||||
.justifyContent(FlexAlign.End)
|
||||
}
|
||||
}
|
||||
|
||||
@Component
|
||||
struct CustomButton {
|
||||
@State buttonColor: Resource = $r('app.color.start_window_background');
|
||||
buttonText: Resource;
|
||||
|
||||
build() {
|
||||
Text(this.buttonText)
|
||||
.dialogButtonStyle()
|
||||
.backgroundColor(this.buttonColor)
|
||||
.borderRadius(CommonConstants.LIST_RADIUS)
|
||||
.textAlign(TextAlign.Center)
|
||||
.onTouch((event: TouchEvent) => {
|
||||
if (event.type === TouchType.Down) {
|
||||
this.buttonColor = $r('app.color.custom_button_color');
|
||||
}
|
||||
if (event.type === TouchType.Up) {
|
||||
this.buttonColor = $r('app.color.start_window_background');
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Custom button style.
|
||||
*/
|
||||
@Extend(Text) function dialogButtonStyle() {
|
||||
.fontSize($r('app.float.font_16'))
|
||||
.height($r('app.float.dialog_btn_height'))
|
||||
.width($r('app.float.dialog_btn_width'))
|
||||
.fontColor($r('app.color.main_blue'))
|
||||
}
|
@ -0,0 +1,112 @@
|
||||
/*
|
||||
* Copyright (c) 2023 Huawei Device Co., Ltd.
|
||||
* Licensed under the Apache License,Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { CommonConstants } from '../common/constant/CommonConstant';
|
||||
|
||||
@Component
|
||||
export default struct TargetInformation {
|
||||
@Prop latestUpdateDate: string;
|
||||
@Prop totalTasksNumber: number;
|
||||
@Prop completedTasksNumber: number;
|
||||
|
||||
build() {
|
||||
Column() {
|
||||
this.TargetItem()
|
||||
this.OverallProgress()
|
||||
}
|
||||
.padding($r('app.float.distance_16'))
|
||||
.width(CommonConstants.MAIN_BOARD_WIDTH)
|
||||
.height($r('app.float.target_info_height'))
|
||||
.backgroundColor(Color.White)
|
||||
.borderRadius(CommonConstants.TARGET_BORDER_RADIUS)
|
||||
}
|
||||
|
||||
@Builder
|
||||
TargetItem() {
|
||||
Row() {
|
||||
Column() {
|
||||
Text($r('app.string.target_name'))
|
||||
.fontSize($r('app.float.font_18'))
|
||||
.fontWeight(CommonConstants.FONT_WEIGHT_LARGE)
|
||||
.width(CommonConstants.TITLE_WIDTH)
|
||||
Text($r('app.string.target_info'))
|
||||
.opacityTextStyle()
|
||||
.fontSize($r('app.float.font_15'))
|
||||
.margin({ top: $r('app.float.distance_12') })
|
||||
}
|
||||
.margin({ left: CommonConstants.TARGET_MARGIN_LEFT })
|
||||
.alignItems(HorizontalAlign.Start)
|
||||
}
|
||||
.width(CommonConstants.FULL_WIDTH)
|
||||
}
|
||||
|
||||
@Builder
|
||||
OverallProgress() {
|
||||
Row() {
|
||||
Column() {
|
||||
Text($r('app.string.overall_progress'))
|
||||
.fontSize($r('app.float.font_16'))
|
||||
.fontColor($r('app.color.title_black_color'))
|
||||
.fontWeight(CommonConstants.FONT_WEIGHT)
|
||||
Row() {
|
||||
Text($r('app.string.latest_updateTime'))
|
||||
.opacityTextStyle()
|
||||
Text(this.latestUpdateDate)
|
||||
.opacityTextStyle()
|
||||
}
|
||||
.margin({ top: $r('app.float.distance_2') })
|
||||
}
|
||||
.alignItems(HorizontalAlign.Start)
|
||||
|
||||
Blank()
|
||||
Stack() {
|
||||
Row() {
|
||||
Text(this.completedTasksNumber.toString())
|
||||
.fontSize($r('app.float.font_14'))
|
||||
.fontWeight(CommonConstants.FONT_WEIGHT)
|
||||
.fontColor($r('app.color.main_blue'))
|
||||
Text(`/${this.totalTasksNumber}`)
|
||||
.fontSize($r('app.float.font_14'))
|
||||
.fontWeight(CommonConstants.FONT_WEIGHT)
|
||||
}
|
||||
|
||||
Progress({
|
||||
value: this.completedTasksNumber,
|
||||
total: this.totalTasksNumber,
|
||||
type: ProgressType.Ring
|
||||
})
|
||||
.color($r('app.color.main_blue'))
|
||||
.style({
|
||||
strokeWidth: CommonConstants.STROKE_WIDTH
|
||||
})
|
||||
.width($r('app.float.wh_value_48'))
|
||||
.height($r('app.float.wh_value_48'))
|
||||
}
|
||||
}
|
||||
.width(CommonConstants.FULL_WIDTH)
|
||||
.height($r('app.float.wh_value_48'))
|
||||
.margin({ top: $r('app.float.distance_15') })
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Custom Transparent Text Styles
|
||||
*/
|
||||
@Extend(Text) function opacityTextStyle() {
|
||||
.fontSize($r('app.float.font_12'))
|
||||
.fontColor($r('app.color.title_black_color'))
|
||||
.opacity(CommonConstants.OPACITY)
|
||||
.fontWeight(CommonConstants.FONT_WEIGHT)
|
||||
}
|
@ -0,0 +1,142 @@
|
||||
/*
|
||||
* Copyright (c) 2023 Huawei Device Co., Ltd.
|
||||
* Licensed under the Apache License,Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import TaskItemBean from '../common/bean/TaskItemBean';
|
||||
import TargetListItem from './TargetListItem';
|
||||
import { selectAllOrCancel , deleteSelected , isSelectAll , isSelectRows } from '../viewmodel/TaskListViewModel';
|
||||
import { CommonConstants } from '../common/constant/CommonConstant';
|
||||
|
||||
@Component
|
||||
export default struct TargetList {
|
||||
@Consume overAllProgressChanged: boolean;
|
||||
@State isEditMode: boolean = false;
|
||||
@State selectArray: Array<boolean> = [];
|
||||
@State clickIndex: number = CommonConstants.DEFAULT_CLICK_INDEX;
|
||||
@State selectAll: boolean = false;
|
||||
@Link targetData: Array<TaskItemBean>;
|
||||
onAddClick: () => void;
|
||||
|
||||
build() {
|
||||
Column() {
|
||||
Row() {
|
||||
Text( $r( 'app.string.sub_goals' ) )
|
||||
.fontSize( $r( 'app.float.secondary_title' ) )
|
||||
.fontWeight( CommonConstants.FONT_WEIGHT_LARGE )
|
||||
.fontColor( $r( 'app.color.title_black_color' ) )
|
||||
Blank()
|
||||
if ( this.targetData.length > 0 ) {
|
||||
if ( this.isEditMode ) {
|
||||
Text( $r( 'app.string.cancel_button' ) )
|
||||
.operateTextStyle( $r( 'app.color.main_blue' ) )
|
||||
.margin( { left : $r( 'app.float.distance_16' ) } )
|
||||
.onClick( () => {
|
||||
this.selectAll = false;
|
||||
this.isEditMode = false;
|
||||
selectAllOrCancel.call( this , false );
|
||||
} )
|
||||
Text( $r( 'app.string.select_all_button' ) )
|
||||
.operateTextStyle( $r( 'app.color.main_blue' ) )
|
||||
.margin( {
|
||||
left : $r( 'app.float.distance_16' )
|
||||
} )
|
||||
Checkbox()
|
||||
.select( isSelectAll.call( this ) )
|
||||
.selectedColor( $r( 'app.color.main_blue' ) )
|
||||
.width( CommonConstants.CHECKBOX_WIDTH )
|
||||
.onClick( () => {
|
||||
this.selectAll = !this.selectAll;
|
||||
selectAllOrCancel.call( this , this.selectAll );
|
||||
} )
|
||||
} else {
|
||||
Text( $r( 'app.string.edit_button' ) )
|
||||
.operateTextStyle( $r( 'app.color.main_blue' ) )
|
||||
.onClick( () => {
|
||||
this.isEditMode = true;
|
||||
selectAllOrCancel.call( this , false );
|
||||
} )
|
||||
}
|
||||
}
|
||||
}
|
||||
.width( CommonConstants.FULL_WIDTH )
|
||||
.height( $r( 'app.float.wh_value_30' ) )
|
||||
.padding( {
|
||||
left : $r( 'app.float.distance_16' ) ,
|
||||
right : $r( 'app.float.distance_11' )
|
||||
} )
|
||||
|
||||
List( { space : CommonConstants.LIST_SPACE } ) {
|
||||
ForEach( this.targetData , ( item: TaskItemBean , index: number ) => {
|
||||
ListItem() {
|
||||
TargetListItem( {
|
||||
taskItem : item ,
|
||||
index : index ,
|
||||
selectArr : $selectArray ,
|
||||
isEditMode : this.isEditMode ,
|
||||
clickIndex : $clickIndex
|
||||
} )
|
||||
}
|
||||
} , ( item , index ) => JSON.stringify( item ) + index )
|
||||
}
|
||||
.edgeEffect( EdgeEffect.None )
|
||||
.margin( { top : $r( 'app.float.distance_12' ) } )
|
||||
.width( CommonConstants.FULL_WIDTH )
|
||||
.height( CommonConstants.LIST_HEIGHT )
|
||||
|
||||
Blank()
|
||||
.width( CommonConstants.FULL_WIDTH )
|
||||
.height( CommonConstants.DIALOG_OPERATION_HEIGHT )
|
||||
if ( this.isEditMode ) {
|
||||
Button( $r( 'app.string.delete_button' ) )
|
||||
.opacity( isSelectRows.call( this ) ? CommonConstants.NO_OPACITY : CommonConstants.OPACITY )
|
||||
.enabled( isSelectRows.call( this ) ? true : false )
|
||||
.operateButtonStyle( $r( 'app.color.main_red' ) )
|
||||
.onClick( () => {
|
||||
deleteSelected.call( this );
|
||||
selectAllOrCancel.call( this , false );
|
||||
this.selectAll = false;
|
||||
} )
|
||||
} else {
|
||||
Button( $r( 'app.string.add_task' ) )
|
||||
.operateButtonStyle( $r( 'app.color.main_blue' ) )
|
||||
.onClick( () => this.onAddClick() )
|
||||
}
|
||||
}
|
||||
.width( CommonConstants.MAIN_BOARD_WIDTH )
|
||||
.height( CommonConstants.LIST_BOARD_HEIGHT )
|
||||
.padding( { top : $r( 'app.float.distance_16' ) } )
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Custom text button style.
|
||||
*/
|
||||
@Extend( Text ) function operateTextStyle( color: Resource ) {
|
||||
.fontSize( $r( 'app.float.font_16' ) )
|
||||
.fontColor( color )
|
||||
.lineHeight( $r( 'app.float.wh_value_19' ) )
|
||||
.fontWeight( CommonConstants.FONT_WEIGHT )
|
||||
}
|
||||
|
||||
/**
|
||||
* Custom button style.
|
||||
*/
|
||||
@Extend( Button ) function operateButtonStyle( color: Resource ) {
|
||||
.width( $r( 'app.float.button_width' ) )
|
||||
.height( $r( 'app.float.button_height' ) )
|
||||
.fontSize( $r( 'app.float.font_16' ) )
|
||||
.fontWeight( CommonConstants.FONT_WEIGHT )
|
||||
.fontColor( color )
|
||||
.backgroundColor( $r( 'app.color.button_background' ) )
|
||||
}
|
@ -0,0 +1,151 @@
|
||||
/*
|
||||
* Copyright (c) 2023 Huawei Device Co., Ltd.
|
||||
* Licensed under the Apache License,Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import TaskItemBean from '../common/bean/TaskItemBean';
|
||||
import { CommonConstants } from '../common/constant/CommonConstant';
|
||||
import { changeProgress } from '../viewmodel/TaskListItemModel';
|
||||
import ProgressEditPanel from './ProgressEditPanel';
|
||||
|
||||
@Component
|
||||
export default struct TargetListItem {
|
||||
private taskItem: TaskItemBean;
|
||||
@State latestProgress: number = 0;
|
||||
@State updateDate: string = '';
|
||||
@Link selectArr: Array<boolean>;
|
||||
@Prop isEditMode: boolean;
|
||||
@Link @Watch('onClickIndexChanged') clickIndex: number;
|
||||
@State isExpanded: boolean = false;
|
||||
@Consume overAllProgressChanged: boolean;
|
||||
@State sliderMode: number = CommonConstants.DEFAULT_SLIDER_MODE;
|
||||
private index: number;
|
||||
|
||||
aboutToAppear() {
|
||||
this.latestProgress = this.taskItem.progressValue;
|
||||
this.updateDate = this.taskItem.updateDate;
|
||||
}
|
||||
|
||||
/**
|
||||
* Listening click index.
|
||||
*/
|
||||
onClickIndexChanged() {
|
||||
if (this.clickIndex !== this.index) {
|
||||
this.isExpanded = false;
|
||||
}
|
||||
}
|
||||
|
||||
build() {
|
||||
Stack({ alignContent: Alignment.Start }) {
|
||||
Column() {
|
||||
this.TargetItem()
|
||||
if (this.isExpanded) {
|
||||
Blank()
|
||||
ProgressEditPanel({
|
||||
slidingProgress: this.latestProgress,
|
||||
onCancel: () => this.isExpanded = false,
|
||||
onClickOK: changeProgress.bind(this),
|
||||
sliderMode: $sliderMode
|
||||
})
|
||||
.transition({
|
||||
scale: {
|
||||
x: CommonConstants.TRANSITION_ANIMATION_X,
|
||||
y: CommonConstants.TRANSITION_ANIMATION_Y
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
.padding({
|
||||
left: $r('app.float.distance_16'),
|
||||
top: $r('app.float.distance_14'),
|
||||
bottom: $r('app.float.distance_12'),
|
||||
right: this.isEditMode ? $r('app.float.distance_54') : $r('app.float.distance_16')
|
||||
})
|
||||
.height(this.isExpanded ? $r('app.float.expanded_item_height') : $r('app.float.list_item_height'))
|
||||
.width(CommonConstants.FULL_WIDTH)
|
||||
.opacity(
|
||||
this.latestProgress === CommonConstants.SLIDER_MAX_VALUE ?
|
||||
CommonConstants.OPACITY : CommonConstants.NO_OPACITY
|
||||
)
|
||||
.borderRadius(CommonConstants.LIST_RADIUS)
|
||||
.animation({ duration: CommonConstants.DURATION })
|
||||
.backgroundColor(this.selectArr[this.index] ? $r('app.color.edit_blue') : Color.White)
|
||||
.onClick(() => {
|
||||
if (this.sliderMode === CommonConstants.CLICK_SLIDER_MODE) {
|
||||
this.sliderMode = CommonConstants.DEFAULT_SLIDER_MODE;
|
||||
return;
|
||||
}
|
||||
if (!this.isEditMode) {
|
||||
animateTo({ duration: CommonConstants.DURATION }, () => {
|
||||
this.isExpanded = !this.isExpanded;
|
||||
})
|
||||
this.clickIndex = this.index;
|
||||
}
|
||||
})
|
||||
|
||||
if (this.isEditMode) {
|
||||
Row() {
|
||||
Checkbox()
|
||||
.select(this.selectArr[this.index])
|
||||
.selectedColor($r('app.color.main_blue'))
|
||||
.width(CommonConstants.CHECKBOX_WIDTH)
|
||||
.margin({ right: $r('app.float.distance_16') })
|
||||
.onChange((isCheck: boolean) => {
|
||||
this.selectArr[this.index] = isCheck;
|
||||
})
|
||||
}
|
||||
.width(CommonConstants.FULL_WIDTH)
|
||||
.justifyContent(FlexAlign.End)
|
||||
}
|
||||
}
|
||||
.width(CommonConstants.FULL_WIDTH)
|
||||
}
|
||||
|
||||
@Builder TargetItem() {
|
||||
Row() {
|
||||
Text(this.taskItem.taskName)
|
||||
.fontSize($r('app.float.font_16'))
|
||||
.fontWeight(CommonConstants.FONT_WEIGHT)
|
||||
.fontColor($r('app.color.title_black_color'))
|
||||
.width(CommonConstants.TASK_NAME_WIDTH)
|
||||
.textAlign(TextAlign.Start)
|
||||
.maxLines(CommonConstants.MAX_LINES)
|
||||
Blank()
|
||||
Column() {
|
||||
Text(`${this.latestProgress}%`)
|
||||
.fontSize($r('app.float.font_16'))
|
||||
.fontWeight(CommonConstants.FONT_WEIGHT)
|
||||
.fontColor($r('app.color.title_black_color'))
|
||||
Row() {
|
||||
Text($r('app.string.latest_updateTime'))
|
||||
.opacityTextStyle()
|
||||
Text(this.updateDate)
|
||||
.opacityTextStyle()
|
||||
}
|
||||
.margin({ top: $r('app.float.distance_2') })
|
||||
}
|
||||
.alignItems(HorizontalAlign.End)
|
||||
}
|
||||
.width(CommonConstants.FULL_WIDTH)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Custom transparent text styles.
|
||||
*/
|
||||
@Extend(Text) function opacityTextStyle() {
|
||||
.fontSize($r('app.float.font_12'))
|
||||
.fontColor($r('app.color.title_black_color'))
|
||||
.opacity(CommonConstants.OPACITY)
|
||||
.fontWeight(CommonConstants.FONT_WEIGHT)
|
||||
}
|
@ -0,0 +1,96 @@
|
||||
/*
|
||||
* Copyright (c) 2023 Huawei Device Co., Ltd.
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { CommonConstants } from '../common/constant/CommonConstant';
|
||||
import Logger from '../common/utils/Logger';
|
||||
import TaskItemBean from '../common/bean/TaskItemBean';
|
||||
|
||||
const TAG = '[DataModel]';
|
||||
|
||||
/**
|
||||
* Saving and manipulating data displayed on the page.
|
||||
*/
|
||||
export class DataModel {
|
||||
|
||||
/**
|
||||
* Saved data.
|
||||
*/
|
||||
private targetData: Array<TaskItemBean> = [];
|
||||
|
||||
/**
|
||||
* Get the latest data.
|
||||
*/
|
||||
getData(): Array<TaskItemBean> {
|
||||
return this.targetData;
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete the selected data.
|
||||
*
|
||||
* @param selectArr: An array indicating whether historical data is selected.
|
||||
*/
|
||||
deleteData(selectArr: Array<boolean>) {
|
||||
if (!selectArr) {
|
||||
Logger.error(TAG, 'Failed to delete data because selectArr is ' + selectArr);
|
||||
}
|
||||
let dataLen = this.targetData.length - CommonConstants.ONE_TASK;
|
||||
for (let i = dataLen; i >= 0; i--) {
|
||||
if (selectArr[i]) {
|
||||
this.targetData.splice(i, CommonConstants.ONE_TASK);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Add data to targetData.
|
||||
*
|
||||
* @param Data of the RecordItemBean type to be added.
|
||||
*/
|
||||
addData(data: TaskItemBean) {
|
||||
if (!data) {
|
||||
Logger.error(TAG, 'addData error because data is: ' + data);
|
||||
return;
|
||||
}
|
||||
this.targetData.push(data);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the latest progress.
|
||||
*/
|
||||
getLatestProgressValue(): number {
|
||||
if (this.targetData.length === 0) {
|
||||
return 0;
|
||||
}
|
||||
return this.targetData[this.targetData.length - CommonConstants.ONE_TASK].progressValue;
|
||||
}
|
||||
|
||||
/**
|
||||
* Update data based on index and progress values and update date.
|
||||
*
|
||||
* @param index of update item.
|
||||
* @param updateValue of update item.
|
||||
* @param updateDate of update item.
|
||||
*/
|
||||
updateProgress(index: number, updateValue: number, updateDate: string): boolean {
|
||||
if (!this.targetData[index]) {
|
||||
return false;
|
||||
}
|
||||
this.targetData[index].progressValue = updateValue;
|
||||
this.targetData[index].updateDate = updateDate;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
export default new DataModel();
|
@ -0,0 +1,41 @@
|
||||
/*
|
||||
* Copyright (c) 2023 Huawei Device Co., Ltd.
|
||||
* Licensed under the Apache License,Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
// @ts-nocheck
|
||||
import promptAction from '@ohos.promptAction';
|
||||
import DataModel from './DataModel';
|
||||
import getCurrentTime from '../common/utils/DateUtil';
|
||||
import TaskItemBean from '../common/bean/TaskItemBean';
|
||||
import { CommonConstants } from '../common/constant/CommonConstant';
|
||||
|
||||
/**
|
||||
* Save the progress value and update time after you click OK in the dialog box.
|
||||
*
|
||||
* @param context context from view.
|
||||
* @param value Latest Progress Value.
|
||||
*/
|
||||
export function saveTask(wifiCandidateConfig: Object) {
|
||||
if (wifiCandidateConfig.ssid === '') {
|
||||
promptAction.showToast({
|
||||
message: $r('app.string.cannot_input_empty'),
|
||||
duration: CommonConstants.TOAST_TIME,
|
||||
bottom: CommonConstants.TOAST_MARGIN_BOTTOM
|
||||
});
|
||||
return;
|
||||
}
|
||||
DataModel.addData(new TaskItemBean(wifiCandidateConfig.ssid, 0, getCurrentTime()));
|
||||
this.targetData = DataModel.getData();
|
||||
this.overAllProgressChanged = !this.overAllProgressChanged;
|
||||
this.dialogController.close();
|
||||
}
|
@ -0,0 +1,32 @@
|
||||
/*
|
||||
* Copyright (c) 2023 Huawei Device Co., Ltd.
|
||||
* Licensed under the Apache License,Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import getCurrentTime from '../common/utils/DateUtil';
|
||||
import DataModel from '../viewmodel/DataModel';
|
||||
|
||||
/**
|
||||
* Save the adjustment progress.
|
||||
*
|
||||
* @param progress progress value saved.
|
||||
*/
|
||||
export function changeProgress(progress: number) {
|
||||
this.latestProgress = progress;
|
||||
this.updateDate = getCurrentTime();
|
||||
let result = DataModel.updateProgress(this.index, this.latestProgress, this.updateDate);
|
||||
if (result) {
|
||||
this.overAllProgressChanged = !this.overAllProgressChanged;
|
||||
}
|
||||
this.isExpanded = false;
|
||||
}
|
@ -0,0 +1,62 @@
|
||||
/*
|
||||
* Copyright (c) 2023 Huawei Device Co., Ltd.
|
||||
* Licensed under the Apache License,Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import DataModel from '../viewmodel/DataModel';
|
||||
|
||||
/**
|
||||
* Delete the selected item and exit the editing mode.
|
||||
*/
|
||||
export function deleteSelected() {
|
||||
DataModel.deleteData(this.selectArray);
|
||||
this.targetData = DataModel.getData();
|
||||
this.overAllProgressChanged = !this.overAllProgressChanged;
|
||||
this.isEditMode = false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Select or deselect all.
|
||||
*
|
||||
* @param selectStatus true: Select all. Otherwise, deselect all.
|
||||
*/
|
||||
export function selectAllOrCancel(selectStatus: boolean) {
|
||||
let newSelectArray = [];
|
||||
this.targetData.forEach(() => {
|
||||
newSelectArray.push(selectStatus);
|
||||
});
|
||||
this.selectArray = newSelectArray;
|
||||
}
|
||||
|
||||
/**
|
||||
* Whether to select all.
|
||||
*/
|
||||
export function isSelectAll(): boolean {
|
||||
if (this.selectArray.length === 0) {
|
||||
return false;
|
||||
}
|
||||
let deSelectCount = this.selectArray.filter(selected => selected === false).length;
|
||||
if (deSelectCount === 0) {
|
||||
this.selectAll = true;
|
||||
return true;
|
||||
}
|
||||
this.selectAll = false;
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check whether there are selected rows.
|
||||
*/
|
||||
export function isSelectRows(): boolean {
|
||||
return this.selectArray.filter((selected) => selected === true).length !== 0;
|
||||
}
|
@ -24,7 +24,8 @@ export enum Category {
|
||||
AutoTest ,
|
||||
BenchMark ,
|
||||
Stress,
|
||||
App
|
||||
App,
|
||||
Stability
|
||||
}
|
||||
|
||||
let NextId = 0;
|
||||
|
@ -1323,8 +1323,15 @@ const TestComposition: any[] = [
|
||||
'category' : Category.App
|
||||
},
|
||||
{
|
||||
'name' : 'p2p' ,
|
||||
'detail' : 'p2p发现' ,
|
||||
'name' : 'WIFI候选网络' ,
|
||||
'detail' : 'wifi候选网络' ,
|
||||
'url' : 'pages/subAppTest/wifiCandidateTest' ,
|
||||
'image' : $r( 'app.media.wifi' ) ,
|
||||
'category' : Category.App
|
||||
},
|
||||
{
|
||||
'name' : 'p2p扫描' ,
|
||||
'detail' : 'p2p扫描结果' ,
|
||||
'url' : 'pages/subAppTest/p2pDiscoveryTest' ,
|
||||
'image' : $r( 'app.media.WLAN' ) ,
|
||||
'category' : Category.App
|
||||
@ -1456,6 +1463,27 @@ const TestComposition: any[] = [
|
||||
'image' : $r( 'app.media.ScenarioTest' ) ,
|
||||
'category' : Category.Scenario
|
||||
},
|
||||
{
|
||||
'name' : 'WiFiSwitchStabilityTest' ,
|
||||
'detail' : 'WiFi开关稳定性测试' ,
|
||||
'url' : 'pages/subStabilityTest/wifiSwitchStabilityTest' ,
|
||||
'image' : $r( 'app.media.ScenarioTest' ) ,
|
||||
'category' : Category.Stability
|
||||
},
|
||||
{
|
||||
'name' : 'WiFiScanStabilityTest' ,
|
||||
'detail' : 'WiFi搜索稳定性测试' ,
|
||||
'url' : 'pages/subStabilityTest/wifiScanStabilityTest' ,
|
||||
'image' : $r( 'app.media.ScenarioTest' ) ,
|
||||
'category' : Category.Stability
|
||||
},
|
||||
{
|
||||
'name' : 'WiFiConnectStabilityTest' ,
|
||||
'detail' : 'WiFi连接稳定性测试' ,
|
||||
'url' : 'pages/subStabilityTest/wifiConnectStabilityTest' ,
|
||||
'image' : $r( 'app.media.ScenarioTest' ) ,
|
||||
'category' : Category.Stability
|
||||
},
|
||||
{
|
||||
'name' : 'WifiBenchmarkTest' ,
|
||||
'detail' : 'Wifi性能测试' ,
|
||||
|
@ -22,7 +22,9 @@ import { ManualApiTest } from '../Component/manualApiTestComponent';
|
||||
import { ManualSceneTest } from '../Component/manualSceneTest';
|
||||
import { AutoTest } from '../Component/autoTest';
|
||||
import { AppTest } from '../Component/appTest';
|
||||
import { StabilityTest } from "../Component/stabilityTest"
|
||||
import { BenchmarkTest } from '../Component/benchmarkTest';
|
||||
import { StressTest } from "../Component/stressTest"
|
||||
import ConfigData from '../Utils/ConfigData';
|
||||
|
||||
const TAG = '[homePage]'
|
||||
@ -40,30 +42,35 @@ struct TestCategory {
|
||||
Tabs() {
|
||||
TabContent() {
|
||||
AppTest( { testItems : this.testItems.filter( item => ( item.category === Category.App ) ) } )
|
||||
}.tabBar( $r( "app.string.App" ) ).margin( { top : 20 } )
|
||||
}.tabBar( $r( "app.string.App" ) ).margin( { top : $r( "app.float.distance_20" ) } )
|
||||
|
||||
TabContent() {
|
||||
ManualApiTest( { testItems : this.testItems.filter( item => ( item.category === Category.API ) ) } )
|
||||
}.tabBar( $r( "app.string.api" ) ).margin( { top : 20 } )
|
||||
}.tabBar( $r( "app.string.api" ) ).margin( { top : $r( "app.float.distance_20" ) } )
|
||||
|
||||
TabContent() {
|
||||
AutoTest( { testItems : this.testItems.filter( item => ( item.category === Category.AutoTest ) ) } )
|
||||
}.tabBar( $r( "app.string.autotest" ) ).margin( { top : 5 } )
|
||||
}.tabBar( $r( "app.string.autotest" ) ).margin( { top : $r( "app.float.distance_5" ) } )
|
||||
|
||||
TabContent() {
|
||||
ManualSceneTest( { testItems : this.testItems.filter( item => ( item.category === Category.Scenario ) ) } )
|
||||
}.tabBar( $r( "app.string.scenario" ) ).margin( { top : 5 } )
|
||||
}.tabBar( $r( "app.string.scenario" ) ).margin( { top : $r( "app.float.distance_5" ) } )
|
||||
|
||||
TabContent() {
|
||||
StabilityTest( { testItems : this.testItems.filter( item => ( item.category === Category.Stability ) ) } )
|
||||
}.tabBar( $r( "app.string.stability" ) ).margin( { top : $r( "app.float.distance_5" ) } )
|
||||
|
||||
TabContent() {
|
||||
BenchmarkTest( { testItems : this.testItems.filter( item => ( item.category === Category.BenchMark ) ) } )
|
||||
}.tabBar( $r( "app.string.benchmark" ) ).margin( { top : 5 } )
|
||||
}.tabBar( $r( "app.string.benchmark" ) ).margin( { top : $r( "app.float.distance_5" ) } )
|
||||
|
||||
TabContent() {
|
||||
BenchmarkTest( { testItems : this.testItems.filter( item => ( item.category === Category.Stress ) ) } )
|
||||
}.tabBar( $r( "app.string.stress" ) ).margin( { top : 5 } )
|
||||
StressTest( { testItems : this.testItems.filter( item => ( item.category === Category.Stress ) ) } )
|
||||
}.tabBar( $r( "app.string.stress" ) ).margin( { top : $r( "app.float.distance_5" ) } )
|
||||
}
|
||||
.barWidth( ConfigData.WH_80_100 )
|
||||
.barHeight( "40vp" )
|
||||
.align(Alignment.TopStart)
|
||||
.align( Alignment.TopStart )
|
||||
.barMode( BarMode.Scrollable )
|
||||
.backgroundColor( $r( "app.color.white" ) )
|
||||
}
|
||||
@ -86,7 +93,7 @@ struct HomePage {
|
||||
Image( $r( 'app.media.Switch' ) )
|
||||
.height( 30 )
|
||||
.width( 30 )
|
||||
.margin( { top : 5 , right : 10 } )
|
||||
.margin( { top : $r( "app.float.distance_5" ) , right : $r( "app.float.distance_10" ) } )
|
||||
.onClick( () => {
|
||||
} )
|
||||
}
|
||||
|
@ -18,8 +18,11 @@
|
||||
import featureAbility from '@ohos.ability.featureAbility'
|
||||
import wifi from '@ohos.wifi'
|
||||
import { AvailableP2p } from '../../Component/availableP2p'
|
||||
|
||||
import { TestData } from '../../MainAbility/model/testData'
|
||||
import router from '@system.router';
|
||||
import { P2pTitleBar } from '../../Component/p2pTitleBar'
|
||||
import { PageTitle } from '../../Component/pageTitle'
|
||||
import { TestImageDisplay } from '../../Component/testImageDisplay'
|
||||
import { P2pModel } from '../../MainAbility/model/p2pModel'
|
||||
|
||||
const TAG = '[p2pScan]'
|
||||
@ -31,11 +34,12 @@ const PERMISSION_P2P_NAME: string = 'ohos.permission.LOCATION'
|
||||
@Component
|
||||
struct P2pFound {
|
||||
private p2pModel: P2pModel = new P2pModel()
|
||||
private testItem: string = "p2p扫描"
|
||||
private testItem: TestData = router.getParams().testId;
|
||||
// private testItem: string = "p2p扫描"
|
||||
@State p2pLinkedInfo: any = {
|
||||
deviceName : "" ,
|
||||
deviceAddress : "" ,
|
||||
groupOwnerAddr: "" ,
|
||||
groupOwnerAddr : "" ,
|
||||
groupName : "" ,
|
||||
goBand : 0
|
||||
}
|
||||
@ -47,7 +51,7 @@ struct P2pFound {
|
||||
this.p2pModel.getP2pPeerDevices( ( result ) => {
|
||||
if ( this.p2pIsSwitchOn ) {
|
||||
this.p2pList = result
|
||||
console.log( 'scan p2pList:' + JSON.stringify(this.p2pList ))
|
||||
console.log( 'scan p2pList:' + JSON.stringify( this.p2pList ) )
|
||||
setTimeout( () => {
|
||||
this.scan()
|
||||
} , 2000 )
|
||||
@ -67,7 +71,7 @@ struct P2pFound {
|
||||
this.p2pLinkedInfo = {
|
||||
deviceName : "" ,
|
||||
deviceAddress : "" ,
|
||||
groupOwnerAddr: "" ,
|
||||
groupOwnerAddr : "" ,
|
||||
groupName : "" ,
|
||||
goBand : 0
|
||||
}
|
||||
@ -80,7 +84,7 @@ struct P2pFound {
|
||||
|
||||
addP2pListener() {
|
||||
wifi.on( 'p2pConnectionChange' , wifiP2pLinkedInfo => {
|
||||
let state =wifiP2pLinkedInfo.connectState
|
||||
let state = wifiP2pLinkedInfo.connectState
|
||||
console.log( TAG , `p2pConnectionChange: ${ state }` )
|
||||
this.getP2pLinkedInfo()
|
||||
} )
|
||||
@ -108,7 +112,9 @@ struct P2pFound {
|
||||
build() {
|
||||
Column() {
|
||||
Stack( { alignContent : Alignment.TopStart } ) {
|
||||
P2pTitleBar( { testItem : this.testItem } )
|
||||
TestImageDisplay( { testItem : this.testItem } )
|
||||
PageTitle( { testItem : this.testItem } )
|
||||
// P2pTitleBar( { testItem : this.testItem } )
|
||||
}
|
||||
|
||||
Row() {
|
||||
@ -116,7 +122,7 @@ struct P2pFound {
|
||||
.fontSize( 22 )
|
||||
.fontWeight( FontWeight.Bold )
|
||||
.layoutWeight( 1 )
|
||||
.align(Alignment.TopStart)
|
||||
.align( Alignment.TopStart )
|
||||
Column() {
|
||||
Toggle( { type : ToggleType.Switch , isOn : this.p2pIsSwitchOn } )
|
||||
.onChange( ( isOn: boolean ) => {
|
||||
|
@ -0,0 +1,176 @@
|
||||
/**
|
||||
* Copyright (c) 2022 Shenzhen Kaihong Digital Industry Development Co., Ltd.
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
// @ts-nocheck
|
||||
|
||||
import wifi from '@ohos.wifi'
|
||||
import { TitleBar } from '../../Component/titleBar'
|
||||
import router from '@system.router';
|
||||
import { TestData } from '../../MainAbility/model/testData'
|
||||
import { WifiModel } from '../../MainAbility/model/wifiModel'
|
||||
import ConfigData from '../../Utils/ConfigData';
|
||||
import wifiManager from '@ohos.wifiManager'
|
||||
import { TestImageDisplay } from '../../Component/testImageDisplay';
|
||||
import { PageTitle } from '../../Component/pageTitle';
|
||||
|
||||
import TargetInformation from '../../MainAbility/candidateWifiModel/view/TargetInformation';
|
||||
import TargetList from '../../MainAbility/candidateWifiModel/view/TargetList';
|
||||
import { CommonConstants } from '../../MainAbility/candidateWifiModel/common/constant/CommonConstant';
|
||||
import DataModel from '../../MainAbility/candidateWifiModel/viewmodel/DataModel';
|
||||
import AddTargetDialog from '../../MainAbility/candidateWifiModel/view/AddTargetDialog';
|
||||
import { saveTask } from '../../MainAbility/candidateWifiModel/viewmodel/MainPageModel';
|
||||
import getCurrentTime from '../../MainAbility/candidateWifiModel/common/utils/DateUtil';
|
||||
|
||||
const TAG = '[wifiCandidate]'
|
||||
|
||||
/**
|
||||
* wifi Found Test Page Of Wifi test
|
||||
*/
|
||||
@Entry
|
||||
@Component
|
||||
struct WifiCandidate {
|
||||
@State targetData: Array<TaskItemBean> = DataModel.getData();
|
||||
private wifiModel: WifiModel = new WifiModel()
|
||||
private testItem: TestData = router.getParams().testId;
|
||||
@State totalTasksNumber: number = 0;
|
||||
@State completedTasksNumber: number = 0;
|
||||
@State latestUpdateDate: string = CommonConstants.DEFAULT_PROGRESS_VALUE;
|
||||
@Provide @Watch('onProgressChanged') overAllProgressChanged: boolean = false;
|
||||
dialogController: CustomDialogController = new CustomDialogController({
|
||||
builder: AddTargetDialog({
|
||||
onClickOk: saveTask.bind(this)
|
||||
}),
|
||||
alignment: DialogAlignment.Bottom,
|
||||
offset: {
|
||||
dx: CommonConstants.DIALOG_OFFSET_X,
|
||||
dy: $r('app.float.dialog_offset_y')
|
||||
},
|
||||
customStyle: true,
|
||||
autoCancel: false
|
||||
});
|
||||
|
||||
/**
|
||||
* Listening targetData.
|
||||
*/
|
||||
onProgressChanged() {
|
||||
this.totalTasksNumber = this.targetData.length;
|
||||
this.completedTasksNumber = this.targetData.filter((item) => {
|
||||
return item.progressValue === CommonConstants.SLIDER_MAX_VALUE;
|
||||
}).length;
|
||||
this.latestUpdateDate = getCurrentTime();
|
||||
}
|
||||
|
||||
aboutToAppear() {
|
||||
|
||||
}
|
||||
|
||||
build() {
|
||||
Column() {
|
||||
Stack( { alignContent : Alignment.TopStart } ) {
|
||||
TestImageDisplay( { testItem : this.testItem } )
|
||||
PageTitle( { testItem : this.testItem } )
|
||||
// P2pTitleBar( { testItem : this.testItem } )
|
||||
}
|
||||
|
||||
Column() {
|
||||
TargetInformation({
|
||||
latestUpdateDate: this.latestUpdateDate,
|
||||
totalTasksNumber: this.totalTasksNumber,
|
||||
completedTasksNumber: this.completedTasksNumber
|
||||
})
|
||||
TargetList({
|
||||
targetData: $targetData,
|
||||
onAddClick: () => this.dialogController.open()
|
||||
})
|
||||
.height(CommonConstants.FULL_HEIGHT)
|
||||
}
|
||||
.width(CommonConstants.FULL_WIDTH)
|
||||
.height(CommonConstants.LIST_BOARD_HEIGHT)
|
||||
.backgroundColor($r('app.color.index_background'))
|
||||
|
||||
|
||||
Column() {
|
||||
Row() {
|
||||
Button() {
|
||||
Text( "添加候选网络" )
|
||||
.width( ConfigData.WH_100_100 )
|
||||
.height( ConfigData.WH_80_100 )
|
||||
}
|
||||
.type( ButtonType.Normal )
|
||||
.width( ConfigData.WH_20_100 )
|
||||
.height( ConfigData.WH_10_100 )
|
||||
.backgroundColor( $r( "app.color.blue" ) )
|
||||
.padding( { left : "1vp" , top : "5vp" } )
|
||||
.onClick( () => {
|
||||
wifiManager.addCandidateConfig()
|
||||
} )
|
||||
.margin( { left : "5vp" , right : "5vp" } )
|
||||
|
||||
Button() {
|
||||
Text( "移除候选网络" )
|
||||
.width( ConfigData.WH_100_100 )
|
||||
.height( ConfigData.WH_80_100 )
|
||||
}
|
||||
.type( ButtonType.Normal )
|
||||
.width( ConfigData.WH_20_100 )
|
||||
.height( ConfigData.WH_10_100 )
|
||||
.backgroundColor( $r( "app.color.blue" ) )
|
||||
.padding( { left : "1vp" , top : "5vp" } )
|
||||
.onClick( () => {
|
||||
|
||||
} )
|
||||
.margin( { left : "5vp" , right : "5vp" } )
|
||||
|
||||
Button() {
|
||||
Text( "获取候选网络配置" )
|
||||
.width( ConfigData.WH_100_100 )
|
||||
.height( ConfigData.WH_80_100 )
|
||||
}
|
||||
.type( ButtonType.Normal )
|
||||
.width( ConfigData.WH_20_100 )
|
||||
.height( ConfigData.WH_10_100 )
|
||||
.backgroundColor( $r( "app.color.blue" ) )
|
||||
.padding( { left : "1vp" , top : "5vp" } )
|
||||
.onClick( () => {
|
||||
|
||||
} )
|
||||
.margin( { left : "5vp" , right : "5vp" } )
|
||||
|
||||
Button() {
|
||||
Text( "连接候选网络" )
|
||||
.width( ConfigData.WH_100_100 )
|
||||
.height( ConfigData.WH_80_100 )
|
||||
}
|
||||
.type( ButtonType.Normal )
|
||||
.width( ConfigData.WH_20_100 )
|
||||
.height( ConfigData.WH_10_100 )
|
||||
.backgroundColor( $r( "app.color.blue" ) )
|
||||
.padding( { left : "1vp" , top : "5vp" } )
|
||||
.onClick( () => {
|
||||
|
||||
} )
|
||||
.margin( { left : "5vp" , right : "5vp" } )
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
.size( { width : '100%' , height : '100%' } )
|
||||
.backgroundColor( '#F5F5F5' )
|
||||
}
|
||||
|
||||
aboutToDisappear() {
|
||||
|
||||
}
|
||||
}
|
@ -118,7 +118,7 @@ struct WifiScan {
|
||||
build() {
|
||||
Column() {
|
||||
Stack( { alignContent : Alignment.TopStart } ) {
|
||||
TitleBar( { testItem : this.testItem } )
|
||||
TitleBar( "wlan" )
|
||||
}
|
||||
|
||||
Row() {
|
||||
|
@ -0,0 +1,662 @@
|
||||
/**
|
||||
* Copyright (c) 2022 Shenzhen Kaihong Digital Industry Development Co., Ltd.
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
// @ts-nocheck
|
||||
|
||||
import { PageTitle } from '../../Component/pageTitle';
|
||||
import { TestImageDisplay } from '../../Component/testImageDisplay';
|
||||
import { ContentTable } from '../../Component/contentTable';
|
||||
import Router from '@system.router';
|
||||
import ConfigData from '../../Utils/ConfigData';
|
||||
import { initWifiApiData } from '../../MainAbility/model/testDataModels'
|
||||
import { TestData } from '../../MainAbility/model/testData'
|
||||
import wifi from '@ohos.wifi';
|
||||
import prompt from '@system.prompt';
|
||||
|
||||
/**
|
||||
* WiFiConnectStabilityTest Page Of wifi test
|
||||
*/
|
||||
const TAG = '[WiFiConnectStabilityTest]'
|
||||
|
||||
@Entry
|
||||
@Component
|
||||
struct WiFiConnectStabilityTest {
|
||||
private testItem: TestData = Router.getParams().testId;
|
||||
@State connect_StartTime: Number = 0
|
||||
@State connect_EndTime: Number = 0
|
||||
@State connect_SpendTime: Number = 0
|
||||
@State disconnect_StartTime: Number = 0
|
||||
@State disconnect_EndTime: Number = 0
|
||||
@State disconnect_SpendTime: Number = 0
|
||||
@State connectNumber: Number = 0 // 打开WiFi的次数
|
||||
@State disconnectNumber: Number = 0 // 关闭WiFi的次数
|
||||
@State connectSuccessNumber: Number = 0 // 打开WiFi的成功次数
|
||||
@State connectFailNumber: Number = 0 // 打开WiFi的失败次数
|
||||
@State disconnectSuccessNumber: Number = 0 // 关闭WiFi的成功次数
|
||||
@State disconnectFailNumber: Number = 0 // 关闭WiFi的失败次数
|
||||
|
||||
@State message: string = "测试结果"
|
||||
@State testNumbers: Number = 30 //测试次数
|
||||
@State successTimes: Number = 0
|
||||
@State failTimes: Number = 0
|
||||
@State connectionMessage: String = ""
|
||||
@State connectionMessageLog: String = ""
|
||||
@State connectionLoopState: Boolean = true
|
||||
@State showList: boolean = false;
|
||||
@StorageLink( 'wifiConfig' ) wifiConfig: Object = {
|
||||
ssid : String = "TP-LINK_6365" ,
|
||||
bssid : String = "6C:B1:58:75:63:65" ,
|
||||
preSharedKey : String = "12345678" ,
|
||||
isHiddenSsid : Boolean = false ,
|
||||
securityType : Number = 3 ,
|
||||
creatorUid : Number = 1 ,
|
||||
disableReason : Number = 0 ,
|
||||
netId : Number = 1 ,
|
||||
randomMacType : Number = 0 ,
|
||||
randomMacAddr : String = "08:fb:ea:1b:38:aa" ,
|
||||
ipType : Number = 1 ,
|
||||
staticIp : {
|
||||
ipAddress : Number = 3232235880 ,
|
||||
gateway : Number = 3232235777 ,
|
||||
dnsServers : Number = 3716386629 ,
|
||||
domains : [] = [ "0", "1", "2" ] ,
|
||||
}
|
||||
}
|
||||
|
||||
build() {
|
||||
Column() {
|
||||
Stack( { alignContent : Alignment.TopStart } ) {
|
||||
TestImageDisplay( { testItem : this.testItem } )
|
||||
PageTitle( { testItem : this.testItem } )
|
||||
}
|
||||
|
||||
Stack().height( "1vp" ).backgroundColor( $r( "app.color.black" ) );
|
||||
|
||||
Column() {
|
||||
Row() {
|
||||
Text( "测试次数:" ).fontSize( $r( 'app.float.font_18' ) ).width( "25%" ).padding( { left : "10vp" } )
|
||||
TextInput( { placeholder : "请输入循环次数,默认为30" } )
|
||||
.placeholderColor( Color.Grey )
|
||||
.placeholderFont( { size : $r( 'app.float.font_16' ) } )
|
||||
.caretColor( Color.Blue )
|
||||
.width( "50%" )
|
||||
.fontSize( $r( 'app.float.font_16' ) )
|
||||
.fontColor( $r( 'app.color.title_black_color' ) )
|
||||
.onChange( ( value: string ) => {
|
||||
this.testNumbers = Number( value );
|
||||
} )
|
||||
Image( $r( 'app.media.Switch' ) )
|
||||
.height( 50 )
|
||||
.padding( { top : 5 , bottom : 5 , left : 5 } )
|
||||
.width( ConfigData.WH_15_100 )
|
||||
.onClick( () => {
|
||||
this.showList = !this.showList;
|
||||
} )
|
||||
}
|
||||
}.width( "100%" ).height( "6%" ).backgroundColor( $r( "app.color.lead" ) )
|
||||
|
||||
if ( this.showList ) {
|
||||
setWifiDevice()
|
||||
} else {
|
||||
Column() {
|
||||
|
||||
Column() {
|
||||
Text( "测试结果:" )
|
||||
.fontSize( "22vp" )
|
||||
.width( '95%' )
|
||||
.align( Alignment.TopStart )
|
||||
.padding( { top : "10vp" } )
|
||||
Scroll() {
|
||||
Column() {
|
||||
Text( "测试次数:" + this.testNumbers )
|
||||
.fontSize( "17vp" )
|
||||
.margin( { top : "5vp" , left : "10vp" , right : "5vp" } )
|
||||
.textAlign( TextAlign.Start )
|
||||
.width( ConfigData.WH_90_100 )
|
||||
Text( "连接的成功次数:" + this.connectSuccessNumber )
|
||||
.fontSize( "17vp" )
|
||||
.margin( { top : "5vp" , left : "10vp" , right : "5vp" } )
|
||||
.textAlign( TextAlign.Start )
|
||||
.width( ConfigData.WH_90_100 )
|
||||
Text( "连接的失败次数:" + this.connectFailNumber )
|
||||
.fontSize( "17vp" )
|
||||
.margin( { top : "5vp" , left : "10vp" , right : "5vp" } )
|
||||
.textAlign( TextAlign.Start )
|
||||
.width( ConfigData.WH_90_100 )
|
||||
Text( "断连的成功次数:" + this.disconnectSuccessNumber )
|
||||
.fontSize( "17vp" )
|
||||
.margin( { top : "5vp" , left : "10vp" , right : "5vp" } )
|
||||
.textAlign( TextAlign.Start )
|
||||
.width( ConfigData.WH_90_100 )
|
||||
Text( "断连的失败次数:" + this.disconnectFailNumber )
|
||||
.fontSize( "17vp" )
|
||||
.margin( { top : "5vp" , left : "10vp" , right : "5vp" } )
|
||||
.textAlign( TextAlign.Start )
|
||||
.width( ConfigData.WH_90_100 )
|
||||
}
|
||||
.width( ConfigData.WH_100_100 )
|
||||
.backgroundColor( $r( "sys.color.ohos_id_color_foreground_contrary" ) )
|
||||
}
|
||||
.scrollBarWidth( 10 )
|
||||
.scrollBar( BarState.Auto )
|
||||
|
||||
}.width( "100%" ).height( "35%" )
|
||||
|
||||
Column() {
|
||||
Text( "log显示:" )
|
||||
.fontSize( 22 )
|
||||
.width( '95%' )
|
||||
.align( Alignment.TopStart )
|
||||
.padding( { top : "10vp" } )
|
||||
List() {
|
||||
ListItem() {
|
||||
Text( this.connectionMessageLog )
|
||||
.fontSize( "20vp" )
|
||||
.margin( { top : "5vp" , left : "30vp" , right : "10vp" } )
|
||||
.textAlign( TextAlign.Start )
|
||||
.width( ConfigData.WH_90_100 )
|
||||
}
|
||||
}
|
||||
.height( ConfigData.WH_80_100 )
|
||||
.width( ConfigData.WH_90_100 )
|
||||
.backgroundColor( $r( "sys.color.ohos_id_color_foreground_contrary" ) )
|
||||
}.width( "100%" ).height( "60%" )
|
||||
|
||||
}.width( "100%" ).height( "60%" ).backgroundColor( $r( "app.color.lead" ) )
|
||||
|
||||
Stack().height( "1vp" ).backgroundColor( $r( "app.color.black" ) );
|
||||
|
||||
Column() {
|
||||
Row() {
|
||||
Button( "开始连接测试" )
|
||||
.operateButtonStyle( $r( 'app.color.main_blue' ) )
|
||||
.padding( { right : "10vp" } )
|
||||
.onClick( async( event: ClickEvent ) => {
|
||||
console.log( TAG , "start WiFiConnect test-------------" )
|
||||
let self = this
|
||||
self.connectionLoopState = true
|
||||
|
||||
async function forLoop() {
|
||||
self.connectionMessageLog = ""
|
||||
self.onConnectionState() // 监听函数
|
||||
let funcMessage = "" // 函数信息
|
||||
for ( self.connectNumber ; self.connectNumber < self.testNumbers ; self.connectNumber ++ ) {
|
||||
if ( !self.connectionLoopState ) {
|
||||
console.log( TAG , "测试结束------------" )
|
||||
break;
|
||||
} else {
|
||||
let wifiState = wifi.isWifiActive()
|
||||
if ( !wifiState ) {
|
||||
wifi.enableWifi()
|
||||
console.log( TAG , "wifi当前未使能,已经使能,正常开始测试------" )
|
||||
} else {
|
||||
console.log( TAG , "wifi当前使能,正常开始测试------" )
|
||||
}
|
||||
await sleep( 3 )
|
||||
|
||||
funcMessage = wifi.connectToDevice( self.wifiConfig )
|
||||
// 打时间戳
|
||||
self.connect_StartTime = new Date().getTime()
|
||||
console.log( TAG , "第" + ( self.connectNumber + 1 ) + "次WIFI连接-----" )
|
||||
console.log( TAG , "第" + ( self.connectNumber + 1 ) + "次WIFI连接开始时间: " + self.connect_StartTime + "ms" )
|
||||
self.connectionMessageLog += "第" + ( self.connectNumber + 1 ) + "次WIFI连接结果:" + funcMessage + "\n"
|
||||
console.log( TAG , "第" + ( self.connectNumber + 1 ) + "次WIFI连接结果:" + funcMessage )
|
||||
await sleep( 10 )
|
||||
self.connectionMessage = AppStorage.Get( "connectionMessage" )
|
||||
// prompt.showToast( { message : funcMessage } )
|
||||
if ( self.connectionMessage == "connected" ) {
|
||||
self.connect_SpendTime = self.connect_EndTime - self.connect_StartTime
|
||||
self.connectionMessageLog += "第" + ( self.connectNumber + 1 ) + "次WIFI连接耗时: " + self.connect_SpendTime + "ms" + "\n"
|
||||
console.log( TAG , "第" + ( self.connectNumber + 1 ) + "次WIFI连接耗时: " + self.connect_SpendTime + "ms" )
|
||||
self.connectSuccessNumber = self.connectSuccessNumber + 1
|
||||
self.connectionMessageLog += "连接成功的次数:" + self.connectSuccessNumber + "\n"
|
||||
console.log( TAG , "连接成功的次数:" + self.connectSuccessNumber )
|
||||
funcMessage = wifi.disconnect()
|
||||
self.disconnectNumber = self.disconnectNumber + 1
|
||||
self.disconnect_StartTime = new Date().getTime()
|
||||
console.log( TAG , "第" + self.disconnectNumber + "次WIFI断连-----" )
|
||||
console.log( TAG , "第" + self.disconnectNumber + "次WIFI断连开始时间: " + self.disconnect_StartTime + "ms" )
|
||||
self.connectionMessageLog += "第" + self.disconnectNumber + "次WIFI断连结果:" + funcMessage + "\n"
|
||||
console.log( TAG , "第" + self.disconnectNumber + "次WIFI断连结果:" + funcMessage )
|
||||
console.log( TAG , "disconnectNumber: " + self.disconnectNumber )
|
||||
await sleep( 10 )
|
||||
// prompt.showToast( { message : funcMessage } )
|
||||
self.connectionMessage = AppStorage.Get( "connectionMessage" )
|
||||
if ( self.connectionMessage == "disconnected" ) {
|
||||
self.disconnect_SpendTime = self.disconnect_EndTime - self.disconnect_StartTime
|
||||
self.connectionMessageLog += "第" + self.disconnectNumber + "次WIFI断连耗时: " + self.disconnect_SpendTime + "ms" + "\n"
|
||||
console.log( TAG , "第" + self.disconnectNumber + "次WIFI断连耗时: " + self.disconnect_SpendTime + "ms" )
|
||||
self.disconnectSuccessNumber = self.disconnectSuccessNumber + 1
|
||||
self.connectionMessageLog += "断连成功的次数:" + self.disconnectSuccessNumber + "\n"
|
||||
console.log( TAG , "断连成功的次数:" + self.disconnectSuccessNumber )
|
||||
await sleep( 7 )
|
||||
} else {
|
||||
self.disconnectFailNumber = self.disconnectFailNumber + 1
|
||||
}
|
||||
} else if ( self.connectionMessage == "disconnected" ) {
|
||||
self.connectFailNumber = self.connectFailNumber + 1
|
||||
break;
|
||||
} else {
|
||||
console.log( "第" + m + "次连接后状态不清楚" );
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
forLoop()
|
||||
|
||||
} )
|
||||
|
||||
Button( "关闭连接测试" )
|
||||
.operateButtonStyle( $r( 'app.color.main_blue' ) )
|
||||
.padding( { right : "10vp" } )
|
||||
.onClick( async( event: ClickEvent ) => {
|
||||
let self = this
|
||||
self.connectionLoopState = false
|
||||
console.log( TAG , "准备测试停止 -------------" )
|
||||
self.connectionMessageLog = ""
|
||||
|
||||
} )
|
||||
|
||||
}
|
||||
|
||||
}.width( "100%" ).height( "25%" ).backgroundColor( $r( "app.color.lead" ) )
|
||||
|
||||
}
|
||||
|
||||
}.height( "100%" ).width( "100%" ).backgroundColor( $r( "app.color.lead" ) )
|
||||
}
|
||||
|
||||
onConnectionState() {
|
||||
console.log( TAG , "on.wifiConnectionChange start--------" )
|
||||
wifi.on( "wifiConnectionChange" , ( number ) => {
|
||||
console.log( TAG , " on.wifiConnectionChange success--------" )
|
||||
let wifiConnectionMessage = ""
|
||||
switch ( number ) {
|
||||
case 0:
|
||||
wifiConnectionMessage = "disconnected";
|
||||
break;
|
||||
case 1:
|
||||
wifiConnectionMessage = "connected";
|
||||
break;
|
||||
default:
|
||||
wifiConnectionMessage = '未知状态';
|
||||
break;
|
||||
}
|
||||
if ( number == 1 ) {
|
||||
// 打时间戳
|
||||
this.connect_EndTime = new Date().getTime()
|
||||
console.log( TAG , "WIFI连接结束时间: " + this.connect_EndTime + "ms" )
|
||||
} else if ( number == 0 ) {
|
||||
this.disconnect_EndTime = new Date().getTime()
|
||||
console.log( TAG , "WIFI断连结束时间: " + this.disconnect_EndTime + "ms" )
|
||||
}
|
||||
console.log( TAG , " on.wifiConnectionChange callback success --------" )
|
||||
prompt.showToast( { message : "wifi连接状态: " + wifiConnectionMessage } )
|
||||
this.connectionMessage = wifiConnectionMessage
|
||||
console.log( TAG , "wifiConnectionChange:" + this.connectionMessage )
|
||||
AppStorage.SetOrCreate( "connectionMessage" , this.connectionMessage )
|
||||
console.log( TAG , " on.wifiConnectionChange end--------" )
|
||||
return this.connectionMessage
|
||||
} )
|
||||
return this.connectionMessage
|
||||
}
|
||||
}
|
||||
|
||||
@Component
|
||||
struct setWifiDevice {
|
||||
@StorageLink( 'w_networkIdM' ) w_networkIdM: number = 0; // id,netId,networkId是一个值嘛?
|
||||
@StorageLink( 'w_featureIdM' ) w_featureIdM: number = 1;
|
||||
@StorageLink( 'wifiConfig' ) wifiConfig: Object = {
|
||||
ssid : String = "TP-LINK_6365" ,
|
||||
bssid : String = "6C:B1:58:75:63:65" ,
|
||||
preSharedKey : String = "kaihong123" ,
|
||||
isHiddenSsid : Boolean = false ,
|
||||
securityType : Number = 3 ,
|
||||
creatorUid : Number = 1 ,
|
||||
disableReason : Number = 0 ,
|
||||
netId : Number = 1 ,
|
||||
randomMacType : Number = 0 ,
|
||||
randomMacAddr : String = "08:fb:ea:1b:38:aa" ,
|
||||
ipType : Number = 1 ,
|
||||
staticIp : {
|
||||
ipAddress : Number = 3232235880 ,
|
||||
gateway : Number = 3232235777 ,
|
||||
dnsServers : Number = 3716386629 ,
|
||||
domains : [] = [ "0", "1", "2" ] ,
|
||||
}
|
||||
}
|
||||
|
||||
aboutToAppear() {
|
||||
|
||||
}
|
||||
|
||||
build() {
|
||||
Column() {
|
||||
Row() {
|
||||
Text( "ssidM:" ).fontSize( "17vp" ).width( 70 )
|
||||
TextInput( { text : this.wifiConfig.ssid , placeholder : "TP-LINK_6365" } )
|
||||
.fontSize( "15vp" )
|
||||
.onChange( ( strInput ) => {
|
||||
//判断合法性
|
||||
if ( strInput.length >= 1 ) {
|
||||
this.wifiConfig.ssid = strInput;
|
||||
}
|
||||
} )
|
||||
.width( ConfigData.WH_80_100 )
|
||||
.borderRadius( 1 )
|
||||
}
|
||||
.backgroundColor( $r( "app.color.moon" ) )
|
||||
.padding( 5 )
|
||||
.justifyContent( FlexAlign.Start )
|
||||
.alignItems( VerticalAlign.Center )
|
||||
|
||||
Scroll() {
|
||||
Column() {
|
||||
Stack().height( "0.25vp" ).backgroundColor( "#000000" );
|
||||
Column() {
|
||||
Row() {
|
||||
Text( "bssidM:" ).fontSize( "15vp" ).width( 60 );
|
||||
TextInput( { text : this.wifiConfig.bssid , placeholder : "6c:b1:58:75:63:67" } )
|
||||
.fontSize( "15vp" )
|
||||
.onChange( ( strInput ) => {
|
||||
//判断合法性
|
||||
if ( strInput.length >= 1 ) {
|
||||
this.wifiConfig.bssid = strInput;
|
||||
}
|
||||
} )
|
||||
.width( ConfigData.WH_80_100 )
|
||||
.borderRadius( 1 )
|
||||
}
|
||||
.padding( 3 )
|
||||
.justifyContent( FlexAlign.Start )
|
||||
.alignItems( VerticalAlign.Center )
|
||||
.backgroundColor( $r( "app.color.spring" ) )
|
||||
|
||||
Row() {
|
||||
Text( "preSharedKeyM:" ).fontSize( "15vp" ).width( 110 );
|
||||
TextInput( { text : this.wifiConfig.preSharedKey , placeholder : "kaihong123" } )
|
||||
.fontSize( "15vp" )
|
||||
.onChange( ( strInput ) => {
|
||||
//判断合法性
|
||||
if ( strInput.length >= 1 ) {
|
||||
this.wifiConfig.preSharedKey = strInput;
|
||||
}
|
||||
} )
|
||||
.width( ConfigData.WH_80_100 )
|
||||
.borderRadius( 1 )
|
||||
}
|
||||
.backgroundColor( $r( "app.color.spring" ) )
|
||||
.padding( 5 )
|
||||
.justifyContent( FlexAlign.Start )
|
||||
.alignItems( VerticalAlign.Center )
|
||||
|
||||
Row() {
|
||||
Text( "isHiddenSsidM:" ).fontSize( 15 ).width( 110 );
|
||||
TextInput( { text : this.wifiConfig.w_isHiddenSsidM , placeholder : "false" } )
|
||||
.fontSize( "15vp" )
|
||||
.onChange( ( strInput ) => {
|
||||
//判断合法性
|
||||
if ( strInput.length >= 1 ) {
|
||||
this.wifiConfig.isHiddenSsid = strInput;
|
||||
}
|
||||
} )
|
||||
.width( ConfigData.WH_80_100 )
|
||||
.borderRadius( 1 )
|
||||
}
|
||||
.backgroundColor( $r( "app.color.spring" ) )
|
||||
.padding( 5 )
|
||||
.justifyContent( FlexAlign.Start )
|
||||
.alignItems( VerticalAlign.Center )
|
||||
|
||||
Row() {
|
||||
Text( "securityTypeM:" ).fontSize( 15 ).width( 100 );
|
||||
Column() {
|
||||
Select( [
|
||||
{ value : 'WIFI_SEC_TYPE_INVALID' },
|
||||
{ value : 'WIFI_SEC_TYPE_OPEN' },
|
||||
{ value : 'WIFI_SEC_TYPE_WEP' },
|
||||
{ value : 'WIFI_SEC_TYPE_PSK' },
|
||||
{ value : 'WIFI_SEC_TYPE_SAE' }
|
||||
] )
|
||||
.selected( 3 )
|
||||
.value( 'WIFI_SEC_TYPE_PSK' )
|
||||
.font( { size : 17 } )
|
||||
.selectedOptionFont( { size : 17 } )
|
||||
.optionFont( { size : 15 } )
|
||||
.width( ConfigData.WH_80_100 )
|
||||
.onSelect( ( index: number ) => {
|
||||
console.log( TAG , "Select:" + index )
|
||||
this.wifiConfig.securityType = index;
|
||||
} )
|
||||
}
|
||||
.width( ConfigData.WH_80_100 )
|
||||
.borderRadius( 1 )
|
||||
}
|
||||
.backgroundColor( $r( "app.color.spring" ) )
|
||||
.padding( 5 )
|
||||
.justifyContent( FlexAlign.Start )
|
||||
.alignItems( VerticalAlign.Center )
|
||||
|
||||
Row() {
|
||||
Text( "creatorUidM:" ).fontSize( 15 ).width( 100 );
|
||||
TextInput( { text : this.wifiConfig.creatorUid , placeholder : "1" } )
|
||||
.fontSize( "15vp" )
|
||||
.onChange( ( strInput ) => {
|
||||
//判断合法性
|
||||
if ( strInput.length >= 1 ) {
|
||||
this.wifiConfig.creatorUid = Number( strInput );
|
||||
}
|
||||
} )
|
||||
.width( ConfigData.WH_80_100 )
|
||||
.borderRadius( 1 )
|
||||
}
|
||||
.backgroundColor( $r( "app.color.spring" ) )
|
||||
.padding( 5 )
|
||||
.justifyContent( FlexAlign.Start )
|
||||
.alignItems( VerticalAlign.Center )
|
||||
|
||||
Row() {
|
||||
Text( "disableReasonM:" ).fontSize( 15 ).width( 120 );
|
||||
TextInput( { text : this.wifiConfig.disableReason , placeholder : "0" } )
|
||||
.fontSize( "15vp" )
|
||||
.onChange( ( strInput ) => {
|
||||
//判断合法性
|
||||
if ( strInput.length >= 1 ) {
|
||||
this.wifiConfig.disableReason = Number( strInput );
|
||||
}
|
||||
} )
|
||||
.width( ConfigData.WH_80_100 )
|
||||
.borderRadius( 1 )
|
||||
}
|
||||
.backgroundColor( $r( "app.color.spring" ) )
|
||||
.padding( 5 )
|
||||
.justifyContent( FlexAlign.Start )
|
||||
.alignItems( VerticalAlign.Center )
|
||||
|
||||
Row() {
|
||||
Text( "netIdM:" ).fontSize( 15 ).width( 60 );
|
||||
TextInput( { text : this.wifiConfig.netId , placeholder : "1" } )
|
||||
.fontSize( "15vp" )
|
||||
.onChange( ( strInput ) => {
|
||||
//判断合法性
|
||||
if ( strInput.length >= 1 ) {
|
||||
this.wifiConfig.netId = Number( strInput );
|
||||
}
|
||||
} )
|
||||
.width( ConfigData.WH_80_100 )
|
||||
.borderRadius( 1 )
|
||||
}
|
||||
.backgroundColor( $r( "app.color.spring" ) )
|
||||
.padding( 5 )
|
||||
.justifyContent( FlexAlign.Start )
|
||||
.alignItems( VerticalAlign.Center )
|
||||
|
||||
Row() {
|
||||
Text( "randomMacTypeM:" ).fontSize( 15 ).width( 140 );
|
||||
TextInput( { text : this.wifiConfig.randomMacType , placeholder : "0" } )
|
||||
.fontSize( "15vp" )
|
||||
.onChange( ( strInput ) => {
|
||||
//判断合法性
|
||||
if ( strInput.length >= 1 ) {
|
||||
this.wifiConfig.randomMacType = Number( strInput );
|
||||
}
|
||||
} )
|
||||
.width( ConfigData.WH_80_100 )
|
||||
.borderRadius( 1 )
|
||||
}
|
||||
.backgroundColor( $r( "app.color.spring" ) )
|
||||
.padding( 5 )
|
||||
.justifyContent( FlexAlign.Start )
|
||||
.alignItems( VerticalAlign.Center )
|
||||
|
||||
Row() {
|
||||
Text( "randomMacAddrM:" ).fontSize( 15 ).width( 140 );
|
||||
TextInput( { text : this.wifiConfig.randomMacAddr , placeholder : "08:fb:ea:1b:38:aa" } )
|
||||
.fontSize( "15vp" )
|
||||
.onChange( ( strInput ) => {
|
||||
//判断合法性
|
||||
if ( strInput.length >= 1 ) {
|
||||
this.wifiConfig.randomMacAddr = strInput;
|
||||
}
|
||||
} )
|
||||
.width( ConfigData.WH_80_100 )
|
||||
.borderRadius( 1 )
|
||||
}
|
||||
.backgroundColor( $r( "app.color.spring" ) )
|
||||
.padding( 5 )
|
||||
.justifyContent( FlexAlign.Start )
|
||||
.alignItems( VerticalAlign.Center )
|
||||
|
||||
Row() {
|
||||
Text( "ipTypeM:" ).fontSize( 15 ).width( 60 );
|
||||
TextInput( { text : this.wifiConfig.IpType , placeholder : "1" } ) //DHCP
|
||||
.fontSize( "15vp" )
|
||||
.onChange( ( strInput ) => {
|
||||
//判断合法性
|
||||
if ( strInput.length >= 1 ) {
|
||||
this.wifiConfig.IpType = Number( strInput );
|
||||
}
|
||||
} )
|
||||
.width( ConfigData.WH_80_100 )
|
||||
.borderRadius( 1 )
|
||||
}
|
||||
.backgroundColor( $r( "app.color.spring" ) )
|
||||
.padding( 5 )
|
||||
.justifyContent( FlexAlign.Start )
|
||||
.alignItems( VerticalAlign.Center )
|
||||
|
||||
Row() {
|
||||
Text( "staticIp_ipAddressM:" ).fontSize( 15 ).width( 135 );
|
||||
TextInput( { text : this.wifiConfig.staticIp.ipAddress , placeholder : "3232235880" } )
|
||||
.fontSize( "15vp" )
|
||||
.onChange( ( strInput ) => {
|
||||
//判断合法性
|
||||
if ( strInput.length >= 1 ) {
|
||||
this.wifiConfig.staticIp.ipAddress = Number( strInput );
|
||||
}
|
||||
} )
|
||||
.width( ConfigData.WH_80_100 )
|
||||
.borderRadius( 1 )
|
||||
}
|
||||
.backgroundColor( $r( "app.color.moon" ) )
|
||||
.padding( 5 )
|
||||
.justifyContent( FlexAlign.Start )
|
||||
.alignItems( VerticalAlign.Center )
|
||||
|
||||
Row() {
|
||||
Text( "staticIp_gatewayM:" ).fontSize( 15 ).width( 130 );
|
||||
TextInput( { text : this.wifiConfig.staticIp.gateway , placeholder : "3232235777" } )
|
||||
.fontSize( "15vp" )
|
||||
.onChange( ( strInput ) => {
|
||||
//判断合法性
|
||||
if ( strInput.length >= 1 ) {
|
||||
this.wifiConfig.staticIp.gateway = Number( strInput );
|
||||
}
|
||||
} )
|
||||
.width( ConfigData.WH_80_100 )
|
||||
.borderRadius( 1 )
|
||||
}
|
||||
.backgroundColor( $r( "app.color.moon" ) )
|
||||
.padding( 5 )
|
||||
.justifyContent( FlexAlign.Start )
|
||||
.alignItems( VerticalAlign.Center )
|
||||
|
||||
Row() {
|
||||
Text( "staticIp_dnsServersM:" ).fontSize( 15 ).width( 140 );
|
||||
TextInput( { text : this.wifiConfig.staticIp.dnsServers , placeholder : "3716386629" } )
|
||||
.fontSize( "15vp" )
|
||||
.onChange( ( strInput ) => {
|
||||
//判断合法性
|
||||
if ( strInput.length >= 1 ) {
|
||||
this.wifiConfig.staticIp.dnsServers = Number( strInput );
|
||||
}
|
||||
} )
|
||||
.width( ConfigData.WH_80_100 )
|
||||
.borderRadius( 1 )
|
||||
}
|
||||
.backgroundColor( $r( "app.color.moon" ) )
|
||||
.padding( 5 )
|
||||
.justifyContent( FlexAlign.Start )
|
||||
.alignItems( VerticalAlign.Center )
|
||||
|
||||
Row() {
|
||||
Text( "staticIp_domainsM:" ).fontSize( 15 ).width( 125 );
|
||||
TextInput( { text : this.wifiConfig.staticIp.domains , placeholder : "0" } )
|
||||
.fontSize( "15vp" )
|
||||
.onChange( ( strInput ) => {
|
||||
if ( strInput.length >= 1 ) {
|
||||
this.wifiConfig.staticIp.domains = strInput;
|
||||
}
|
||||
} )
|
||||
.width( ConfigData.WH_80_100 )
|
||||
.borderRadius( 1 )
|
||||
}
|
||||
.backgroundColor( $r( "app.color.moon" ) )
|
||||
.padding( 5 )
|
||||
.justifyContent( FlexAlign.Start )
|
||||
.alignItems( VerticalAlign.Center )
|
||||
}
|
||||
|
||||
Stack().height( "0.25vp" ).backgroundColor( "#000000" );
|
||||
}
|
||||
}
|
||||
.scrollBarWidth( 10 )
|
||||
.scrollBar( BarState.On )
|
||||
}
|
||||
.height( ConfigData.WH_58_100 )
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Custom button style.
|
||||
*/
|
||||
@Extend( Button ) function operateButtonStyle( color: Resource ) {
|
||||
.width( $r( 'app.float.button_width' ) )
|
||||
.height( $r( 'app.float.button_height' ) )
|
||||
.fontSize( $r( 'app.float.font_16' ) )
|
||||
.fontWeight( 500 )
|
||||
.fontColor( color )
|
||||
.backgroundColor( $r( 'app.color.button_background' ) )
|
||||
}
|
||||
|
||||
function sleep( time ) {
|
||||
return new Promise(( resolve , reject ) => {
|
||||
setTimeout( () => {
|
||||
resolve()
|
||||
} , time * 1000 )
|
||||
})
|
||||
}
|
@ -0,0 +1,229 @@
|
||||
/**
|
||||
* Copyright (c) 2022 Shenzhen Kaihong Digital Industry Development Co., Ltd.
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
// @ts-nocheck
|
||||
|
||||
import { PageTitle } from '../../Component/pageTitle';
|
||||
import { TestImageDisplay } from '../../Component/testImageDisplay';
|
||||
import { ContentTable } from '../../Component/contentTable';
|
||||
import Router from '@system.router';
|
||||
import ConfigData from '../../Utils/ConfigData';
|
||||
import { initWifiApiData } from '../../MainAbility/model/testDataModels'
|
||||
import { TestData } from '../../MainAbility/model/testData'
|
||||
import wifi from '@ohos.wifi';
|
||||
import prompt from '@system.prompt';
|
||||
|
||||
/**
|
||||
* WiFiScanStabilityTest Page Of wifi test
|
||||
*/
|
||||
const TAG = '[WiFiScanStabilityTest]'
|
||||
|
||||
@Entry
|
||||
@Component
|
||||
struct WiFiScanStabilityTest {
|
||||
private testItem: TestData = Router.getParams().testId;
|
||||
@State message: string = "测试结果"
|
||||
@State testNumbers: Number = 30 //测试次数
|
||||
@State successTimes: Number = 0
|
||||
@State failTimes: Number = 0
|
||||
@State scanStateMessage: String = ""
|
||||
@State stateMessageLog: String = ""
|
||||
@State switchLoopState: Boolean = true
|
||||
|
||||
build() {
|
||||
Column() {
|
||||
Stack( { alignContent : Alignment.TopStart } ) {
|
||||
TestImageDisplay( { testItem : this.testItem } )
|
||||
PageTitle( { testItem : this.testItem } )
|
||||
}
|
||||
|
||||
Stack().height( "1vp" ).backgroundColor( $r( "app.color.black" ) );
|
||||
|
||||
Column() {
|
||||
Row() {
|
||||
Text( "测试次数:" ).fontSize( $r( 'app.float.font_18' ) ).width( "25%" ).padding( { left : "10vp" } )
|
||||
TextInput( { placeholder : "请输入循环次数,默认30" } )
|
||||
.placeholderColor( Color.Grey )
|
||||
.placeholderFont( { size : $r( 'app.float.font_16' ) } )
|
||||
.caretColor( Color.Blue )
|
||||
.width( "70%" )
|
||||
.fontSize( $r( 'app.float.font_16' ) )
|
||||
.fontColor( $r( 'app.color.title_black_color' ) )
|
||||
.onChange( ( value: string ) => {
|
||||
this.testNumbers = Number( value );
|
||||
} )
|
||||
}
|
||||
|
||||
Column() {
|
||||
Text( "测试结果:" )
|
||||
.fontSize( "22vp" )
|
||||
.width( '95%' )
|
||||
.align( Alignment.TopStart )
|
||||
.padding( { top : "10vp" } )
|
||||
}.width( "100%" ).height( "30%" )
|
||||
|
||||
Column() {
|
||||
Text( "log显示:" )
|
||||
.fontSize( "22vp" )
|
||||
.width( '95%' )
|
||||
.align( Alignment.TopStart )
|
||||
.padding( { top : "10vp" } )
|
||||
List() {
|
||||
ListItem() {
|
||||
Text( this.stateMessageLog )
|
||||
.fontSize( "20vp" )
|
||||
.margin( { top : "5vp" , left : "30vp" , right : "10vp" } )
|
||||
.textAlign( TextAlign.Start )
|
||||
.width( ConfigData.WH_90_100 )
|
||||
}
|
||||
}
|
||||
.height( ConfigData.WH_80_100 )
|
||||
.width( ConfigData.WH_90_100 )
|
||||
.backgroundColor( $r( "sys.color.ohos_id_color_foreground_contrary" ) )
|
||||
}.width( "100%" ).height( "60%" )
|
||||
|
||||
}.width( "100%" ).height( "67%" ).backgroundColor( $r( "app.color.lead" ) )
|
||||
|
||||
Stack().height( "1vp" ).backgroundColor( $r( "app.color.black" ) );
|
||||
|
||||
Column() {
|
||||
Row() {
|
||||
Button( "开始扫描测试" )
|
||||
.operateButtonStyle( $r( 'app.color.main_blue' ) )
|
||||
.padding( { right : "10vp" } )
|
||||
.onClick( async( event: ClickEvent ) => {
|
||||
console.log( TAG , "start scan test-------------" )
|
||||
let self = this
|
||||
|
||||
async function forLoop() {
|
||||
self.stateMessageLog = ""
|
||||
|
||||
let openScanNumber = 0
|
||||
let closeScanNumber = 0
|
||||
self.onWifiScanState()
|
||||
let openSuccessNumber = 0
|
||||
let openFailNumber = 0
|
||||
let closeSuccessNumber = 0
|
||||
let closeFailNumber = 0
|
||||
let funcMessage = ""
|
||||
for ( openScanNumber ; openScanNumber < 30 ; openScanNumber ++ ) {
|
||||
funcMessage = wifi.enableWifi()
|
||||
self.stateMessageLog += "第" + ( openScanNumber + 1 ) + "次WIFI使能结果:" + funcMessage + "\n"
|
||||
console.log( TAG , "第" + ( openScanNumber + 1 ) + "次WIFI使能结果:" + funcMessage )
|
||||
await sleep( 3 )
|
||||
|
||||
funcMessage = wifi.scan()
|
||||
self.stateMessageLog += "第" + ( openScanNumber + 1 ) + "次WIFI扫描结果:" + funcMessage + "\n"
|
||||
console.log( TAG , "第" + ( openScanNumber + 1 ) + "次WIFI扫描结果:" + funcMessage )
|
||||
await sleep( 5 )
|
||||
self.scanStateMessage = AppStorage.Get( "scanStateMessage" )
|
||||
console.log( TAG , "scanStateMessage:" + self.scanStateMessage )
|
||||
// prompt.showToast( { message : funcMessage } )
|
||||
if ( self.scanStateMessage == "scan success" ) {
|
||||
openSuccessNumber = openSuccessNumber + 1
|
||||
self.stateMessageLog += "扫描成功的次数:" + openSuccessNumber + "\n"
|
||||
console.log( TAG , "扫描成功的次数:" + openSuccessNumber )
|
||||
funcMessage = wifi.disableWifi()
|
||||
self.stateMessageLog += "第" + ( closeScanNumber + 1 ) + "次WIFI去使能结果:" + funcMessage + "\n"
|
||||
console.log( TAG , "第" + ( closeScanNumber + 1 ) + "次WIFI去使能结果:" + funcMessage )
|
||||
closeScanNumber = closeScanNumber + 1
|
||||
await sleep( 5 )
|
||||
// prompt.showToast( { message : funcMessage } )
|
||||
self.scanStateMessage = AppStorage.Get( "scanStateMessage" )
|
||||
if ( self.scanStateMessage == "scan fail" ) {
|
||||
closeSuccessNumber = closeSuccessNumber + 1
|
||||
self.stateMessageLog += "去使能成功的次数:" + openSuccessNumber + "\n"
|
||||
console.log( TAG , "去使能成功的次数:" + openSuccessNumber )
|
||||
await sleep( 3 )
|
||||
} else {
|
||||
closeFailNumber = closeFailNumber + 1
|
||||
}
|
||||
} else if ( self.scanStateMessage == "scan fail" ) {
|
||||
openFailNumber = openFailNumber + 1
|
||||
break;
|
||||
} else {
|
||||
console.log( "第" + m + "次开wifi后状态不清楚" );
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
forLoop()
|
||||
|
||||
} )
|
||||
|
||||
Button( "关闭WiFi测试" )
|
||||
.operateButtonStyle( $r( 'app.color.main_blue' ) )
|
||||
.padding( { right : "10vp" } )
|
||||
.onClick( async( event: ClickEvent ) => {
|
||||
let self = this
|
||||
self.switchLoopState = false
|
||||
console.log( TAG , "准备测试停止 -------------" )
|
||||
self.stateMessageLog = ""
|
||||
} )
|
||||
}
|
||||
|
||||
}.width( "100%" ).height( "25%" ).backgroundColor( $r( "app.color.lead" ) )
|
||||
|
||||
}.height( "100%" ).width( "100%" ).backgroundColor( $r( "app.color.lead" ) )
|
||||
}
|
||||
|
||||
onWifiScanState() {
|
||||
console.log( TAG , "on.wifiScanStateChange start--------" )
|
||||
wifi.on( "wifiScanStateChange" , ( number ) => {
|
||||
console.log( TAG , " on.wifiScanStateChange success--------" )
|
||||
let wifiScanStateMessage = ""
|
||||
switch ( number ) {
|
||||
case 0:
|
||||
wifiScanStateMessage = "scan fail";
|
||||
break;
|
||||
case 1:
|
||||
wifiScanStateMessage = "scan success";
|
||||
break;
|
||||
default:
|
||||
wifiScanStateMessage = '未知状态';
|
||||
break;
|
||||
}
|
||||
console.log( TAG , " on.wifiScanStateChange callback success --------" )
|
||||
prompt.showToast( { message : "wifiScan状态: " + wifiScanStateMessage } )
|
||||
this.scanStateMessage = wifiScanStateMessage
|
||||
console.log( TAG , "wifiStateMessage:" + this.scanStateMessage )
|
||||
AppStorage.SetOrCreate( "scanStateMessage" , this.scanStateMessage )
|
||||
console.log( TAG , " on.wifiStateChange end--------" )
|
||||
return this.scanStateMessage
|
||||
} )
|
||||
return this.scanStateMessage
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Custom button style.
|
||||
*/
|
||||
@Extend( Button ) function operateButtonStyle( color: Resource ) {
|
||||
.width( $r( 'app.float.button_width' ) )
|
||||
.height( $r( 'app.float.button_height' ) )
|
||||
.fontSize( $r( 'app.float.font_16' ) )
|
||||
.fontWeight( 500 )
|
||||
.fontColor( color )
|
||||
.backgroundColor( $r( 'app.color.button_background' ) )
|
||||
}
|
||||
|
||||
function sleep( time ) {
|
||||
return new Promise(( resolve , reject ) => {
|
||||
setTimeout( () => {
|
||||
resolve()
|
||||
} , time * 1000 )
|
||||
})
|
||||
}
|
@ -0,0 +1,306 @@
|
||||
/**
|
||||
* Copyright (c) 2022 Shenzhen Kaihong Digital Industry Development Co., Ltd.
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
// @ts-nocheck
|
||||
|
||||
import { PageTitle } from '../../Component/pageTitle';
|
||||
import { TestImageDisplay } from '../../Component/testImageDisplay';
|
||||
import { ContentTable } from '../../Component/contentTable';
|
||||
import Router from '@system.router';
|
||||
import ConfigData from '../../Utils/ConfigData';
|
||||
import { initWifiApiData } from '../../MainAbility/model/testDataModels'
|
||||
import { TestData } from '../../MainAbility/model/testData'
|
||||
import wifi from '@ohos.wifi';
|
||||
import prompt from '@system.prompt';
|
||||
|
||||
/**
|
||||
* WiFiSwitchStabilityTest Page Of wifi test
|
||||
*/
|
||||
const TAG = '[WiFiSwitchStabilityTest]'
|
||||
|
||||
@Entry
|
||||
@Component
|
||||
struct WiFiSwitchStabilityTest {
|
||||
private testItem: TestData = Router.getParams().testId;
|
||||
@State open_StartTime: Number = 0
|
||||
@State open_EndTime: Number = 0
|
||||
@State open_SpendTime: Number = 0
|
||||
@State close_StartTime: Number = 0
|
||||
@State close_EndTime: Number = 0
|
||||
@State close_SpendTime: Number = 0
|
||||
@State openWifiNumber: Number = 0 // 打开WiFi的次数
|
||||
@State closeWifiNumber: Number = 0 // 关闭WiFi的次数
|
||||
@State openSuccessNumber: Number = 0 // 打开WiFi的成功次数
|
||||
@State openFailNumber: Number = 0 // 打开WiFi的失败次数
|
||||
@State closeSuccessNumber: Number = 0 // 关闭WiFi的成功次数
|
||||
@State closeFailNumber: Number = 0 // 关闭WiFi的失败次数
|
||||
|
||||
@State message: string = "测试结果:"
|
||||
@State testNumbers: Number = 30 //测试次数
|
||||
@State successTimes: Number = 0
|
||||
@State failTimes: Number = 0
|
||||
@State stateMessage: String = ""
|
||||
@State stateMessageLog: String = ""
|
||||
@State switchLoopState: Boolean = true
|
||||
|
||||
build() {
|
||||
Column() {
|
||||
Stack( { alignContent : Alignment.TopStart } ) {
|
||||
TestImageDisplay( { testItem : this.testItem } )
|
||||
PageTitle( { testItem : this.testItem } )
|
||||
}
|
||||
|
||||
Stack().height( "1vp" ).backgroundColor( $r( "app.color.black" ) );
|
||||
|
||||
Column() {
|
||||
Row() {
|
||||
Text( "测试次数:" ).fontSize( $r( 'app.float.font_18' ) ).width( "25%" ).padding( { left : "10vp" } )
|
||||
TextInput( { placeholder : "请输入循环次数,默认为:30" } )
|
||||
.placeholderColor( Color.Grey )
|
||||
.placeholderFont( { size : $r( 'app.float.font_16' ) } )
|
||||
.caretColor( Color.Blue )
|
||||
.width( "70%" )
|
||||
.fontSize( $r( 'app.float.font_16' ) )
|
||||
.fontColor( $r( 'app.color.title_black_color' ) )
|
||||
.onChange( ( value: string ) => {
|
||||
this.testNumbers = Number( value );
|
||||
} )
|
||||
}
|
||||
|
||||
Column() {
|
||||
Text( "测试结果:" )
|
||||
.fontSize( "22vp" )
|
||||
.width( '95%' )
|
||||
.align( Alignment.TopStart )
|
||||
.padding( { top : "10vp" } )
|
||||
Scroll() {
|
||||
Column() {
|
||||
Text( "测试次数:" + this.testNumbers )
|
||||
.fontSize( "17vp" )
|
||||
.margin( { top : "5vp" , left : "10vp" , right : "5vp" } )
|
||||
.textAlign( TextAlign.Start )
|
||||
.width( ConfigData.WH_90_100 )
|
||||
Text( "打开WiFi的成功次数:" + this.openSuccessNumber )
|
||||
.fontSize( "17vp" )
|
||||
.margin( { top : "5vp" , left : "10vp" , right : "5vp" } )
|
||||
.textAlign( TextAlign.Start )
|
||||
.width( ConfigData.WH_90_100 )
|
||||
Text( "打开WiFi的失败次数:" + this.openFailNumber )
|
||||
.fontSize( "17vp" )
|
||||
.margin( { top : "5vp" , left : "10vp" , right : "5vp" } )
|
||||
.textAlign( TextAlign.Start )
|
||||
.width( ConfigData.WH_90_100 )
|
||||
Text( "关闭WiFi的成功次数:" + this.closeSuccessNumber )
|
||||
.fontSize( "17vp" )
|
||||
.margin( { top : "5vp" , left : "10vp" , right : "5vp" } )
|
||||
.textAlign( TextAlign.Start )
|
||||
.width( ConfigData.WH_90_100 )
|
||||
Text( "关闭WiFi的失败次数:" + this.closeFailNumber )
|
||||
.fontSize( "17vp" )
|
||||
.margin( { top : "5vp" , left : "10vp" , right : "5vp" } )
|
||||
.textAlign( TextAlign.Start )
|
||||
.width( ConfigData.WH_90_100 )
|
||||
}
|
||||
.width( ConfigData.WH_100_100 )
|
||||
.backgroundColor( $r( "sys.color.ohos_id_color_foreground_contrary" ) )
|
||||
}
|
||||
.scrollBarWidth( 10 )
|
||||
.scrollBar( BarState.Auto )
|
||||
|
||||
}.width( "100%" ).height( "30%" )
|
||||
|
||||
Column() {
|
||||
Text( "log显示:" )
|
||||
.fontSize( "22vp" )
|
||||
.width( '95%' )
|
||||
.align( Alignment.TopStart )
|
||||
.padding( { top : "10vp" } )
|
||||
List() {
|
||||
ListItem() {
|
||||
Text( this.stateMessageLog )
|
||||
.fontSize( "20vp" )
|
||||
.margin( { top : "5vp" , left : "30vp" , right : "10vp" } )
|
||||
.textAlign( TextAlign.Start )
|
||||
.width( ConfigData.WH_90_100 )
|
||||
}
|
||||
}
|
||||
.height( ConfigData.WH_80_100 )
|
||||
.width( ConfigData.WH_90_100 )
|
||||
.backgroundColor( $r( "sys.color.ohos_id_color_foreground_contrary" ) )
|
||||
}.width( "100%" ).height( "60%" )
|
||||
|
||||
}.width( "100%" ).height( "67%" ).backgroundColor( $r( "app.color.lead" ) )
|
||||
|
||||
Stack().height( "1vp" ).backgroundColor( $r( "app.color.black" ) );
|
||||
|
||||
Column() {
|
||||
Row() {
|
||||
Button( "开始WiFi测试" )
|
||||
.operateButtonStyle( $r( 'app.color.main_blue' ) )
|
||||
.padding( { right : "10vp" } )
|
||||
.onClick( async( event: ClickEvent ) => {
|
||||
console.log( TAG , "start WiFiSwitch test-------------" )
|
||||
let self = this
|
||||
self.switchLoopState = true
|
||||
|
||||
async function forLoop() {
|
||||
self.stateMessageLog = ""
|
||||
self.onWifiState() // 监听函数
|
||||
let funcMessage = "" // 函数信息
|
||||
for ( self.openWifiNumber ; self.openWifiNumber < self.testNumbers ; self.openWifiNumber ++ ) {
|
||||
if ( !self.switchLoopState ) {
|
||||
console.log( TAG , "测试结束------------" )
|
||||
break;
|
||||
} else {
|
||||
let wifiState = wifi.isWifiActive()
|
||||
if ( wifiState ) {
|
||||
wifi.disableWifi()
|
||||
console.log( TAG , "wifi当前已使能,已经去使能,正常开始测试------" )
|
||||
} else {
|
||||
console.log( TAG , "wifi当前未使能,正常开始测试------" )
|
||||
}
|
||||
await sleep( 3 )
|
||||
|
||||
funcMessage = wifi.enableWifi()
|
||||
// 打时间戳
|
||||
self.open_StartTime = new Date().getTime()
|
||||
console.log( TAG , "第" + ( self.openWifiNumber + 1 ) + "次WIFI使能-----" )
|
||||
console.log( TAG , "第" + ( self.openWifiNumber + 1 ) + "次WIFI使能开始时间: " + self.open_StartTime + "ms" )
|
||||
self.stateMessageLog += "第" + ( self.openWifiNumber + 1 ) + "次WIFI使能结果:" + funcMessage + "\n"
|
||||
console.log( TAG , "第" + ( self.openWifiNumber + 1 ) + "次WIFI使能结果:" + funcMessage )
|
||||
await sleep( 10 )
|
||||
self.stateMessage = AppStorage.Get( "stateMessage" )
|
||||
// prompt.showToast( { message : funcMessage } )
|
||||
if ( self.stateMessage == "active" ) {
|
||||
self.open_SpendTime = self.open_EndTime - self.open_StartTime
|
||||
self.stateMessageLog += "第" + ( self.openWifiNumber + 1 ) + "次WIFI使能耗时: " + self.open_SpendTime + "ms" + "\n"
|
||||
console.log( TAG , "第" + ( self.openWifiNumber + 1 ) + "次WIFI使能耗时: " + self.open_SpendTime + "ms" )
|
||||
self.openSuccessNumber = self.openSuccessNumber + 1
|
||||
self.stateMessageLog += "使能成功的次数:" + self.openSuccessNumber + "\n"
|
||||
console.log( TAG , "使能成功的次数:" + self.openSuccessNumber )
|
||||
funcMessage = wifi.disableWifi()
|
||||
self.closeWifiNumber = self.closeWifiNumber + 1
|
||||
self.close_StartTime = new Date().getTime()
|
||||
console.log( TAG , "第" + self.closeWifiNumber + "次WIFI去使能-----" )
|
||||
console.log( TAG , "第" + self.closeWifiNumber + "次WIFI去使能开始时间: " + self.close_StartTime + "ms" )
|
||||
self.stateMessageLog += "第" + self.closeWifiNumber + "次WIFI去使能结果:" + funcMessage + "\n"
|
||||
console.log( TAG , "第" + self.closeWifiNumber + "次WIFI去使能结果:" + funcMessage )
|
||||
console.log( TAG , "closeWifiNumber: " + self.closeWifiNumber )
|
||||
await sleep( 10 )
|
||||
// prompt.showToast( { message : funcMessage } )
|
||||
self.stateMessage = AppStorage.Get( "stateMessage" )
|
||||
if ( self.stateMessage == "inactive" ) {
|
||||
self.close_SpendTime = self.close_EndTime - self.close_StartTime
|
||||
self.stateMessageLog += "第" + self.closeWifiNumber + "次WIFI去使能耗时: " + self.close_SpendTime + "ms" + "\n"
|
||||
console.log( TAG , "第" + self.closeWifiNumber + "次WIFI去使能耗时: " + self.close_SpendTime + "ms" )
|
||||
self.closeSuccessNumber = self.closeSuccessNumber + 1
|
||||
self.stateMessageLog += "去使能成功的次数:" + self.closeSuccessNumber + "\n"
|
||||
console.log( TAG , "去使能成功的次数:" + self.closeSuccessNumber )
|
||||
await sleep( 7 )
|
||||
} else {
|
||||
self.closeFailNumber = self.closeFailNumber + 1
|
||||
}
|
||||
} else if ( self.stateMessage == "inactive" ) {
|
||||
self.openFailNumber = self.openFailNumber + 1
|
||||
break;
|
||||
} else {
|
||||
console.log( "第" + m + "次开wifi后状态不清楚" );
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
forLoop()
|
||||
|
||||
} )
|
||||
|
||||
Button( "关闭WiFi测试" )
|
||||
.operateButtonStyle( $r( 'app.color.main_blue' ) )
|
||||
.padding( { right : "10vp" } )
|
||||
.onClick( async( event: ClickEvent ) => {
|
||||
let self = this
|
||||
self.switchLoopState = false
|
||||
console.log( TAG , "准备测试停止 -------------" )
|
||||
self.stateMessageLog = ""
|
||||
} )
|
||||
}
|
||||
|
||||
}.width( "100%" ).height( "25%" ).backgroundColor( $r( "app.color.lead" ) )
|
||||
|
||||
}.height( "100%" ).width( "100%" ).backgroundColor( $r( "app.color.lead" ) )
|
||||
}
|
||||
|
||||
onWifiState() {
|
||||
console.log( TAG , "on.wifiStateChange start--------" )
|
||||
wifi.on( "wifiStateChange" , ( number ) => {
|
||||
console.log( TAG , " on.wifiStateChange success--------" )
|
||||
let wifiStateMessage = ""
|
||||
switch ( number ) {
|
||||
case 0:
|
||||
wifiStateMessage = "inactive";
|
||||
break;
|
||||
case 1:
|
||||
wifiStateMessage = "active";
|
||||
break;
|
||||
case 2:
|
||||
wifiStateMessage = "activating";
|
||||
break;
|
||||
case 3:
|
||||
wifiStateMessage = "de-activating";
|
||||
break;
|
||||
default:
|
||||
wifiStateMessage = '未知状态';
|
||||
break;
|
||||
}
|
||||
if ( number == 1 ) {
|
||||
// 打时间戳
|
||||
this.open_EndTime = new Date().getTime()
|
||||
console.log( TAG , "WIFI使能结束时间: " + this.open_EndTime + "ms" )
|
||||
} else if ( number == 0 ) {
|
||||
this.close_EndTime = new Date().getTime()
|
||||
console.log( TAG , "WIFI去使能结束时间: " + this.close_EndTime + "ms" )
|
||||
}
|
||||
console.log( TAG , " on.wifiStateChange callback success --------" )
|
||||
prompt.showToast( { message : "wifi状态: " + wifiStateMessage } )
|
||||
this.stateMessage = wifiStateMessage
|
||||
console.log( TAG , "wifiStateMessage:" + this.stateMessage )
|
||||
AppStorage.SetOrCreate( "stateMessage" , this.stateMessage )
|
||||
console.log( TAG , " on.wifiStateChange end--------" )
|
||||
return this.stateMessage
|
||||
} )
|
||||
return this.stateMessage
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Custom button style.
|
||||
*/
|
||||
@Extend( Button ) function operateButtonStyle( color: Resource ) {
|
||||
.width( $r( 'app.float.button_width' ) )
|
||||
.height( $r( 'app.float.button_height' ) )
|
||||
.fontSize( $r( 'app.float.font_16' ) )
|
||||
.fontWeight( 500 )
|
||||
.fontColor( color )
|
||||
.backgroundColor( $r( 'app.color.button_background' ) )
|
||||
}
|
||||
|
||||
function sleep( time ) {
|
||||
return new Promise(( resolve , reject ) => {
|
||||
setTimeout( () => {
|
||||
resolve()
|
||||
} , time * 1000 )
|
||||
})
|
||||
}
|
@ -123,6 +123,46 @@
|
||||
{
|
||||
"name": "lead",
|
||||
"value": "#F0EFF4"
|
||||
},
|
||||
{
|
||||
"name": "index_background",
|
||||
"value": "#F1F3F5"
|
||||
},
|
||||
{
|
||||
"name": "title_black_color",
|
||||
"value": "#182431"
|
||||
},
|
||||
{
|
||||
"name": "main_blue",
|
||||
"value": "#007DFF"
|
||||
},
|
||||
{
|
||||
"name": "main_red",
|
||||
"value": "#E84026"
|
||||
},
|
||||
{
|
||||
"name": "button_background",
|
||||
"value": "#0D182431"
|
||||
},
|
||||
{
|
||||
"name": "edit_blue",
|
||||
"value": "#1A007DFF"
|
||||
},
|
||||
{
|
||||
"name": "dialog_progress",
|
||||
"value": "#4D4D4D"
|
||||
},
|
||||
{
|
||||
"name": "start_window_background",
|
||||
"value": "#FFFFFF"
|
||||
},
|
||||
{
|
||||
"name": "custom_button_color",
|
||||
"value": "#E8E7EB"
|
||||
},
|
||||
{
|
||||
"name": "input_background",
|
||||
"value": "#0D182431"
|
||||
}
|
||||
]
|
||||
}
|
@ -240,10 +240,18 @@
|
||||
"name": "font_10",
|
||||
"value": "10fp"
|
||||
},
|
||||
{
|
||||
"name": "font_12",
|
||||
"value": "12fp"
|
||||
},
|
||||
{
|
||||
"name": "font_14",
|
||||
"value": "14fp"
|
||||
},
|
||||
{
|
||||
"name": "font_15",
|
||||
"value": "15fp"
|
||||
},
|
||||
{
|
||||
"name": "font_16",
|
||||
"value": "16fp"
|
||||
@ -312,6 +320,10 @@
|
||||
"name": "distance_4",
|
||||
"value": "4vp"
|
||||
},
|
||||
{
|
||||
"name": "distance_5",
|
||||
"value": "5vp"
|
||||
},
|
||||
{
|
||||
"name": "distance_6",
|
||||
"value": "6vp"
|
||||
@ -404,6 +416,10 @@
|
||||
"name": "distance_36",
|
||||
"value": "36vp"
|
||||
},
|
||||
{
|
||||
"name": "distance_54",
|
||||
"value": "54vp"
|
||||
},
|
||||
{
|
||||
"name": "distance_64",
|
||||
"value": "64vp"
|
||||
@ -855,6 +871,50 @@
|
||||
{
|
||||
"name": "passwordSetting_button_width",
|
||||
"value": "261vp"
|
||||
},
|
||||
{
|
||||
"name": "secondary_title",
|
||||
"value": "20fp"
|
||||
},
|
||||
{
|
||||
"name": "button_width",
|
||||
"value": "156vp"
|
||||
},
|
||||
{
|
||||
"name": "button_height",
|
||||
"value": "40vp"
|
||||
},
|
||||
{
|
||||
"name": "target_info_height",
|
||||
"value": "135vp"
|
||||
},
|
||||
{
|
||||
"name": "expanded_item_height",
|
||||
"value": "148vp"
|
||||
},
|
||||
{
|
||||
"name": "list_item_height",
|
||||
"value": "64vp"
|
||||
},
|
||||
{
|
||||
"name": "edit_panel_height",
|
||||
"value": "84vp"
|
||||
},
|
||||
{
|
||||
"name": "dialog_btn_height",
|
||||
"value": "32vp"
|
||||
},
|
||||
{
|
||||
"name": "dialog_btn_width",
|
||||
"value": "96vp"
|
||||
},
|
||||
{
|
||||
"name": "dialog_offset_y",
|
||||
"value": "-16vp"
|
||||
},
|
||||
{
|
||||
"name": "dialog_height",
|
||||
"value": "168vp"
|
||||
}
|
||||
]
|
||||
}
|
@ -64,6 +64,10 @@
|
||||
"name": "scenario",
|
||||
"value": "场景测试"
|
||||
},
|
||||
{
|
||||
"name": "stability",
|
||||
"value": "稳定性测试"
|
||||
},
|
||||
{
|
||||
"name": "autotest",
|
||||
"value": "自动测试"
|
||||
@ -1711,6 +1715,105 @@
|
||||
{
|
||||
"name": "p2p_available",
|
||||
"value": "对等设备"
|
||||
},
|
||||
{
|
||||
"name": "candidateWifiGroup",
|
||||
"value": "可选的候选网络"
|
||||
},
|
||||
{
|
||||
"name": "candidateWifi",
|
||||
"value": "candidateWifi"
|
||||
}, {
|
||||
"name": "module_desc",
|
||||
"value": "module description"
|
||||
},
|
||||
{
|
||||
"name": "EntryAbility_desc",
|
||||
"value": "description"
|
||||
},
|
||||
{
|
||||
"name": "EntryAbility_label",
|
||||
"value": "目标管理"
|
||||
},
|
||||
{
|
||||
"name": "title",
|
||||
"value": "工作目标"
|
||||
},
|
||||
{
|
||||
"name": "add_task",
|
||||
"value": "添加候选wifi"
|
||||
},
|
||||
{
|
||||
"name": "target_name",
|
||||
"value": "目标"
|
||||
},
|
||||
{
|
||||
"name": "target_info",
|
||||
"value": "点击按钮添加候选网络"
|
||||
},
|
||||
{
|
||||
"name": "overall_progress",
|
||||
"value": "整体进度"
|
||||
},
|
||||
{
|
||||
"name": "add_task_dialog",
|
||||
"value": "添加候选WiFi"
|
||||
},
|
||||
{
|
||||
"name": "latest_updateTime",
|
||||
"value": "更新时间: "
|
||||
},
|
||||
{
|
||||
"name": "sub_goals",
|
||||
"value": "候选WiFi列表"
|
||||
},
|
||||
{
|
||||
"name": "cancel_button",
|
||||
"value": "取消"
|
||||
},
|
||||
{
|
||||
"name": "confirm_button",
|
||||
"value": "确定"
|
||||
},
|
||||
{
|
||||
"name": "delete_button",
|
||||
"value": "删除"
|
||||
},
|
||||
{
|
||||
"name": "edit_button",
|
||||
"value": "编辑"
|
||||
},
|
||||
{
|
||||
"name": "select_all_button",
|
||||
"value": "全选"
|
||||
},
|
||||
{
|
||||
"name": "cannot_input_empty",
|
||||
"value": "WiFi名称不能为空!"
|
||||
},
|
||||
{
|
||||
"name": "input_candidate_wifi",
|
||||
"value": "输入候选WiFi的配置"
|
||||
},
|
||||
{
|
||||
"name": "input_candidate_wifi_ssid",
|
||||
"value": "输入候选WiFi的SSID"
|
||||
},
|
||||
{
|
||||
"name": "input_candidate_wifi_bssid",
|
||||
"value": "输入候选WiFi的bssid(MAC) (可不填)"
|
||||
},
|
||||
{
|
||||
"name": "input_candidate_wifi_preSharedKey",
|
||||
"value": "输入候选WiFi密码"
|
||||
},
|
||||
{
|
||||
"name": "input_candidate_wifi_isHiddenSsid",
|
||||
"value": "输入1或0 (可不填;1:ture,0:false)"
|
||||
},
|
||||
{
|
||||
"name": "input_candidate_wifi_securityType",
|
||||
"value": "选择securityType"
|
||||
}
|
||||
]
|
||||
}
|
@ -39,6 +39,10 @@
|
||||
"pages/subManualApiTest/subWifiTest/wifiFound",
|
||||
"pages/subManualApiTest/subP2pTest/p2pFound",
|
||||
"pages/subAppTest/wifiScanTest",
|
||||
"pages/subAppTest/p2pDiscoveryTest"
|
||||
"pages/subAppTest/wifiCandidateTest",
|
||||
"pages/subAppTest/p2pDiscoveryTest",
|
||||
"pages/subStabilityTest/wifiSwitchStabilityTest",
|
||||
"pages/subStabilityTest/wifiScanStabilityTest",
|
||||
"pages/subStabilityTest/wifiConnectStabilityTest"
|
||||
]
|
||||
}
|
||||
|
@ -12,7 +12,7 @@
|
||||
# limitations under the License.
|
||||
|
||||
ability_runtime_path = "//foundation/ability/ability_runtime"
|
||||
fuzz_test_output_path = "wifi/wifi_sta"
|
||||
fuzz_test_output_path = "wifi/wifi/wifi_sta"
|
||||
SUBSYSTEM_DIR = "//foundation/communication"
|
||||
WIFI_ROOT_DIR = "$SUBSYSTEM_DIR/wifi/wifi"
|
||||
DHCP_ROOT_DIR = "$SUBSYSTEM_DIR/dhcp"
|
||||
|
Loading…
Reference in New Issue
Block a user