From 2b212a9c16c062b14f727b92af94b126a88da130 Mon Sep 17 00:00:00 2001 From: mjh Date: Wed, 20 Aug 2025 17:41:42 +0800 Subject: [PATCH] opt settings_data_manager Signed-off-by: mjh --- .../src/data_sync/task_state_manager.cpp | 2 + .../src/sync_rule/cloud_status.cpp | 2 +- .../src/sync_rule/network_set_manager.cpp | 7 -- .../src/sync_rule/settings_data_manager.cpp | 65 +++++++++------ .../settings_data_manager.h | 9 +- .../src/sync_rule/user_status_listener.cpp | 2 + .../data_sync/sync_state_manager_test.cpp | 6 +- .../mock/data_ability_observer_stub.cpp | 4 +- .../unittests/cloudsync_sa/sync_rule/BUILD.gn | 1 + .../sync_rule/settings_data_manager_test.cpp | 82 ++++++++++++++++--- utils/system/src/dfsu_access_token_helper.cpp | 2 +- 11 files changed, 128 insertions(+), 54 deletions(-) diff --git a/frameworks/native/cloud_file_kit_inner/src/data_sync/task_state_manager.cpp b/frameworks/native/cloud_file_kit_inner/src/data_sync/task_state_manager.cpp index 00c616c21..032837d80 100644 --- a/frameworks/native/cloud_file_kit_inner/src/data_sync/task_state_manager.cpp +++ b/frameworks/native/cloud_file_kit_inner/src/data_sync/task_state_manager.cpp @@ -19,6 +19,7 @@ #include "iservice_registry.h" #include "mem_mgr_client.h" #include "parameters.h" +#include "settings_data_manager.h" #include "system_ability_definition.h" #include "utils_log.h" @@ -150,6 +151,7 @@ void TaskStateManager::DelayUnloadTask(bool needSetCritical) LOGE("remove system ability failed"); return; } + SettingsDataManager::UnregisterObserver(); }; CancelUnloadTask(); diff --git a/frameworks/native/cloud_file_kit_inner/src/sync_rule/cloud_status.cpp b/frameworks/native/cloud_file_kit_inner/src/sync_rule/cloud_status.cpp index 1226a50bf..65c7a2f72 100644 --- a/frameworks/native/cloud_file_kit_inner/src/sync_rule/cloud_status.cpp +++ b/frameworks/native/cloud_file_kit_inner/src/sync_rule/cloud_status.cpp @@ -17,8 +17,8 @@ #include "cloud_file_kit.h" #include "dfs_error.h" -#include "utils_log.h" #include "settings_data_manager.h" +#include "utils_log.h" namespace OHOS::FileManagement::CloudSync { int32_t CloudStatus::GetCurrentCloudInfo(const std::string &bundleName, const int32_t userId) diff --git a/frameworks/native/cloud_file_kit_inner/src/sync_rule/network_set_manager.cpp b/frameworks/native/cloud_file_kit_inner/src/sync_rule/network_set_manager.cpp index 1c297a963..138f326ca 100644 --- a/frameworks/native/cloud_file_kit_inner/src/sync_rule/network_set_manager.cpp +++ b/frameworks/native/cloud_file_kit_inner/src/sync_rule/network_set_manager.cpp @@ -283,14 +283,7 @@ void NetworkSetManager::InitNetworkSetManager(const std::string &bundleName, con LOGI("InitNetworkSetManager bundleName: %{public}s", bundleName.c_str()); if (bundleName == GALLERY_BUNDLE_NAME) { RegisterObserver(bundleName, userId, CELLULARCONNECT); - RegisterObserver(bundleName, userId, NETCONNECT); GetCellularConnect(bundleName, userId); - GetNetConnect(bundleName, userId); - } else if (bundleName == HDC_BUNDLE_NAME) { - SettingsDataManager::GetNetworkConnectionStatus(); - SettingsDataManager::GetMobileDataStatus(); - } else { - LOGE("InitNetworkSetManager bundleName is illegals"); } } diff --git a/frameworks/native/cloud_file_kit_inner/src/sync_rule/settings_data_manager.cpp b/frameworks/native/cloud_file_kit_inner/src/sync_rule/settings_data_manager.cpp index b1f63bad1..ca8f9e651 100644 --- a/frameworks/native/cloud_file_kit_inner/src/sync_rule/settings_data_manager.cpp +++ b/frameworks/native/cloud_file_kit_inner/src/sync_rule/settings_data_manager.cpp @@ -40,12 +40,18 @@ static const int32_t LOCAL_SPACE_DAYS_DEFAULT = 30; void SettingsDataManager::InitSettingsDataManager() { - LOGI("InitSettingsDataManager"); - RegisterObserver(SYNC_SWITCH_KEY); - RegisterObserver(NETWORK_CONNECTION_KEY); - RegisterObserver(MOBILE_DATA_SYNC_KEY); - RegisterObserver(LOCAL_SPACE_FREE_KEY); - RegisterObserver(LOCAL_SPACE_DAYS_KEY); + LOGI("InitSettingsDataManager start"); + SyncSwitchObserver_ = sptr(new (std::nothrow) SettingsDataObserver(SYNC_SWITCH_KEY)); + NetworkConnectionObserver_ = + sptr(new (std::nothrow) SettingsDataObserver(NETWORK_CONNECTION_KEY)); + MobileDataSyncObserver_ = sptr(new (std::nothrow) SettingsDataObserver(MOBILE_DATA_SYNC_KEY)); + LocalSpaceFreeObserver_ = sptr(new (std::nothrow) SettingsDataObserver(LOCAL_SPACE_FREE_KEY)); + LocalSpaceDaysObserver_ = sptr(new (std::nothrow) SettingsDataObserver(LOCAL_SPACE_DAYS_KEY)); + RegisterObserver(SYNC_SWITCH_KEY, SyncSwitchObserver_); + RegisterObserver(NETWORK_CONNECTION_KEY, NetworkConnectionObserver_); + RegisterObserver(MOBILE_DATA_SYNC_KEY, MobileDataSyncObserver_); + RegisterObserver(LOCAL_SPACE_FREE_KEY, LocalSpaceFreeObserver_); + RegisterObserver(LOCAL_SPACE_DAYS_KEY, LocalSpaceDaysObserver_); QuerySwitchStatus(); QueryNetworkConnectionStatus(); QueryLocalSpaceFreeStatus(); @@ -53,6 +59,21 @@ void SettingsDataManager::InitSettingsDataManager() QueryMobileDataStatus(); } +void SettingsDataManager::UnregisterObserver() +{ + LOGI("UnregisterObserver start"); + UnregisterObserver(SYNC_SWITCH_KEY, SyncSwitchObserver_); + UnregisterObserver(NETWORK_CONNECTION_KEY, NetworkConnectionObserver_); + UnregisterObserver(MOBILE_DATA_SYNC_KEY, MobileDataSyncObserver_); + UnregisterObserver(LOCAL_SPACE_FREE_KEY, LocalSpaceFreeObserver_); + UnregisterObserver(LOCAL_SPACE_DAYS_KEY, LocalSpaceDaysObserver_); + SyncSwitchObserver_ = nullptr; + NetworkConnectionObserver_ = nullptr; + MobileDataSyncObserver_ = nullptr; + LocalSpaceFreeObserver_ = nullptr; + LocalSpaceDaysObserver_ = nullptr; +} + int32_t SettingsDataManager::QuerySwitchStatus() { std::string value; @@ -160,7 +181,7 @@ bool SettingsDataManager::GetNetworkConnectionStatus() std::string value; if (!settingsDataMap_.Find(NETWORK_CONNECTION_KEY, value)) { if (QueryNetworkConnectionStatus() != E_OK) { - return true; + return false; } } @@ -258,30 +279,17 @@ int32_t SettingsDataManager::QueryParamInSettingsData(const std::string &key, st return E_RDB; } - LOGI("Query success, value: %{public}s", value.c_str()); + LOGI("Query key: %{public}s success, value: %{public}s", key.c_str(), value.c_str()); return E_OK; } -void SettingsDataManager::RegisterObserver(const std::string &key) +void SettingsDataManager::RegisterObserver(const std::string &key, sptr dataObserver) { - LOGD("register key: %{public}s", key.c_str()); - DataShare::CreateOptions options; - options.enabled_ = true; - auto dataShareHelper = DataShare::DataShareHelper::Creator(SETTING_DATA_QUERY_URI, options); - if (dataShareHelper == nullptr) { - LOGE("dataShareHelper == nullptr"); + if (dataObserver == nullptr) { + LOGW("registerObserver key: %{public}s dataObserver is nullptr", key.c_str()); return; } - sptr dataObserver(new (std::nothrow) SettingsDataObserver(key)); - Uri observerUri(SETTING_DATA_COMMON_URI + "&key=" + key); - dataShareHelper->RegisterObserver(observerUri, dataObserver); - dataShareHelper->Release(); - LOGI("Register SettingsDataObserver key: %{public}s finish", key.c_str()); -} -void SettingsDataManager::RegisterObserver(const std::string &key, sptr dataObserver) -{ - LOGD("register key: %{public}s", key.c_str()); DataShare::CreateOptions options; options.enabled_ = true; auto dataShareHelper = DataShare::DataShareHelper::Creator(SETTING_DATA_QUERY_URI, options); @@ -296,8 +304,13 @@ void SettingsDataManager::RegisterObserver(const std::string &key, sptr dataObserver) { + if (dataObserver == nullptr) { + LOGW("unregisterObserver key: %{public}s dataObserver is nullptr", key.c_str()); + return; + } + DataShare::CreateOptions options; options.enabled_ = true; auto dataShareHelper = DataShare::DataShareHelper::Creator(SETTING_DATA_QUERY_URI, options); @@ -305,7 +318,7 @@ void SettingsDataManager::UnregisterObserver(const std::string &key) LOGE("dataShareHelper == nullptr"); return; } - sptr dataObserver(new (std::nothrow) SettingsDataObserver(key)); + Uri observerUri(SETTING_DATA_COMMON_URI + "&key=" + key); dataShareHelper->UnregisterObserver(observerUri, dataObserver); dataShareHelper->Release(); diff --git a/interfaces/inner_api/native/cloud_file_kit_inner/settings_data_manager.h b/interfaces/inner_api/native/cloud_file_kit_inner/settings_data_manager.h index e40783570..da11ea8b9 100644 --- a/interfaces/inner_api/native/cloud_file_kit_inner/settings_data_manager.h +++ b/interfaces/inner_api/native/cloud_file_kit_inner/settings_data_manager.h @@ -55,14 +55,19 @@ public: static int32_t GetLocalSpaceFreeStatus(); static int32_t GetLocalSpaceFreeDays(); - static void RegisterObserver(const std::string &key); static void RegisterObserver(const std::string &key, sptr dataObserver); + static void UnregisterObserver(); private: static int32_t QueryParamInSettingsData(const std::string &key, std::string &value); - static void UnregisterObserver(const std::string &key); + static void UnregisterObserver(const std::string &key, sptr dataObserver); static inline SafeMap settingsDataMap_; + static inline sptr SyncSwitchObserver_ = nullptr; + static inline sptr NetworkConnectionObserver_ = nullptr; + static inline sptr MobileDataSyncObserver_ = nullptr; + static inline sptr LocalSpaceFreeObserver_ = nullptr; + static inline sptr LocalSpaceDaysObserver_ = nullptr; }; } // OHOS diff --git a/services/cloudsyncservice/src/sync_rule/user_status_listener.cpp b/services/cloudsyncservice/src/sync_rule/user_status_listener.cpp index af36303b6..50c564d88 100644 --- a/services/cloudsyncservice/src/sync_rule/user_status_listener.cpp +++ b/services/cloudsyncservice/src/sync_rule/user_status_listener.cpp @@ -19,6 +19,7 @@ #include "common_event_support.h" #include "iservice_registry.h" #include "parameters.h" +#include "settings_data_manager.h" #include "system_ability_definition.h" #include "task_state_manager.h" #include "utils_log.h" @@ -113,6 +114,7 @@ void UserStatusListener::DoUnloadSA() LOGE("remove system ability failed"); return; } + SettingsDataManager::UnregisterObserver(); LOGI("unload cloudfileservice end"); } } // namespace OHOS::FileManagement::CloudSync \ No newline at end of file diff --git a/test/unittests/cloud_file_kit_inner/data_sync/sync_state_manager_test.cpp b/test/unittests/cloud_file_kit_inner/data_sync/sync_state_manager_test.cpp index 8b36e62b0..d42efa4cd 100644 --- a/test/unittests/cloud_file_kit_inner/data_sync/sync_state_manager_test.cpp +++ b/test/unittests/cloud_file_kit_inner/data_sync/sync_state_manager_test.cpp @@ -12,11 +12,13 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + +#include "sync_state_manager.h" + #include #include -#include "sync_state_manager.h" -#include "system_mock.h" #include "data_sync_const.h" +#include "system_mock.h" namespace OHOS::FileManagement::CloudSync::Test { using namespace testing; diff --git a/test/unittests/cloudsync_sa/mock/data_ability_observer_stub.cpp b/test/unittests/cloudsync_sa/mock/data_ability_observer_stub.cpp index 6a7b78f9d..67138d96c 100644 --- a/test/unittests/cloudsync_sa/mock/data_ability_observer_stub.cpp +++ b/test/unittests/cloudsync_sa/mock/data_ability_observer_stub.cpp @@ -15,12 +15,12 @@ #include "data_ability_observer_stub.h" +#include "common_utils.h" +#include "dataobs_mgr_changeinfo.h" #include "hilog_tag_wrapper.h" #include "hilog_wrapper.h" #include "ipc_skeleton.h" -#include "common_utils.h" #include "string_ex.h" -#include "dataobs_mgr_changeinfo.h" namespace OHOS { namespace AAFwk { diff --git a/test/unittests/cloudsync_sa/sync_rule/BUILD.gn b/test/unittests/cloudsync_sa/sync_rule/BUILD.gn index b3b3e56cd..c1ffceb09 100644 --- a/test/unittests/cloudsync_sa/sync_rule/BUILD.gn +++ b/test/unittests/cloudsync_sa/sync_rule/BUILD.gn @@ -490,6 +490,7 @@ ohos_unittest("user_status_listener_test") { external_deps = [ "ability_base:want", + "ability_runtime:dataobs_manager", "c_utils:utils", "common_event_service:cesfwk_innerkits", "dsoftbus:softbus_client", diff --git a/test/unittests/cloudsync_sa/sync_rule/settings_data_manager_test.cpp b/test/unittests/cloudsync_sa/sync_rule/settings_data_manager_test.cpp index 6454db279..34d9218fe 100644 --- a/test/unittests/cloudsync_sa/sync_rule/settings_data_manager_test.cpp +++ b/test/unittests/cloudsync_sa/sync_rule/settings_data_manager_test.cpp @@ -70,6 +70,32 @@ void SettingsDataManagerTest::SetUp(void) void SettingsDataManagerTest::TearDown(void) {} +HWTEST_F(SettingsDataManagerTest, UnregisterObserverTest000, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "UnregisterObserverTest000 Start"; + DataShareResultSetMock::proxy_ = nullptr; + SettingsDataManager::UnregisterObserver(); + EXPECT_EQ(SettingsDataManager::SyncSwitchObserver_, nullptr); + EXPECT_EQ(SettingsDataManager::NetworkConnectionObserver_, nullptr); + EXPECT_EQ(SettingsDataManager::MobileDataSyncObserver_, nullptr); + EXPECT_EQ(SettingsDataManager::LocalSpaceFreeObserver_, nullptr); + EXPECT_EQ(SettingsDataManager::LocalSpaceDaysObserver_, nullptr); + GTEST_LOG_(INFO) << "UnregisterObserverTest000 End"; +} + +HWTEST_F(SettingsDataManagerTest, InitSettingsDataManagerTest001, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "InitSettingsDataManagerTest001 Start"; + DataShareResultSetMock::proxy_ = nullptr; + SettingsDataManager::InitSettingsDataManager(); + EXPECT_NE(SettingsDataManager::SyncSwitchObserver_, nullptr); + EXPECT_NE(SettingsDataManager::NetworkConnectionObserver_, nullptr); + EXPECT_NE(SettingsDataManager::MobileDataSyncObserver_, nullptr); + EXPECT_NE(SettingsDataManager::LocalSpaceFreeObserver_, nullptr); + EXPECT_NE(SettingsDataManager::LocalSpaceDaysObserver_, nullptr); + GTEST_LOG_(INFO) << "InitSettingsDataManagerTest001 End"; +} + HWTEST_F(SettingsDataManagerTest, QueryParamInSettingsDataTest001, TestSize.Level1) { GTEST_LOG_(INFO) << "QueryParamInSettingsDataTest001 Start"; @@ -355,7 +381,7 @@ HWTEST_F(SettingsDataManagerTest, GetNetworkConnectionStatusTest001, TestSize.Le EXPECT_CALL(*dataShareHelperMock_, Creator(_, _, _)).WillOnce(Return(nullptr)); EXPECT_CALL(*dataShareHelperMock_, Query(_, _, _, _)).Times(0); bool status = SettingsDataManager::GetNetworkConnectionStatus(); - EXPECT_EQ(status, true); + EXPECT_EQ(status, false); GTEST_LOG_(INFO) << "GetNetworkConnectionStatusTest001 End"; } @@ -508,8 +534,9 @@ HWTEST_F(SettingsDataManagerTest, RegisterObserverTest001, TestSize.Level1) GTEST_LOG_(INFO) << "RegisterObserverTest001 Start"; EXPECT_CALL(*dataShareHelperMock_, Creator(_, _, _)).WillOnce(Return(nullptr)); EXPECT_CALL(*dataShareHelperMock_, Query(_, _, _, _)).Times(0); - SettingsDataManager::RegisterObserver(""); - EXPECT_TRUE(true); + sptr dataObserver = + sptr(new (std::nothrow) SettingsDataObserver("")); + SettingsDataManager::RegisterObserver("", dataObserver); GTEST_LOG_(INFO) << "RegisterObserverTest001 End"; } @@ -520,8 +547,9 @@ HWTEST_F(SettingsDataManagerTest, RegisterObserverTest002, TestSize.Level1) std::shared_ptr dataShareHelper = std::make_shared(); EXPECT_CALL(*dataShareHelperMock_, Creator(_, _, _)).WillOnce(Return(dataShareHelper)); EXPECT_CALL(*dataShareHelperMock_, Query(_, _, _, _)).Times(0); - SettingsDataManager::RegisterObserver(""); - EXPECT_TRUE(true); + sptr dataObserver = + sptr(new (std::nothrow) SettingsDataObserver("")); + SettingsDataManager::RegisterObserver("", dataObserver); GTEST_LOG_(INFO) << "RegisterObserverTest002 End"; } @@ -531,8 +559,9 @@ HWTEST_F(SettingsDataManagerTest, RegisterObserverTest003, TestSize.Level1) GTEST_LOG_(INFO) << "RegisterObserverTest003 Start"; EXPECT_CALL(*dataShareHelperMock_, Creator(_, _, _)).WillOnce(Return(nullptr)); EXPECT_CALL(*dataShareHelperMock_, Query(_, _, _, _)).Times(0); - SettingsDataManager::RegisterObserver("", nullptr); - EXPECT_TRUE(true); + sptr dataObserver = + sptr(new (std::nothrow) SettingsDataObserver("")); + SettingsDataManager::RegisterObserver("", dataObserver); GTEST_LOG_(INFO) << "RegisterObserverTest003 End"; } @@ -543,19 +572,33 @@ HWTEST_F(SettingsDataManagerTest, RegisterObserverTest004, TestSize.Level1) std::shared_ptr dataShareHelper = std::make_shared(); EXPECT_CALL(*dataShareHelperMock_, Creator(_, _, _)).WillOnce(Return(dataShareHelper)); EXPECT_CALL(*dataShareHelperMock_, Query(_, _, _, _)).Times(0); - SettingsDataManager::RegisterObserver("", nullptr); - EXPECT_TRUE(true); + sptr dataObserver = + sptr(new (std::nothrow) SettingsDataObserver("")); + SettingsDataManager::RegisterObserver("", dataObserver); GTEST_LOG_(INFO) << "RegisterObserverTest004 End"; } +HWTEST_F(SettingsDataManagerTest, RegisterObserverTest005, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "RegisterObserverTest005 Start"; + std::shared_ptr dataShareHelper = std::make_shared(); + EXPECT_CALL(*dataShareHelperMock_, Creator(_, _, _)).Times(0); + EXPECT_CALL(*dataShareHelperMock_, Query(_, _, _, _)).Times(0); + sptr dataObserver = nullptr; + SettingsDataManager::RegisterObserver("", dataObserver); + + GTEST_LOG_(INFO) << "RegisterObserverTest005 End"; +} + HWTEST_F(SettingsDataManagerTest, UnregisterObserverTest001, TestSize.Level1) { GTEST_LOG_(INFO) << "UnregisterObserverTest001 Start"; EXPECT_CALL(*dataShareHelperMock_, Creator(_, _, _)).WillOnce(Return(nullptr)); EXPECT_CALL(*dataShareHelperMock_, Query(_, _, _, _)).Times(0); - SettingsDataManager::UnregisterObserver(""); - EXPECT_TRUE(true); + sptr dataObserver = + sptr(new (std::nothrow) SettingsDataObserver("")); + SettingsDataManager::UnregisterObserver("", dataObserver); GTEST_LOG_(INFO) << "UnregisterObserverTest001 End"; } @@ -566,12 +609,25 @@ HWTEST_F(SettingsDataManagerTest, UnregisterObserverTest002, TestSize.Level1) std::shared_ptr dataShareHelper = std::make_shared(); EXPECT_CALL(*dataShareHelperMock_, Creator(_, _, _)).WillOnce(Return(dataShareHelper)); EXPECT_CALL(*dataShareHelperMock_, Query(_, _, _, _)).Times(0); - SettingsDataManager::UnregisterObserver(""); - EXPECT_TRUE(true); + sptr dataObserver = + sptr(new (std::nothrow) SettingsDataObserver("")); + SettingsDataManager::UnregisterObserver("", dataObserver); GTEST_LOG_(INFO) << "UnregisterObserverTest002 End"; } +HWTEST_F(SettingsDataManagerTest, UnregisterObserverTest003, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "UnregisterObserverTest003 Start"; + std::shared_ptr dataShareHelper = std::make_shared(); + EXPECT_CALL(*dataShareHelperMock_, Creator(_, _, _)).Times(0); + EXPECT_CALL(*dataShareHelperMock_, Query(_, _, _, _)).Times(0); + sptr dataObserver = nullptr; + SettingsDataManager::UnregisterObserver("", dataObserver); + + GTEST_LOG_(INFO) << "UnregisterObserverTest003 End"; +} + HWTEST_F(SettingsDataManagerTest, QueryTest001, TestSize.Level1) { GTEST_LOG_(INFO) << "QueryTest001 Start"; diff --git a/utils/system/src/dfsu_access_token_helper.cpp b/utils/system/src/dfsu_access_token_helper.cpp index a8209de3a..cbccb9ff3 100644 --- a/utils/system/src/dfsu_access_token_helper.cpp +++ b/utils/system/src/dfsu_access_token_helper.cpp @@ -18,12 +18,12 @@ #include "dfs_error.h" #include "dfsu_access_token_helper.h" #include "ipc_skeleton.h" +#include "os_account_manager.h" #include "tokenid_kit.h" #include "uri_permission_manager_client.h" #include "uri.h" #include "utils_log.h" #include "want.h" -#include "os_account_manager.h" namespace OHOS::FileManagement { using namespace std; -- Gitee