From 7e7aed82c911868e5b8323de8f89a97f68fd113f Mon Sep 17 00:00:00 2001 From: chengwang Date: Fri, 22 Aug 2025 20:13:53 +0800 Subject: [PATCH 01/16] cellular data power improvement Signed-off-by: chengwang --- BUILD.gn | 24 ++ bundle.json | 3 +- .../js/napi/src/cellular_data_handler.cpp | 12 + services/include/cellular_data_handler.h | 6 +- .../cellular_data_power_improvement_manager.h | 74 +++++ ...ellular_data_power_improvement_manager.cpp | 189 ++++++++++++ test/BUILD.gn | 1 + test/cellular_data_handler_test.cpp | 25 ++ ...ar_data_power_improvement_manager_test.cpp | 277 ++++++++++++++++++ 9 files changed, 609 insertions(+), 2 deletions(-) create mode 100644 services/include/cellular_data_power_improvement_manager.h create mode 100644 services/src/cellular_data_power_improvement_manager.cpp create mode 100644 test/cellular_data_power_improvement_manager_test.cpp diff --git a/BUILD.gn b/BUILD.gn index cdc8fae7..8e114ab2 100644 --- a/BUILD.gn +++ b/BUILD.gn @@ -32,6 +32,10 @@ if (defined(global_parts_info) && TELEPHONY_EXT_WRAPPER_ROOT = "services/telephony_ext_wrapper" DATA_SERVICE_EXT_WRAPPER_ROOT = "services/data_service_ext_wrapper" +declare_args() { + cellular_data_feature_base_power_improvement = false +} + ohos_shared_library("tel_cellular_data") { sanitize = { cfi = true @@ -81,6 +85,12 @@ ohos_shared_library("tel_cellular_data") { "services/src/utils/network_search_callback.cpp", ] + if (cellular_data_feature_base_power_improvement ) { + sources += [ + "services/src/cellular_data_power_improvement_manager.cpp", + ] + } + include_dirs = [ "$TELEPHONY_EXT_WRAPPER_ROOT/include", "$DATA_SERVICE_EXT_WRAPPER_ROOT/include", @@ -142,6 +152,10 @@ ohos_shared_library("tel_cellular_data") { defines += [ "HICOLLIE_ENABLE" ] } + if (cellular_data_feature_base_power_improvement ) { + defines += [ "BASE_POWER_IMPROVEMENT" ] + } + if (defined(global_parts_info) && defined(global_parts_info.communication_netmanager_enhanced)) { defines += [ "OHOS_BUILD_ENABLE_DATA_SERVICE_EXT" ] @@ -201,6 +215,12 @@ ohos_static_library("tel_cellular_data_static") { "services/src/utils/network_search_callback.cpp", ] + if (cellular_data_feature_base_power_improvement ) { + sources += [ + "services/src/cellular_data_power_improvement_manager.cpp", + ] + } + include_dirs = [ "$TELEPHONY_EXT_WRAPPER_ROOT/include", "$DATA_SERVICE_EXT_WRAPPER_ROOT/include", @@ -262,6 +282,10 @@ ohos_static_library("tel_cellular_data_static") { defines += [ "HICOLLIE_ENABLE" ] } + if (cellular_data_feature_base_power_improvement ) { + defines += [ "BASE_POWER_IMPROVEMENT" ] + } + if (defined(global_parts_info) && defined(global_parts_info.communication_netmanager_enhanced)) { defines += [ "OHOS_BUILD_ENABLE_DATA_SERVICE_EXT" ] diff --git a/bundle.json b/bundle.json index cad08daa..9c01c939 100644 --- a/bundle.json +++ b/bundle.json @@ -23,7 +23,8 @@ "SystemCapability.Telephony.CellularData" ], "features": [ - "cellular_data_dynamic_start" + "cellular_data_dynamic_start", + "cellular_data_feature_base_power_improvement" ], "adapted_system_type": [ "standard" diff --git a/frameworks/js/napi/src/cellular_data_handler.cpp b/frameworks/js/napi/src/cellular_data_handler.cpp index e736a4da..5faba673 100644 --- a/frameworks/js/napi/src/cellular_data_handler.cpp +++ b/frameworks/js/napi/src/cellular_data_handler.cpp @@ -76,6 +76,12 @@ void CellularDataHandler::Init() dataSwitchSettings_->LoadSwitchValue(); GetConfigurationFor5G(); SetRilLinkBandwidths(); +#ifdef BASE_POWER_IMPROVEMENT + dataConnectionPowerImprovementManager_ = std::make_shared(*this); + bool isDefinedTelePower = system::GetBoolParameter("const.vendor.ril.power.feature_tele_power", false); + bool ret = dataConnectionPowerImprovementManager_->StartEventSubscriber(isDefinedTelePower); + TELEPHONY_LOGI("Subscribe ordered broadcast succ ret = %{public}d", ret); +#endif } CellularDataHandler::~CellularDataHandler() {} @@ -1058,6 +1064,12 @@ void CellularDataHandler::HandleDisconnectDataCompleteForMmsType(sptr SetDataPermittedForMms(false); RemoveEvent(CellularDataEventCode::MSG_RESUME_DATA_PERMITTED_TIMEOUT); } +#ifdef BASE_POWER_IMPROVEMENT + if (dataConnectionPowerImprovementManager_ != nullptr && DataConnectionPowerImprovementManager::powerSaveFlag_) { + dataConnectionPowerImprovementManager_->FinishPowerStrEnterEvent(); + DataConnectionPowerImprovementManager::powerSaveFlag_ = false; + } +#endif } void CellularDataHandler::RetryOrClearConnection(const sptr &apnHolder, DisConnectionReason reason, diff --git a/services/include/cellular_data_handler.h b/services/include/cellular_data_handler.h index 277fbdc9..ef77d772 100644 --- a/services/include/cellular_data_handler.h +++ b/services/include/cellular_data_handler.h @@ -38,9 +38,11 @@ #include "tel_profile_util.h" #include "tel_ril_data_parcel.h" #include "telephony_types.h" + namespace OHOS { namespace Telephony { const uint32_t KEEP_APN_ACTIVATE_PERIOD = 30 * 1000; +class DataConnectionPowerImprovementManager; class CellularDataHandler : public TelEventHandler, public EventFwk::CommonEventSubscriber { public: explicit CellularDataHandler(const EventFwk::CommonEventSubscribeInfo &sp, int32_t slotId); @@ -224,7 +226,9 @@ private: uint64_t defaultApnActTime_ = 0; uint64_t internalApnActTime_ = 0; int32_t retryCreateApnTimes_ = 0; - +#ifdef BASE_POWER_IMPROVEMENT + std::shared_ptr dataConnectionPowerImprovementManager_ = nullptr; +#endif using Fun = std::function; std::map eventIdMap_ { { RadioEvent::RADIO_PS_CONNECTION_ATTACHED, diff --git a/services/include/cellular_data_power_improvement_manager.h b/services/include/cellular_data_power_improvement_manager.h new file mode 100644 index 00000000..de1a3d97 --- /dev/null +++ b/services/include/cellular_data_power_improvement_manager.h @@ -0,0 +1,74 @@ +/* + * Copyright (C) 2025 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. + */ + +#ifndef DATA_CONNECTION_POWER_STR_MANAGER_H +#define DATA_CONNECTION_POWER_STR_MANAGER_H + +#include "common_event_subscriber.h" +#include "system_ability_status_change_stub.h" + +namespace OHOS { +namespace Telephony { +class CellularDataHandler; +class DataConnectionPowerSaveModeSubscriber : public EventFwk::CommonEventSubscriber { +public: + explicit DataConnectionPowerSaveModeSubscriber( + const EventFwk::CommonEventSubscribeInfo &info, CellularDataHandler &handler) + : CommonEventSubscriber(info), powerSaveModeCellularDataHandler_(handler) {} + ~DataConnectionPowerSaveModeSubscriber() = default; + void OnReceiveEvent(const EventFwk::CommonEventData &data) override; + std::shared_ptr strAsyncCommonEvent_ = nullptr; +private: + void HandleEnterStrEvent(std::string &action); + void HandleExitStrEvent(std::string &action); + CellularDataHandler &powerSaveModeCellularDataHandler_; +}; + +class DataConnectionPowerImprovementManager { +public: + DataConnectionPowerImprovementManager(CellularDataHandler &handler) : strCellularDataHandler_(handler) {} + ~DataConnectionPowerImprovementManager() = default; + bool StartEventSubscriber(bool isDefinedTelePower); + void StopEventSubscriber(); + static bool GetSavedCellularDataStatus(); + static void SetSavedCellularDataStatus(bool value); + void FinishPowerStrEnterEvent(); + std::shared_ptr strEnterSubscriber_ = nullptr; + std::shared_ptr strExitSubscriber_ = nullptr; + static inline bool powerSaveFlag_ = false; +private: + std::shared_ptr CreateCommonSubscriber(const std::string &event, + int32_t priority); +private: + class SystemAbilityStatusChangeListener : public SystemAbilityStatusChangeStub { + public: + SystemAbilityStatusChangeListener(std::shared_ptr subStrEnter, + std::shared_ptr subStrExit) + : strEnterSub_(subStrEnter), strExitSub_(subStrExit) {} + ~SystemAbilityStatusChangeListener() = default; + void OnAddSystemAbility(int32_t systemAbilityId, const std::string &deviceId) override; + void OnRemoveSystemAbility(int32_t systemAbilityId, const std::string &deviceId) override; + private: + std::shared_ptr strEnterSub_ = nullptr; + std::shared_ptr strExitSub_ = nullptr; + }; +private: + static inline bool g_savedCellularDataStatus = true; + sptr statusChangeListener_ = nullptr; + CellularDataHandler &strCellularDataHandler_; +}; +} // namespace Telephony +} // namespace OHOS +#endif \ No newline at end of file diff --git a/services/src/cellular_data_power_improvement_manager.cpp b/services/src/cellular_data_power_improvement_manager.cpp new file mode 100644 index 00000000..ae3358f1 --- /dev/null +++ b/services/src/cellular_data_power_improvement_manager.cpp @@ -0,0 +1,189 @@ +/* + * Copyright (C) 2025 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. + */ + +#include "cellular_data_power_improvement_manager.h" + +#include "telephony_types.h" +#include "telephony_log_wrapper.h" +#include "cellular_data_handler.h" + +namespace OHOS { +namespace Telephony { +constexpr const char *PERMISSION_STARTUP_COMPLETED = "ohos.permission.RECEIVER_STARTUP_COMPLETED"; +std::string lastMsg = ""; +bool DataConnectionPowerImprovementManager::StartEventSubscriber(bool isDefinedTelePower) +{ + if (!isDefinedTelePower) { + TELEPHONY_LOGI("feature_tele_power not define"); + return false; + } + strEnterSubscriber_ = CreateCommonSubscriber(ENTER_STR_TELEPHONY_NOTIFY, CommonEventPriority::FIRST_PRIORITY); + strExitSubscriber_ = CreateCommonSubscriber(EXIT_STR_TELEPHONY_NOTIFY, CommonEventPriority::THIRD_PRIORITY); + statusChangeListener_ = sptr::MakeSptr(strEnterSubscriber_, strExitSubscriber_); + auto samgrProxy = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager(); + if (samgrProxy == nullptr) { + TELEPHONY_LOGE("StartEventSubscriber samgrProxy is nullptr"); + return false; + } + if (samgrProxy->SubscribeSystemAbility(COMMON_EVENT_SERVICE_ID, statusChangeListener_) != TELEPHONY_ERR_SUCCESS) { + TELEPHONY_LOGE("SubscribeSystemAbility execute failed"); + return false; + } + return true; +} + +std::shared_ptr DataConnectionPowerImprovementManager::CreateCommonSubscriber( + const std::string &event, int32_t priority) +{ + EventFwk::MatchingSkills matchingSkills; + matchingSkills.AddEvent(event); + EventFwk::CommonEventSubscribeInfo subscribeInfo(matchingSkills); + subscribeInfo.SetThreadMode(EventFwk::CommonEventSubscribeInfo::COMMON); + subscribeInfo.SetPriority(priority); + subscribeInfo.SetPermission(PERMISSION_STARTUP_COMPLETED); + return std::make_shared(subscribeInfo, strCellularDataHandler_); +} + +void DataConnectionPowerImprovementManager::StopEventSubscriber() +{ + auto samgrProxy = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager(); + if (samgrProxy != nullptr) { + int32_t ret = samgrProxy->UnSubscribeSystemAbility(COMMON_EVENT_SERVICE_ID, statusChangeListener_); + TELEPHONY_LOGI("StopSystemAbilitySubscriber result = %{public}d", ret); + statusChangeListener_ = nullptr; + } + if (strEnterSubscriber_ != nullptr) { + bool subscribeResult = EventFwk::CommonEventManager::UnSubscribeCommonEvent(strEnterSubscriber_); + TELEPHONY_LOGI("StopEventSubscriber result = %{public}d", subscribeResult); + strEnterSubscriber_ = nullptr; + } + if (strExitSubscriber_ != nullptr) { + bool subscribeResult = EventFwk::CommonEventManager::UnSubscribeCommonEvent(strExitSubscriber_); + TELEPHONY_LOGI("StopEventSubscriber result = %{public}d", subscribeResult); + strExitSubscriber_ = nullptr; + } +} + +void DataConnectionPowerImprovementManager::SystemAbilityStatusChangeListener::OnAddSystemAbility( + int32_t systemAbilityId, const std::string &deviceId) +{ + if (systemAbilityId != COMMON_EVENT_SERVICE_ID) { + TELEPHONY_LOGI("systemAbilityId is %{public}d", systemAbilityId); + return; + } + if (strEnterSub_ != nullptr) { + bool subscribeResult = EventFwk::CommonEventManager::SubscribeCommonEvent(strEnterSub_); + TELEPHONY_LOGI("strEnterSubscribeResult = %{public}d", subscribeResult); + } + if (strExitSub_ != nullptr) { + bool subscribeResult = EventFwk::CommonEventManager::SubscribeCommonEvent(strExitSub_); + TELEPHONY_LOGI("strExitSubscribeResult = %{public}d", subscribeResult); + } +} + +void DataConnectionPowerImprovementManager::SystemAbilityStatusChangeListener::OnRemoveSystemAbility( + int32_t systemAbilityId, const std::string &deviceId) +{ + if (systemAbilityId != COMMON_EVENT_SERVICE_ID) { + return; + } + if (strEnterSub_ != nullptr) { + bool subscribeResult = EventFwk::CommonEventManager::UnSubscribeCommonEvent(strEnterSub_); + TELEPHONY_LOGI("strEnterUnSubscribeResult = %{public}d", subscribeResult); + strEnterSub_ = nullptr; + } + if (strExitSub_ != nullptr) { + bool subscribeResult = EventFwk::CommonEventManager::UnSubscribeCommonEvent(strExitSub_); + TELEPHONY_LOGI("strExitUnSubscribeResult = %{public}d", subscribeResult); + strExitSub_ = nullptr; + } +} + +void DataConnectionPowerImprovementManager::FinishPowerStrEnterEvent() +{ + if (strEnterSubscriber_ != nullptr && strEnterSubscriber_->strAsyncCommonEvent_ != nullptr) { + bool ret = strEnterSubscriber_->strAsyncCommonEvent_->FinishCommonEvent(); + TELEPHONY_LOGI("StrEnter FinishPowerStrEnterEvent result = %{public}d", ret); + } +} + +bool DataConnectionPowerImprovementManager::GetSavedCellularDataStatus() +{ + TELEPHONY_LOGI("Resume cellular status %{public}d", g_savedCellularDataStatus); + return g_savedCellularDataStatus; +} + +void DataConnectionPowerImprovementManager::SetSavedCellularDataStatus(bool value) +{ + g_savedCellularDataStatus = value; + TELEPHONY_LOGI("Backup cellular status %{public}d", g_savedCellularDataStatus); +} + +void DataConnectionPowerSaveModeSubscriber::OnReceiveEvent(const EventFwk::CommonEventData &data) +{ + std::string action = data.GetWant().GetAction(); + if (action == ENTER_STR_TELEPHONY_NOTIFY) { + TELEPHONY_LOGI("Enter str mode"); + HandleEnterStrEvent(action); + } else if (action == EXIT_STR_TELEPHONY_NOTIFY) { + TELEPHONY_LOGI("Exit str mode"); + HandleExitStrEvent(action); + } else { + TELEPHONY_LOGE("TelPowerSubscriber: action=%{public}s code=%{public}d", action.c_str(), data.GetCode()); + } +} + +void DataConnectionPowerSaveModeSubscriber::HandleEnterStrEvent(std::string &action) +{ + strAsyncCommonEvent_ = this->GoAsyncCommonEvent(); + // except same msg + if (action != lastMsg) { + bool cellularDataStatus = true; + int32_t getCellularStatusRet = powerSaveModeCellularDataHandler_.IsCellularDataEnabled(cellularDataStatus); + TELEPHONY_LOGI("Get cellular status ret = %{public}d", getCellularStatusRet); + DataConnectionPowerImprovementManager::SetSavedCellularDataStatus(cellularDataStatus); + // set false in HandleDisconnectDataCompleteForMmsType + DataConnectionPowerImprovementManager::powerSaveFlag_ = true; + int32_t setCellularDataEnableRet = powerSaveModeCellularDataHandler_.SetCellularDataEnable(false); + TELEPHONY_LOGI("Enter str SetCellularDataEnable ret = %{public}d", setCellularDataEnableRet); + } else if (strAsyncCommonEvent_ != nullptr) { + TELEPHONY_LOGI("Recv same msg in succession lastMsg:%{public}s", lastMsg.c_str()); + bool ret = strAsyncCommonEvent_->FinishCommonEvent(); + TELEPHONY_LOGI("StrEnter FinishPowerStrEnterEvent ret = %{public}d", ret); + } + lastMsg = ENTER_STR_TELEPHONY_NOTIFY; +} + +void DataConnectionPowerSaveModeSubscriber::HandleExitStrEvent(std::string &action) +{ + strAsyncCommonEvent_ = this->GoAsyncCommonEvent(); + if (action != lastMsg) { + // reply common event firt due to activate cellular too slow + if (strAsyncCommonEvent_ != nullptr) { + bool result = strAsyncCommonEvent_->FinishCommonEvent(); + TELEPHONY_LOGI("StrExit FinishPowerStrExitEvent result = %{public}d", result); + } + bool savedCellularDataStatus = DataConnectionPowerImprovementManager::GetSavedCellularDataStatus(); + int32_t ret = powerSaveModeCellularDataHandler_.SetCellularDataEnable(savedCellularDataStatus); + TELEPHONY_LOGI("Exit str SetCellularDataEnable ret = %{public}d", ret); + } else if (strAsyncCommonEvent_ != nullptr) { + TELEPHONY_LOGI("Recv same msg in succession lastMsg:%{public}s", lastMsg.c_str()); + bool ret = strAsyncCommonEvent_->FinishCommonEvent(); + TELEPHONY_LOGI("StrExit FinishPowerStrExitEvent ret = %{public}d", ret); + } + lastMsg = EXIT_STR_TELEPHONY_NOTIFY; +} +} // namespace Telephony +} // namespace OHOS \ No newline at end of file diff --git a/test/BUILD.gn b/test/BUILD.gn index d8c4f997..631fe52e 100644 --- a/test/BUILD.gn +++ b/test/BUILD.gn @@ -27,6 +27,7 @@ ohos_unittest("tel_cellular_data_test") { "$SOURCE_DIR/test/data_access_token.cpp", "$SOURCE_DIR/test/zero_branch_test.cpp", "$SOURCE_DIR/test/net_manager_call_back_test.cpp", + "$SOURCE_DIR/test/cellular_data_power_improvement_manager_test.cpp", ] include_dirs = [ diff --git a/test/cellular_data_handler_test.cpp b/test/cellular_data_handler_test.cpp index 0294f240..738ca0f2 100644 --- a/test/cellular_data_handler_test.cpp +++ b/test/cellular_data_handler_test.cpp @@ -20,6 +20,9 @@ #include "common_event_support.h" #include "cellular_data_handler.h" #include "cellular_data_controller.h" +#ifdef BASE_POWER_IMPROVEMENT +#include "cellular_data_power_improvement_manager.h" +#endif namespace OHOS { namespace Telephony { @@ -1159,5 +1162,27 @@ HWTEST_F(CellularDataHandlerTest, IsCellularDataEnabledTest001, Function | Mediu cellularDataHandler->dataSwitchSettings_->lastQryRet_ = TELEPHONY_ERR_SUCCESS; EXPECT_EQ(cellularDataHandler->IsCellularDataEnabled(isDataEnabled), TELEPHONY_ERR_SUCCESS); } + +/** +@tc.number Telephony_HandleDisconnectDataCompleteForMmsType +@tc.name HandleDisconnectDataCompleteForMmsType +@tc.desc Function test +*/ +#ifdef BASE_POWER_IMPROVEMENT +HWTEST_F(CellularDataHandlerTest, HandleDisconnectDataCompleteForMmsTypeTest001, Function | MediumTest | Level1) +{ + int32_t slotId = 0; + EventFwk::MatchingSkills matchingSkills; + EventFwk::CommonEventSubscribeInfo subscriberInfo(matchingSkills); + auto cellularDataHandler = std::make_shared(subscriberInfo, slotId); + cellularDataHandler->Init(); + EXPECT_NE(cellularDataHandler->dataConnectionPowerImprovementManager_, nullptr); + DataConnectionPowerImprovementManager::powerSaveFlag_ = true; + std::string apnType = DATA_CONTEXT_ROLE_MMS; + sptr apnHolder = new ApnHolder(apnType, slotId); + cellularDataHandler->HandleDisconnectDataCompleteForMmsType(apnHolder); + EXPECT_EQ(DataConnectionPowerImprovementManager::powerSaveFlag_, false); +} +#endif } // namespace Telephony } // namespace OHOS \ No newline at end of file diff --git a/test/cellular_data_power_improvement_manager_test.cpp b/test/cellular_data_power_improvement_manager_test.cpp new file mode 100644 index 00000000..6d6cf207 --- /dev/null +++ b/test/cellular_data_power_improvement_manager_test.cpp @@ -0,0 +1,277 @@ +/* + * Copyright (C) 2025 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. + */ +#define private public +#define protected public + +#include "cellular_data_power_improvement_manager.h" + +#include "gtest/gtest.h" +#include "common_event_support.h" +#include "cellular_data_handler.h" + +namespace OHOS { +namespace Telephony { +using namespace testing::ext; +class DataConnectionPowerImprovementManagerTest : public testing::Test { +public: + static void SetUpTestCase() {} + static void TearDownTestCase() {} + void SetUp() {} + void TearDown() {} +}; + +HWTEST_F(DataConnectionPowerImprovementManagerTest, DataConnectionPowerImprovementManager_01, + Function | MediumTest | Level1) +{ + EventFwk::MatchingSkills matchingSkills; + matchingSkills.AddEvent(EventFwk::CommonEventSupport::COMMON_EVENT_CALL_STATE_CHANGED); + EventFwk::CommonEventSubscribeInfo subscriberInfo(matchingSkills); + auto cellularDataHandler = CellularDataHandler(subscriberInfo, 0); + auto dataConnectionPowerImprovementManager = + std::make_shared(cellularDataHandler); + bool isDefinedTelePower = true; + dataConnectionPowerImprovementManager->StartEventSubscriber(isDefinedTelePower); + EXPECT_NE(dataConnectionPowerImprovementManager->strEnterSubscriber_, nullptr); + EXPECT_NE(dataConnectionPowerImprovementManager->strExitSubscriber_, nullptr); + dataConnectionPowerImprovementManager->StopEventSubscriber(); + EXPECT_EQ(dataConnectionPowerImprovementManager->strEnterSubscriber_, nullptr); + EXPECT_EQ(dataConnectionPowerImprovementManager->strExitSubscriber_, nullptr); +} +HWTEST_F(DataConnectionPowerImprovementManagerTest, DataConnectionPowerImprovementManager_02, + Function | MediumTest | Level1) +{ + EventFwk::MatchingSkills matchingSkills; + matchingSkills.AddEvent(EventFwk::CommonEventSupport::COMMON_EVENT_CALL_STATE_CHANGED); + EventFwk::CommonEventSubscribeInfo subscriberInfo(matchingSkills); + auto cellularDataHandler = CellularDataHandler(subscriberInfo, 0); + auto dataConnectionPowerImprovementManager = + std::make_shared(cellularDataHandler); + bool isDefinedTelePower = true; + dataConnectionPowerImprovementManager->StartEventSubscriber(isDefinedTelePower); + auto want = EventFwk::Want(); + want.SetAction(ENTER_STR_TELEPHONY_NOTIFY); + auto event = EventFwk::CommonEventData(want); + dataConnectionPowerImprovementManager->strEnterSubscriber_->OnReceiveEvent(event); + EXPECT_EQ(dataConnectionPowerImprovementManager->strEnterSubscriber_->strAsyncCommonEvent_, nullptr); +} + +HWTEST_F(DataConnectionPowerImprovementManagerTest, DataConnectionPowerImprovementManager_03, + Function | MediumTest | Level1) +{ + EventFwk::MatchingSkills matchingSkills; + matchingSkills.AddEvent(EventFwk::CommonEventSupport::COMMON_EVENT_CALL_STATE_CHANGED); + EventFwk::CommonEventSubscribeInfo subscriberInfo(matchingSkills); + auto cellularDataHandler = CellularDataHandler(subscriberInfo, 0); + auto dataConnectionPowerImprovementManager = + std::make_shared(cellularDataHandler); + bool isDefinedTelePower = true; + dataConnectionPowerImprovementManager->StartEventSubscriber(isDefinedTelePower); + auto want = EventFwk::Want(); + want.SetAction(EXIT_STR_TELEPHONY_NOTIFY); + auto event = EventFwk::CommonEventData(want); + dataConnectionPowerImprovementManager->strExitSubscriber_->OnReceiveEvent(event); + EXPECT_EQ(dataConnectionPowerImprovementManager->strExitSubscriber_->strAsyncCommonEvent_, nullptr); +} + +HWTEST_F(DataConnectionPowerImprovementManagerTest, DataConnectionPowerImprovementManager_04, + Function | MediumTest | Level1) +{ + EventFwk::MatchingSkills matchingSkills; + matchingSkills.AddEvent(EventFwk::CommonEventSupport::COMMON_EVENT_CALL_STATE_CHANGED); + EventFwk::CommonEventSubscribeInfo subscriberInfo(matchingSkills); + auto cellularDataHandler = CellularDataHandler(subscriberInfo, 0); + auto dataConnectionPowerImprovementManager = + std::make_shared(cellularDataHandler); + bool isDefinedTelePower = true; + dataConnectionPowerImprovementManager->StartEventSubscriber(isDefinedTelePower); + auto want = EventFwk::Want(); + want.SetAction(ENTER_STR_TELEPHONY_NOTIFY); + auto event = EventFwk::CommonEventData(want); + DataConnectionPowerImprovementManager::SetSavedCellularDataStatus(false); + dataConnectionPowerImprovementManager->strEnterSubscriber_->OnReceiveEvent(event); + EXPECT_EQ(dataConnectionPowerImprovementManager->strEnterSubscriber_->strAsyncCommonEvent_, nullptr); +} + +HWTEST_F(DataConnectionPowerImprovementManagerTest, DataConnectionPowerImprovementManager_05, + Function | MediumTest | Level1) +{ + EventFwk::MatchingSkills matchingSkills; + matchingSkills.AddEvent(EventFwk::CommonEventSupport::COMMON_EVENT_CALL_STATE_CHANGED); + EventFwk::CommonEventSubscribeInfo subscriberInfo(matchingSkills); + auto cellularDataHandler = CellularDataHandler(subscriberInfo, 0); + auto dataConnectionPowerImprovementManager = + std::make_shared(cellularDataHandler); + bool isDefinedTelePower = true; + dataConnectionPowerImprovementManager->StartEventSubscriber(isDefinedTelePower); + auto want = EventFwk::Want(); + want.SetAction(EXIT_STR_TELEPHONY_NOTIFY); + auto event = EventFwk::CommonEventData(want); + dataConnectionPowerImprovementManager->strEnterSubscriber_->OnReceiveEvent(event); + EXPECT_EQ(dataConnectionPowerImprovementManager->strEnterSubscriber_->strAsyncCommonEvent_, nullptr); +} + +HWTEST_F(DataConnectionPowerImprovementManagerTest, DataConnectionPowerImprovementManager_06, + Function | MediumTest | Level1) +{ + EventFwk::MatchingSkills matchingSkills; + matchingSkills.AddEvent(EventFwk::CommonEventSupport::COMMON_EVENT_CALL_STATE_CHANGED); + EventFwk::CommonEventSubscribeInfo subscriberInfo(matchingSkills); + auto cellularDataHandler = CellularDataHandler(subscriberInfo, 0); + auto dataConnectionPowerImprovementManager = + std::make_shared(cellularDataHandler); + bool isDefinedTelePower = true; + dataConnectionPowerImprovementManager->StartEventSubscriber(isDefinedTelePower); + auto want = EventFwk::Want(); + want.SetAction(EXIT_STR_TELEPHONY_NOTIFY); + auto event = EventFwk::CommonEventData(want); + DataConnectionPowerImprovementManager::SetSavedCellularDataStatus(false); + dataConnectionPowerImprovementManager->strExitSubscriber_->OnReceiveEvent(event); + EXPECT_EQ(dataConnectionPowerImprovementManager->strExitSubscriber_->strAsyncCommonEvent_, nullptr); +} + +HWTEST_F(DataConnectionPowerImprovementManagerTest, DataConnectionPowerImprovementManager_07, + Function | MediumTest | Level1) +{ + EventFwk::MatchingSkills matchingSkills; + matchingSkills.AddEvent(EventFwk::CommonEventSupport::COMMON_EVENT_CALL_STATE_CHANGED); + EventFwk::CommonEventSubscribeInfo subscriberInfo(matchingSkills); + auto cellularDataHandler = CellularDataHandler(subscriberInfo, 0); + auto dataConnectionPowerImprovementManager = + std::make_shared(cellularDataHandler); + bool isDefinedTelePower = true; + dataConnectionPowerImprovementManager->StartEventSubscriber(isDefinedTelePower); + auto want = EventFwk::Want(); + want.SetAction(ENTER_STR_TELEPHONY_NOTIFY); + auto event = EventFwk::CommonEventData(want); + dataConnectionPowerImprovementManager->strExitSubscriber_->OnReceiveEvent(event); + EXPECT_EQ(dataConnectionPowerImprovementManager->strExitSubscriber_->strAsyncCommonEvent_, nullptr); +} + +HWTEST_F(DataConnectionPowerImprovementManagerTest, DataConnectionPowerImprovementManager_08, + Function | MediumTest | Level1) +{ + EventFwk::MatchingSkills matchingSkills; + matchingSkills.AddEvent(EventFwk::CommonEventSupport::COMMON_EVENT_CALL_STATE_CHANGED); + EventFwk::CommonEventSubscribeInfo subscriberInfo(matchingSkills); + auto cellularDataHandler = CellularDataHandler(subscriberInfo, 0); + auto dataConnectionPowerImprovementManager = + std::make_shared(cellularDataHandler); + dataConnectionPowerImprovementManager->statusChangeListener_ = + new (std::nothrow) DataConnectionPowerImprovementManager::SystemAbilityStatusChangeListener(nullptr, nullptr); + dataConnectionPowerImprovementManager->statusChangeListener_->OnAddSystemAbility(COMMON_EVENT_SERVICE_ID, + "test_device"); +} + +HWTEST_F(DataConnectionPowerImprovementManagerTest, DataConnectionPowerImprovementManager_09, + Function | MediumTest | Level1) +{ + EventFwk::MatchingSkills matchingSkills; + matchingSkills.AddEvent(EventFwk::CommonEventSupport::COMMON_EVENT_CALL_STATE_CHANGED); + EventFwk::CommonEventSubscribeInfo subscriberInfo(matchingSkills); + auto cellularDataHandler = CellularDataHandler(subscriberInfo, 0); + auto dataConnectionPowerImprovementManager = + std::make_shared(cellularDataHandler); + bool isDefinedTelePower = true; + dataConnectionPowerImprovementManager->StartEventSubscriber(isDefinedTelePower); + dataConnectionPowerImprovementManager->statusChangeListener_->OnRemoveSystemAbility(COMMON_EVENT_SERVICE_ID, + "test_device"); +} + +HWTEST_F(DataConnectionPowerImprovementManagerTest, DataConnectionPowerImprovementManager_10, + Function | MediumTest | Level1) +{ + EventFwk::MatchingSkills matchingSkills; + matchingSkills.AddEvent(EventFwk::CommonEventSupport::COMMON_EVENT_CALL_STATE_CHANGED); + EventFwk::CommonEventSubscribeInfo subscriberInfo(matchingSkills); + auto cellularDataHandler = CellularDataHandler(subscriberInfo, 0); + auto dataConnectionPowerImprovementManager = + std::make_shared(cellularDataHandler); + bool isDefinedTelePower = true; + dataConnectionPowerImprovementManager->StartEventSubscriber(isDefinedTelePower); + dataConnectionPowerImprovementManager->statusChangeListener_->OnRemoveSystemAbility(SCREENLOCK_SERVICE_ID, + "test_device"); +} + +HWTEST_F(DataConnectionPowerImprovementManagerTest, DataConnectionPowerImprovementManager_11, + Function | MediumTest | Level1) +{ + EventFwk::MatchingSkills matchingSkills; + matchingSkills.AddEvent(EventFwk::CommonEventSupport::COMMON_EVENT_CALL_STATE_CHANGED); + EventFwk::CommonEventSubscribeInfo subscriberInfo(matchingSkills); + auto cellularDataHandler = CellularDataHandler(subscriberInfo, 0); + auto dataConnectionPowerImprovementManager = + std::make_shared(cellularDataHandler); + dataConnectionPowerImprovementManager->SetSavedCellularDataStatus(false); + bool ret = dataConnectionPowerImprovementManager->GetSavedCellularDataStatus(); + EXPECT_EQ(ret, false); +} +HWTEST_F(DataConnectionPowerImprovementManagerTest, DataConnectionPowerImprovementManager_12, + Function | MediumTest | Level1) +{ + EventFwk::MatchingSkills matchingSkills; + matchingSkills.AddEvent(EventFwk::CommonEventSupport::COMMON_EVENT_CALL_STATE_CHANGED); + EventFwk::CommonEventSubscribeInfo subscriberInfo(matchingSkills); + auto cellularDataHandler = CellularDataHandler(subscriberInfo, 0); + auto dataConnectionPowerImprovementManager = + std::make_shared(cellularDataHandler); + bool isDefinedTelePower = true; + dataConnectionPowerImprovementManager->StartEventSubscriber(isDefinedTelePower); + auto want = EventFwk::Want(); + want.SetAction(ENTER_STR_TELEPHONY_NOTIFY); + auto event = EventFwk::CommonEventData(want); + dataConnectionPowerImprovementManager->strExitSubscriber_->OnReceiveEvent(event); + dataConnectionPowerImprovementManager->strExitSubscriber_->OnReceiveEvent(event); + EXPECT_EQ(dataConnectionPowerImprovementManager->strExitSubscriber_->strAsyncCommonEvent_, nullptr); +} + +HWTEST_F(DataConnectionPowerImprovementManagerTest, DataConnectionPowerImprovementManager_13, + Function | MediumTest | Level1) +{ + EventFwk::MatchingSkills matchingSkills; + matchingSkills.AddEvent(EventFwk::CommonEventSupport::COMMON_EVENT_CALL_STATE_CHANGED); + EventFwk::CommonEventSubscribeInfo subscriberInfo(matchingSkills); + auto cellularDataHandler = CellularDataHandler(subscriberInfo, 0); + auto dataConnectionPowerImprovementManager = + std::make_shared(cellularDataHandler); + bool isDefinedTelePower = true; + dataConnectionPowerImprovementManager->StartEventSubscriber(isDefinedTelePower); + auto want = EventFwk::Want(); + want.SetAction(EXIT_STR_TELEPHONY_NOTIFY); + auto event = EventFwk::CommonEventData(want); + dataConnectionPowerImprovementManager->strExitSubscriber_->OnReceiveEvent(event); + dataConnectionPowerImprovementManager->strExitSubscriber_->OnReceiveEvent(event); + EXPECT_EQ(dataConnectionPowerImprovementManager->strExitSubscriber_->strAsyncCommonEvent_, nullptr); +} + +HWTEST_F(DataConnectionPowerImprovementManagerTest, DataConnectionPowerImprovementManager_14, + Function | MediumTest | Level1) +{ + EventFwk::MatchingSkills matchingSkills; + matchingSkills.AddEvent(EventFwk::CommonEventSupport::COMMON_EVENT_CALL_STATE_CHANGED); + EventFwk::CommonEventSubscribeInfo subscriberInfo(matchingSkills); + auto cellularDataHandler = CellularDataHandler(subscriberInfo, 0); + auto dataConnectionPowerImprovementManager = + std::make_shared(cellularDataHandler); + bool isDefinedTelePower = true; + dataConnectionPowerImprovementManager->StartEventSubscriber(isDefinedTelePower); + auto want = EventFwk::Want(); + want.SetAction(TEL_EMC_RESCUE_MODE_STATUS); + auto event = EventFwk::CommonEventData(want); + dataConnectionPowerImprovementManager->strExitSubscriber_->OnReceiveEvent(event); + EXPECT_EQ(dataConnectionPowerImprovementManager->strExitSubscriber_->strAsyncCommonEvent_, nullptr); +} +} +} +// #endif \ No newline at end of file -- Gitee From 7b4c8fd1e000afbef404f207b4f8c3b6b19a474a Mon Sep 17 00:00:00 2001 From: chengwang Date: Fri, 22 Aug 2025 12:33:03 +0000 Subject: [PATCH 02/16] update test/cellular_data_power_improvement_manager_test.cpp. Signed-off-by: chengwang --- test/cellular_data_power_improvement_manager_test.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/test/cellular_data_power_improvement_manager_test.cpp b/test/cellular_data_power_improvement_manager_test.cpp index 6d6cf207..a2583adb 100644 --- a/test/cellular_data_power_improvement_manager_test.cpp +++ b/test/cellular_data_power_improvement_manager_test.cpp @@ -12,8 +12,6 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -#define private public -#define protected public #include "cellular_data_power_improvement_manager.h" @@ -274,4 +272,4 @@ HWTEST_F(DataConnectionPowerImprovementManagerTest, DataConnectionPowerImproveme } } } -// #endif \ No newline at end of file +// #endif -- Gitee From 25e19270e8a507c50562c7a94e82b4fb8673af2d Mon Sep 17 00:00:00 2001 From: chengwang Date: Fri, 22 Aug 2025 13:02:51 +0000 Subject: [PATCH 03/16] update test/cellular_data_power_improvement_manager_test.cpp. Signed-off-by: chengwang --- test/cellular_data_power_improvement_manager_test.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/test/cellular_data_power_improvement_manager_test.cpp b/test/cellular_data_power_improvement_manager_test.cpp index a2583adb..efdedfb2 100644 --- a/test/cellular_data_power_improvement_manager_test.cpp +++ b/test/cellular_data_power_improvement_manager_test.cpp @@ -13,6 +13,9 @@ * limitations under the License. */ +#define private public +#define protected public + #include "cellular_data_power_improvement_manager.h" #include "gtest/gtest.h" -- Gitee From f273fcae26fa2f1b963f258f68ffdca8a0a60e7e Mon Sep 17 00:00:00 2001 From: chengwang Date: Sat, 23 Aug 2025 05:15:06 +0000 Subject: [PATCH 04/16] update test/cellular_data_power_improvement_manager_test.cpp. Signed-off-by: chengwang --- test/cellular_data_power_improvement_manager_test.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/test/cellular_data_power_improvement_manager_test.cpp b/test/cellular_data_power_improvement_manager_test.cpp index efdedfb2..bb8d4dfa 100644 --- a/test/cellular_data_power_improvement_manager_test.cpp +++ b/test/cellular_data_power_improvement_manager_test.cpp @@ -19,6 +19,7 @@ #include "cellular_data_power_improvement_manager.h" #include "gtest/gtest.h" +#include "telephony_types.h" #include "common_event_support.h" #include "cellular_data_handler.h" -- Gitee From 8c6ab24dea92fa9226ab6a48f8789db03ddea476 Mon Sep 17 00:00:00 2001 From: chengwang Date: Sat, 23 Aug 2025 06:10:35 +0000 Subject: [PATCH 05/16] update test/cellular_data_power_improvement_manager_test.cpp. Signed-off-by: chengwang --- test/cellular_data_power_improvement_manager_test.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/cellular_data_power_improvement_manager_test.cpp b/test/cellular_data_power_improvement_manager_test.cpp index bb8d4dfa..36a9d067 100644 --- a/test/cellular_data_power_improvement_manager_test.cpp +++ b/test/cellular_data_power_improvement_manager_test.cpp @@ -269,7 +269,7 @@ HWTEST_F(DataConnectionPowerImprovementManagerTest, DataConnectionPowerImproveme bool isDefinedTelePower = true; dataConnectionPowerImprovementManager->StartEventSubscriber(isDefinedTelePower); auto want = EventFwk::Want(); - want.SetAction(TEL_EMC_RESCUE_MODE_STATUS); + want.SetAction(DYNAMIC_POWEROFF_MODEM_WITH_STR); auto event = EventFwk::CommonEventData(want); dataConnectionPowerImprovementManager->strExitSubscriber_->OnReceiveEvent(event); EXPECT_EQ(dataConnectionPowerImprovementManager->strExitSubscriber_->strAsyncCommonEvent_, nullptr); -- Gitee From 6820a6d8846604743e6f7c4adbf7f44af3149d61 Mon Sep 17 00:00:00 2001 From: chengwang Date: Sat, 23 Aug 2025 06:54:49 +0000 Subject: [PATCH 06/16] update test/cellular_data_power_improvement_manager_test.cpp. Signed-off-by: chengwang --- test/cellular_data_power_improvement_manager_test.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/test/cellular_data_power_improvement_manager_test.cpp b/test/cellular_data_power_improvement_manager_test.cpp index 36a9d067..31ca06fa 100644 --- a/test/cellular_data_power_improvement_manager_test.cpp +++ b/test/cellular_data_power_improvement_manager_test.cpp @@ -19,7 +19,6 @@ #include "cellular_data_power_improvement_manager.h" #include "gtest/gtest.h" -#include "telephony_types.h" #include "common_event_support.h" #include "cellular_data_handler.h" @@ -269,7 +268,7 @@ HWTEST_F(DataConnectionPowerImprovementManagerTest, DataConnectionPowerImproveme bool isDefinedTelePower = true; dataConnectionPowerImprovementManager->StartEventSubscriber(isDefinedTelePower); auto want = EventFwk::Want(); - want.SetAction(DYNAMIC_POWEROFF_MODEM_WITH_STR); + want.SetAction(EventFwk::CommonEventSupport::COMMON_EVENT_CALL_STATE_CHANGED); auto event = EventFwk::CommonEventData(want); dataConnectionPowerImprovementManager->strExitSubscriber_->OnReceiveEvent(event); EXPECT_EQ(dataConnectionPowerImprovementManager->strExitSubscriber_->strAsyncCommonEvent_, nullptr); -- Gitee From 45445a6eaee1a01bf1e1badfa5f821d24c6d6e55 Mon Sep 17 00:00:00 2001 From: chengwang Date: Sat, 23 Aug 2025 09:11:49 +0000 Subject: [PATCH 07/16] update services/include/cellular_data_power_improvement_manager.h. Signed-off-by: chengwang --- services/include/cellular_data_power_improvement_manager.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/services/include/cellular_data_power_improvement_manager.h b/services/include/cellular_data_power_improvement_manager.h index de1a3d97..2e6a4b7d 100644 --- a/services/include/cellular_data_power_improvement_manager.h +++ b/services/include/cellular_data_power_improvement_manager.h @@ -54,8 +54,8 @@ private: private: class SystemAbilityStatusChangeListener : public SystemAbilityStatusChangeStub { public: - SystemAbilityStatusChangeListener(std::shared_ptr subStrEnter, - std::shared_ptr subStrExit) + SystemAbilityStatusChangeListener(std::shared_ptr &subStrEnter, + std::shared_ptr &subStrExit) : strEnterSub_(subStrEnter), strExitSub_(subStrExit) {} ~SystemAbilityStatusChangeListener() = default; void OnAddSystemAbility(int32_t systemAbilityId, const std::string &deviceId) override; @@ -71,4 +71,4 @@ private: }; } // namespace Telephony } // namespace OHOS -#endif \ No newline at end of file +#endif -- Gitee From 9193d6e896516db39fbb0412cd632139d4752008 Mon Sep 17 00:00:00 2001 From: chengwang Date: Sat, 23 Aug 2025 09:14:35 +0000 Subject: [PATCH 08/16] update test/cellular_data_power_improvement_manager_test.cpp. Signed-off-by: chengwang --- test/cellular_data_power_improvement_manager_test.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/test/cellular_data_power_improvement_manager_test.cpp b/test/cellular_data_power_improvement_manager_test.cpp index 31ca06fa..fb9f8b7e 100644 --- a/test/cellular_data_power_improvement_manager_test.cpp +++ b/test/cellular_data_power_improvement_manager_test.cpp @@ -169,8 +169,10 @@ HWTEST_F(DataConnectionPowerImprovementManagerTest, DataConnectionPowerImproveme auto cellularDataHandler = CellularDataHandler(subscriberInfo, 0); auto dataConnectionPowerImprovementManager = std::make_shared(cellularDataHandler); + std::shared_ptr subStrEnter = nullptr; + std::shared_ptr subStrExit = nullptr; dataConnectionPowerImprovementManager->statusChangeListener_ = - new (std::nothrow) DataConnectionPowerImprovementManager::SystemAbilityStatusChangeListener(nullptr, nullptr); + new (std::nothrow) DataConnectionPowerImprovementManager::SystemAbilityStatusChangeListener(subStrEnter, subStrExit); dataConnectionPowerImprovementManager->statusChangeListener_->OnAddSystemAbility(COMMON_EVENT_SERVICE_ID, "test_device"); } -- Gitee From f18b5f3067aaf45645939f3cb796287dead914ef Mon Sep 17 00:00:00 2001 From: chengwang Date: Sat, 23 Aug 2025 11:11:54 +0000 Subject: [PATCH 09/16] update test/cellular_data_power_improvement_manager_test.cpp. Signed-off-by: chengwang --- test/cellular_data_power_improvement_manager_test.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/test/cellular_data_power_improvement_manager_test.cpp b/test/cellular_data_power_improvement_manager_test.cpp index fb9f8b7e..2baed583 100644 --- a/test/cellular_data_power_improvement_manager_test.cpp +++ b/test/cellular_data_power_improvement_manager_test.cpp @@ -13,6 +13,7 @@ * limitations under the License. */ +#ifdef BASE_POWER_IMPROVEMENT #define private public #define protected public @@ -277,4 +278,4 @@ HWTEST_F(DataConnectionPowerImprovementManagerTest, DataConnectionPowerImproveme } } } -// #endif +#endif -- Gitee From f113e3b32bc02f04c76d682a81538ed13a6dd13e Mon Sep 17 00:00:00 2001 From: chengwang Date: Sat, 23 Aug 2025 12:17:02 +0000 Subject: [PATCH 10/16] update test/cellular_data_power_improvement_manager_test.cpp. Signed-off-by: chengwang --- test/cellular_data_power_improvement_manager_test.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/cellular_data_power_improvement_manager_test.cpp b/test/cellular_data_power_improvement_manager_test.cpp index 2baed583..0cbc001e 100644 --- a/test/cellular_data_power_improvement_manager_test.cpp +++ b/test/cellular_data_power_improvement_manager_test.cpp @@ -172,8 +172,8 @@ HWTEST_F(DataConnectionPowerImprovementManagerTest, DataConnectionPowerImproveme std::make_shared(cellularDataHandler); std::shared_ptr subStrEnter = nullptr; std::shared_ptr subStrExit = nullptr; - dataConnectionPowerImprovementManager->statusChangeListener_ = - new (std::nothrow) DataConnectionPowerImprovementManager::SystemAbilityStatusChangeListener(subStrEnter, subStrExit); + dataConnectionPowerImprovementManager->statusChangeListener_ = new (std::nothrow) + DataConnectionPowerImprovementManager::SystemAbilityStatusChangeListener(subStrEnter, subStrExit); dataConnectionPowerImprovementManager->statusChangeListener_->OnAddSystemAbility(COMMON_EVENT_SERVICE_ID, "test_device"); } -- Gitee From f1e03532437d419ec970fe5d740f2ff49b119a7d Mon Sep 17 00:00:00 2001 From: chengwang Date: Sun, 24 Aug 2025 08:53:49 +0000 Subject: [PATCH 11/16] update test/cellular_data_power_improvement_manager_test.cpp. Signed-off-by: chengwang --- ...ar_data_power_improvement_manager_test.cpp | 146 ++++++++++++++++++ 1 file changed, 146 insertions(+) diff --git a/test/cellular_data_power_improvement_manager_test.cpp b/test/cellular_data_power_improvement_manager_test.cpp index 0cbc001e..e42e367e 100644 --- a/test/cellular_data_power_improvement_manager_test.cpp +++ b/test/cellular_data_power_improvement_manager_test.cpp @@ -276,6 +276,152 @@ HWTEST_F(DataConnectionPowerImprovementManagerTest, DataConnectionPowerImproveme dataConnectionPowerImprovementManager->strExitSubscriber_->OnReceiveEvent(event); EXPECT_EQ(dataConnectionPowerImprovementManager->strExitSubscriber_->strAsyncCommonEvent_, nullptr); } + +HWTEST_F(DataConnectionPowerImprovementManagerTest, DataConnectionPowerImprovementManager_15, + Function | MediumTest | Level1) +{ + EventFwk::MatchingSkills matchingSkills; + matchingSkills.AddEvent(EventFwk::CommonEventSupport::COMMON_EVENT_CALL_STATE_CHANGED); + EventFwk::CommonEventSubscribeInfo subscriberInfo(matchingSkills); + auto cellularDataHandler = CellularDataHandler(subscriberInfo, 0); + auto dataConnectionPowerImprovementManager = + std::make_shared(cellularDataHandler); + std::shared_ptr subStrEnter = nullptr; + std::shared_ptr subStrExit = nullptr; + dataConnectionPowerImprovementManager->statusChangeListener_ = new (std::nothrow) + DataConnectionPowerImprovementManager::SystemAbilityStatusChangeListener(subStrEnter, subStrExit); + dataConnectionPowerImprovementManager->statusChangeListener_->OnAddSystemAbility(EVENT_MANAGER_SERVICE_ID, + "test_device"); +} + +HWTEST_F(DataConnectionPowerImprovementManagerTest, DataConnectionPowerImprovementManager_16, + Function | MediumTest | Level1) +{ + EventFwk::MatchingSkills matchingSkills; + matchingSkills.AddEvent(EventFwk::CommonEventSupport::COMMON_EVENT_CALL_STATE_CHANGED); + EventFwk::CommonEventSubscribeInfo subscriberInfo(matchingSkills); + auto cellularDataHandler = CellularDataHandler(subscriberInfo, 0); + auto dataConnectionPowerImprovementManager = + std::make_shared(cellularDataHandler); + bool isDefinedTelePower = false; + dataConnectionPowerImprovementManager->StartEventSubscriber(isDefinedTelePower); + dataConnectionPowerImprovementManager->strEnterSubscriber_ = + std::make_shared(subscriberInfo, cellularDataHandler); + int32_t resultCode = 1; + std::string resultData = "aa"; + bool ordered = false; + bool sticky = true; + sptr token = nullptr; + dataConnectionPowerImprovementManager->strEnterSubscriber_->strAsyncCommonEvent_ = + std::make_shared(resultCode, resultData, ordered, sticky, token); + dataConnectionPowerImprovementManager->FinishPowerStrEnterEvent(); +} + +HWTEST_F(DataConnectionPowerImprovementManagerTest, DataConnectionPowerImprovementManager_17, + Function | MediumTest | Level1) +{ + EventFwk::MatchingSkills matchingSkills; + matchingSkills.AddEvent(EventFwk::CommonEventSupport::COMMON_EVENT_CALL_STATE_CHANGED); + EventFwk::CommonEventSubscribeInfo subscriberInfo(matchingSkills); + auto cellularDataHandler = CellularDataHandler(subscriberInfo, 0); + auto dataConnectionPowerImprovementManager = + std::make_shared(cellularDataHandler); + dataConnectionPowerImprovementManager->strEnterSubscriber_ = + std::make_shared(subscriberInfo, cellularDataHandler); + int32_t resultCode = 1; + std::string resultData = "aa"; + bool ordered = false; + bool sticky = true; + sptr token = nullptr; + dataConnectionPowerImprovementManager->strEnterSubscriber_->strAsyncCommonEvent_ = + std::make_shared(resultCode, resultData, ordered, sticky, token); + std::string action = ENTER_STR_TELEPHONY_NOTIFY; + dataConnectionPowerImprovementManager->strEnterSubscriber_->HandleEnterStrEvent(action); + dataConnectionPowerImprovementManager->strEnterSubscriber_->HandleEnterStrEvent(action); +} + +HWTEST_F(DataConnectionPowerImprovementManagerTest, DataConnectionPowerImprovementManager_18, + Function | MediumTest | Level1) +{ + EventFwk::MatchingSkills matchingSkills; + matchingSkills.AddEvent(EventFwk::CommonEventSupport::COMMON_EVENT_CALL_STATE_CHANGED); + EventFwk::CommonEventSubscribeInfo subscriberInfo(matchingSkills); + auto cellularDataHandler = CellularDataHandler(subscriberInfo, 0); + auto dataConnectionPowerImprovementManager = + std::make_shared(cellularDataHandler); + dataConnectionPowerImprovementManager->strExitSubscriber_ = + std::make_shared(subscriberInfo, cellularDataHandler); + int32_t resultCode = 1; + std::string resultData = "aa"; + bool ordered = false; + bool sticky = true; + sptr token = nullptr; + dataConnectionPowerImprovementManager->strExitSubscriber_->strAsyncCommonEvent_ = + std::make_shared(resultCode, resultData, ordered, sticky, token); + std::string action = EXIT_STR_TELEPHONY_NOTIFY; + dataConnectionPowerImprovementManager->strExitSubscriber_->HandleExitStrEvent(action); + dataConnectionPowerImprovementManager->strExitSubscriber_->HandleExitStrEvent(action); +} + +HWTEST_F(DataConnectionPowerImprovementManagerTest, DataConnectionPowerImprovementManager_19, + Function | MediumTest | Level1) +{ + EventFwk::MatchingSkills matchingSkills; + matchingSkills.AddEvent(EventFwk::CommonEventSupport::COMMON_EVENT_CALL_STATE_CHANGED); + EventFwk::CommonEventSubscribeInfo subscriberInfo(matchingSkills); + auto cellularDataHandler = CellularDataHandler(subscriberInfo, 0); + auto dataConnectionPowerImprovementManager = + std::make_shared(cellularDataHandler); + dataConnectionPowerImprovementManager->strEnterSubscriber_ = nullptr; + dataConnectionPowerImprovementManager->strExitSubscriber_ = nullptr; + dataConnectionPowerImprovementManager->StopEventSubscriber(); + EXPECT_EQ(dataConnectionPowerImprovementManager->strEnterSubscriber_, nullptr); + EXPECT_EQ(dataConnectionPowerImprovementManager->strExitSubscriber_, nullptr); +} + +HWTEST_F(DataConnectionPowerImprovementManagerTest, DataConnectionPowerImprovementManager_20, + Function | MediumTest | Level1) +{ + EventFwk::MatchingSkills matchingSkills; + matchingSkills.AddEvent(EventFwk::CommonEventSupport::COMMON_EVENT_CALL_STATE_CHANGED); + EventFwk::CommonEventSubscribeInfo subscriberInfo(matchingSkills); + auto cellularDataHandler = CellularDataHandler(subscriberInfo, 0); + auto dataConnectionPowerImprovementManager = + std::make_shared(cellularDataHandler); + std::shared_ptr subStrEnter = nullptr; + std::shared_ptr subStrExit = nullptr; + dataConnectionPowerImprovementManager->statusChangeListener_ = new (std::nothrow) + DataConnectionPowerImprovementManager::SystemAbilityStatusChangeListener(subStrEnter, subStrExit); + dataConnectionPowerImprovementManager->statusChangeListener_->OnRemoveSystemAbility(COMMON_EVENT_SERVICE_ID, + "test_device"); +} + +HWTEST_F(DataConnectionPowerImprovementManagerTest, DataConnectionPowerImprovementManager_21, + Function | MediumTest | Level1) +{ + EventFwk::MatchingSkills matchingSkills; + matchingSkills.AddEvent(EventFwk::CommonEventSupport::COMMON_EVENT_CALL_STATE_CHANGED); + EventFwk::CommonEventSubscribeInfo subscriberInfo(matchingSkills); + auto cellularDataHandler = CellularDataHandler(subscriberInfo, 0); + auto dataConnectionPowerImprovementManager = + std::make_shared(cellularDataHandler); + dataConnectionPowerImprovementManager->FinishPowerStrEnterEvent(); +} + +HWTEST_F(DataConnectionPowerImprovementManagerTest, DataConnectionPowerImprovementManager_22, + Function | MediumTest | Level1) +{ + EventFwk::MatchingSkills matchingSkills; + matchingSkills.AddEvent(EventFwk::CommonEventSupport::COMMON_EVENT_CALL_STATE_CHANGED); + EventFwk::CommonEventSubscribeInfo subscriberInfo(matchingSkills); + auto cellularDataHandler = CellularDataHandler(subscriberInfo, 0); + auto dataConnectionPowerImprovementManager = + std::make_shared(cellularDataHandler); + dataConnectionPowerImprovementManager->strEnterSubscriber_ = + std::make_shared(subscriberInfo, cellularDataHandler); + dataConnectionPowerImprovementManager->strEnterSubscriber_->strAsyncCommonEvent_ = nullptr; + dataConnectionPowerImprovementManager->FinishPowerStrEnterEvent(); +} } } #endif -- Gitee From 750d55335adb9bc77bb2e25b46c8b9a71cc7f2bc Mon Sep 17 00:00:00 2001 From: chengwang Date: Sun, 24 Aug 2025 08:55:43 +0000 Subject: [PATCH 12/16] update frameworks/js/napi/src/cellular_data_handler.cpp. Signed-off-by: chengwang --- frameworks/js/napi/src/cellular_data_handler.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/frameworks/js/napi/src/cellular_data_handler.cpp b/frameworks/js/napi/src/cellular_data_handler.cpp index 5faba673..b0db9af6 100644 --- a/frameworks/js/napi/src/cellular_data_handler.cpp +++ b/frameworks/js/napi/src/cellular_data_handler.cpp @@ -79,8 +79,7 @@ void CellularDataHandler::Init() #ifdef BASE_POWER_IMPROVEMENT dataConnectionPowerImprovementManager_ = std::make_shared(*this); bool isDefinedTelePower = system::GetBoolParameter("const.vendor.ril.power.feature_tele_power", false); - bool ret = dataConnectionPowerImprovementManager_->StartEventSubscriber(isDefinedTelePower); - TELEPHONY_LOGI("Subscribe ordered broadcast succ ret = %{public}d", ret); + dataConnectionPowerImprovementManager_->StartEventSubscriber(isDefinedTelePower); #endif } -- Gitee From f68d0b5ef1b0d885e957b99efb86b49652614ba6 Mon Sep 17 00:00:00 2001 From: chengwang Date: Sun, 24 Aug 2025 08:57:04 +0000 Subject: [PATCH 13/16] update services/include/cellular_data_power_improvement_manager.h. Signed-off-by: chengwang --- services/include/cellular_data_power_improvement_manager.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/include/cellular_data_power_improvement_manager.h b/services/include/cellular_data_power_improvement_manager.h index 2e6a4b7d..b9552dde 100644 --- a/services/include/cellular_data_power_improvement_manager.h +++ b/services/include/cellular_data_power_improvement_manager.h @@ -40,7 +40,7 @@ class DataConnectionPowerImprovementManager { public: DataConnectionPowerImprovementManager(CellularDataHandler &handler) : strCellularDataHandler_(handler) {} ~DataConnectionPowerImprovementManager() = default; - bool StartEventSubscriber(bool isDefinedTelePower); + void StartEventSubscriber(bool isDefinedTelePower); void StopEventSubscriber(); static bool GetSavedCellularDataStatus(); static void SetSavedCellularDataStatus(bool value); -- Gitee From da3f6337394b11fa8d77b1001f2c79ad83950ac5 Mon Sep 17 00:00:00 2001 From: chengwang Date: Sun, 24 Aug 2025 09:00:40 +0000 Subject: [PATCH 14/16] update services/src/cellular_data_power_improvement_manager.cpp. Signed-off-by: chengwang --- ...ellular_data_power_improvement_manager.cpp | 22 +++++++------------ 1 file changed, 8 insertions(+), 14 deletions(-) diff --git a/services/src/cellular_data_power_improvement_manager.cpp b/services/src/cellular_data_power_improvement_manager.cpp index ae3358f1..6117a1dd 100644 --- a/services/src/cellular_data_power_improvement_manager.cpp +++ b/services/src/cellular_data_power_improvement_manager.cpp @@ -23,25 +23,20 @@ namespace OHOS { namespace Telephony { constexpr const char *PERMISSION_STARTUP_COMPLETED = "ohos.permission.RECEIVER_STARTUP_COMPLETED"; std::string lastMsg = ""; -bool DataConnectionPowerImprovementManager::StartEventSubscriber(bool isDefinedTelePower) +void DataConnectionPowerImprovementManager::StartEventSubscriber(bool isDefinedTelePower) { if (!isDefinedTelePower) { TELEPHONY_LOGI("feature_tele_power not define"); - return false; + return; } strEnterSubscriber_ = CreateCommonSubscriber(ENTER_STR_TELEPHONY_NOTIFY, CommonEventPriority::FIRST_PRIORITY); strExitSubscriber_ = CreateCommonSubscriber(EXIT_STR_TELEPHONY_NOTIFY, CommonEventPriority::THIRD_PRIORITY); statusChangeListener_ = sptr::MakeSptr(strEnterSubscriber_, strExitSubscriber_); auto samgrProxy = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager(); - if (samgrProxy == nullptr) { - TELEPHONY_LOGE("StartEventSubscriber samgrProxy is nullptr"); - return false; - } - if (samgrProxy->SubscribeSystemAbility(COMMON_EVENT_SERVICE_ID, statusChangeListener_) != TELEPHONY_ERR_SUCCESS) { - TELEPHONY_LOGE("SubscribeSystemAbility execute failed"); - return false; - } - return true; + if (samgrProxy != nullptr) { + int32_t ret = samgrProxy->SubscribeSystemAbility(COMMON_EVENT_SERVICE_ID, statusChangeListener_); + TELEPHONY_LOGI("SubscribeSystemAbility execute ret = %{public}d", ret); + } } std::shared_ptr DataConnectionPowerImprovementManager::CreateCommonSubscriber( @@ -134,6 +129,7 @@ void DataConnectionPowerImprovementManager::SetSavedCellularDataStatus(bool valu void DataConnectionPowerSaveModeSubscriber::OnReceiveEvent(const EventFwk::CommonEventData &data) { std::string action = data.GetWant().GetAction(); + strAsyncCommonEvent_ = this->GoAsyncCommonEvent(); if (action == ENTER_STR_TELEPHONY_NOTIFY) { TELEPHONY_LOGI("Enter str mode"); HandleEnterStrEvent(action); @@ -147,7 +143,6 @@ void DataConnectionPowerSaveModeSubscriber::OnReceiveEvent(const EventFwk::Commo void DataConnectionPowerSaveModeSubscriber::HandleEnterStrEvent(std::string &action) { - strAsyncCommonEvent_ = this->GoAsyncCommonEvent(); // except same msg if (action != lastMsg) { bool cellularDataStatus = true; @@ -168,7 +163,6 @@ void DataConnectionPowerSaveModeSubscriber::HandleEnterStrEvent(std::string &act void DataConnectionPowerSaveModeSubscriber::HandleExitStrEvent(std::string &action) { - strAsyncCommonEvent_ = this->GoAsyncCommonEvent(); if (action != lastMsg) { // reply common event firt due to activate cellular too slow if (strAsyncCommonEvent_ != nullptr) { @@ -186,4 +180,4 @@ void DataConnectionPowerSaveModeSubscriber::HandleExitStrEvent(std::string &acti lastMsg = EXIT_STR_TELEPHONY_NOTIFY; } } // namespace Telephony -} // namespace OHOS \ No newline at end of file +} // namespace OHOS -- Gitee From ddba7d29f4446fdd9d60e735ddafe216414fddb3 Mon Sep 17 00:00:00 2001 From: chengwang Date: Sun, 24 Aug 2025 09:51:15 +0000 Subject: [PATCH 15/16] update services/src/cellular_data_power_improvement_manager.cpp. Signed-off-by: chengwang --- services/src/cellular_data_power_improvement_manager.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/src/cellular_data_power_improvement_manager.cpp b/services/src/cellular_data_power_improvement_manager.cpp index 6117a1dd..8f86550d 100644 --- a/services/src/cellular_data_power_improvement_manager.cpp +++ b/services/src/cellular_data_power_improvement_manager.cpp @@ -36,7 +36,7 @@ void DataConnectionPowerImprovementManager::StartEventSubscriber(bool isDefinedT if (samgrProxy != nullptr) { int32_t ret = samgrProxy->SubscribeSystemAbility(COMMON_EVENT_SERVICE_ID, statusChangeListener_); TELEPHONY_LOGI("SubscribeSystemAbility execute ret = %{public}d", ret); - } + } } std::shared_ptr DataConnectionPowerImprovementManager::CreateCommonSubscriber( -- Gitee From a38a0ccfc290cf15d1609baa4c15e855ea2e7c6d Mon Sep 17 00:00:00 2001 From: chengwang Date: Sun, 24 Aug 2025 09:57:54 +0000 Subject: [PATCH 16/16] update frameworks/js/napi/src/cellular_data_handler.cpp. Signed-off-by: chengwang --- frameworks/js/napi/src/cellular_data_handler.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/frameworks/js/napi/src/cellular_data_handler.cpp b/frameworks/js/napi/src/cellular_data_handler.cpp index b0db9af6..a03f9902 100644 --- a/frameworks/js/napi/src/cellular_data_handler.cpp +++ b/frameworks/js/napi/src/cellular_data_handler.cpp @@ -38,6 +38,9 @@ #include "ipc_skeleton.h" #include "connection_retry_policy.h" #include "pdp_profile_data.h" +#ifdef BASE_POWER_IMPROVEMENT +#include "cellular_data_power_improvement_manager.h" +#endif namespace OHOS { namespace Telephony { using namespace AppExecFwk; -- Gitee