diff --git a/frameworks/native/cloud_file_kit_inner/src/data_sync/sync_state_manager.cpp b/frameworks/native/cloud_file_kit_inner/src/data_sync/sync_state_manager.cpp index 3268f0acc6b823e74a204703d86b43055e25355f..342abc2f563a58b9a3f62b47bbf28027c888b029 100644 --- a/frameworks/native/cloud_file_kit_inner/src/data_sync/sync_state_manager.cpp +++ b/frameworks/native/cloud_file_kit_inner/src/data_sync/sync_state_manager.cpp @@ -19,6 +19,7 @@ #include #include "cloud_file_fault_event.h" +#include "cloud_status.h" #include "dfs_error.h" #include "utils_log.h" @@ -67,6 +68,11 @@ static bool ConvertToNumber(const std::string &str, uint64_t &val) bool SyncStateManager::CheckMediaLibCleaning() { + if (CloudStatus::isStopSync_.load()) { + LOGI("cloudfileservice in stop sync"); + return true; + } + std::string closeSwitchTime = system::GetParameter(CLOUDSYNC_SWITCH_STATUS, ""); LOGD("prev close time: %{public}s", closeSwitchTime.c_str()); if (closeSwitchTime.empty() || closeSwitchTime == "0") { diff --git a/interfaces/inner_api/native/cloud_file_kit_inner/cloud_status.h b/interfaces/inner_api/native/cloud_file_kit_inner/cloud_status.h index 3c631f903e4924dda9618a739e1a806393169e5b..c97dec992a6e85369662b8bd23bf3e3d87985d33 100644 --- a/interfaces/inner_api/native/cloud_file_kit_inner/cloud_status.h +++ b/interfaces/inner_api/native/cloud_file_kit_inner/cloud_status.h @@ -16,6 +16,7 @@ #ifndef OHOS_FILEMGMT_CLOUD_STATUS_H #define OHOS_FILEMGMT_CLOUD_STATUS_H +#include #include #include #include @@ -30,6 +31,7 @@ public: static bool IsCloudStatusOkay(const std::string &bundleName, const int32_t userId); static int32_t ChangeAppSwitch(const std::string &bundleName, const int32_t userId, bool appSwitchStatus); static bool IsAccountIdChanged(const std::string &accountId); + static inline std::atomic isStopSync_ = false; private: static inline CloudFile::CloudUserInfo userInfo_; diff --git a/services/cloudsyncservice/src/ipc/cloud_sync_service.cpp b/services/cloudsyncservice/src/ipc/cloud_sync_service.cpp index a353e07ce3cb12b1f9f1802ad6010c3b74b6988b..77acfd7d704e22e57b1dbdac843492902322dd32 100644 --- a/services/cloudsyncservice/src/ipc/cloud_sync_service.cpp +++ b/services/cloudsyncservice/src/ipc/cloud_sync_service.cpp @@ -715,6 +715,9 @@ int32_t CloudSyncService::ChangeAppSwitch(const std::string &accoutId, const std } } else { system::SetParameter(CLOUDSYNC_STATUS_KEY, CLOUDSYNC_STATUS_SWITCHOFF); + if (bundleName == HDC_BUNDLE_NAME || bundleName == GALLERY_BUNDLE_NAME) { + CloudStatus::isStopSync_.store(true); + } ret = dataSyncManager_->StopSyncSynced(bundleName, callerUserId, false, SyncTriggerType::CLOUD_TRIGGER); if (ret != E_OK) { LOGE("StopSyncSynced failed, ret: %{public}d", ret); @@ -722,6 +725,9 @@ int32_t CloudSyncService::ChangeAppSwitch(const std::string &accoutId, const std } ret = dataSyncManager_->ChangeAppSwitch(bundleName, callerUserId, status); + if (!status && (bundleName == HDC_BUNDLE_NAME || bundleName == GALLERY_BUNDLE_NAME)) { + CloudStatus::isStopSync_.store(false); + } LOGI("End ChangeAppSwitch"); return ret; } 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 356d13c933a03701e9e4cd12700866ad09696d1f..c6a59c7adfaaef4caa5b106401d391dc26007e18 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,15 @@ * 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 "cloud_status.h" #include "data_sync_const.h" +#include "system_mock.h" namespace OHOS::FileManagement::CloudSync::Test { using namespace testing; @@ -512,6 +516,7 @@ HWTEST_F(SyncStateManagerTest, CheckMediaLibCleaningTest_001, TestSize.Level1) { GTEST_LOG_(INFO) << "CheckMediaLibCleaningTest_001 start"; try { + CloudStatus::isStopSync_.store(false); std::shared_ptr systemMock = std::make_shared(); ISystem::system_ = systemMock; EXPECT_CALL(*systemMock, GetParameter(_, _)).WillOnce(Return("")); @@ -531,6 +536,7 @@ HWTEST_F(SyncStateManagerTest, CheckMediaLibCleaningTest_002, TestSize.Level1) { GTEST_LOG_(INFO) << "CheckMediaLibCleaningTest_002 start"; try { + CloudStatus::isStopSync_.store(false); std::shared_ptr systemMock = std::make_shared(); ISystem::system_ = systemMock; EXPECT_CALL(*systemMock, GetParameter(_, _)).WillOnce(Return("0")); @@ -550,6 +556,7 @@ HWTEST_F(SyncStateManagerTest, CheckMediaLibCleaningTest_003, TestSize.Level1) { GTEST_LOG_(INFO) << "CheckMediaLibCleaningTest_003 start"; try { + CloudStatus::isStopSync_.store(false); std::shared_ptr systemMock = std::make_shared(); ISystem::system_ = systemMock; EXPECT_CALL(*systemMock, GetParameter(_, _)).WillOnce(Return("xxx")); @@ -570,6 +577,7 @@ HWTEST_F(SyncStateManagerTest, CheckMediaLibCleaningTest_004, TestSize.Level1) { GTEST_LOG_(INFO) << "CheckMediaLibCleaningTest_004 start"; try { + CloudStatus::isStopSync_.store(false); std::shared_ptr systemMock = std::make_shared(); ISystem::system_ = systemMock; EXPECT_CALL(*systemMock, GetParameter(_, _)).WillOnce(Return("10xx")); @@ -590,6 +598,7 @@ HWTEST_F(SyncStateManagerTest, CheckMediaLibCleaningTest_005, TestSize.Level1) { GTEST_LOG_(INFO) << "CheckMediaLibCleaningTest_005 start"; try { + CloudStatus::isStopSync_.store(false); std::shared_ptr systemMock = std::make_shared(); ISystem::system_ = systemMock; EXPECT_CALL(*systemMock, GetParameter(_, _)).WillOnce(Return(" 10")); @@ -610,6 +619,7 @@ HWTEST_F(SyncStateManagerTest, CheckMediaLibCleaningTest_006, TestSize.Level1) { GTEST_LOG_(INFO) << "CheckMediaLibCleaningTest_006 start"; try { + CloudStatus::isStopSync_.store(false); std::shared_ptr systemMock = std::make_shared(); ISystem::system_ = systemMock; EXPECT_CALL(*systemMock, GetParameter(_, _)).WillOnce(Return("10 ")); @@ -630,6 +640,7 @@ HWTEST_F(SyncStateManagerTest, CheckMediaLibCleaningTest_007, TestSize.Level1) { GTEST_LOG_(INFO) << "CheckMediaLibCleaningTest_007 start"; try { + CloudStatus::isStopSync_.store(false); std::shared_ptr systemMock = std::make_shared(); ISystem::system_ = systemMock; uint64_t curTime = GetCurrentTimeStampMs() - TWELVE_HOURS_MILLISECOND; @@ -651,6 +662,7 @@ HWTEST_F(SyncStateManagerTest, CheckMediaLibCleaningTest_008, TestSize.Level1) { GTEST_LOG_(INFO) << "CheckMediaLibCleaningTest_008 start"; try { + CloudStatus::isStopSync_.store(false); std::shared_ptr systemMock = std::make_shared(); ISystem::system_ = systemMock; uint64_t curTime = GetCurrentTimeStampMs() - 10; @@ -671,6 +683,7 @@ HWTEST_F(SyncStateManagerTest, CheckMediaLibCleaningTest_009, TestSize.Level1) { GTEST_LOG_(INFO) << "CheckMediaLibCleaningTest_009 start"; try { + CloudStatus::isStopSync_.store(false); std::shared_ptr systemMock = std::make_shared(); ISystem::system_ = systemMock; uint64_t curTime = GetCurrentTimeStampMs() + 10; @@ -692,6 +705,7 @@ HWTEST_F(SyncStateManagerTest, CheckMediaLibCleaningTest_010, TestSize.Level1) { GTEST_LOG_(INFO) << "CheckMediaLibCleaningTest_010 start"; try { + CloudStatus::isStopSync_.store(false); std::shared_ptr systemMock = std::make_shared(); ISystem::system_ = systemMock; uint64_t curTime = GetCurrentTimeStampMs() - TWELVE_HOURS_MILLISECOND + 50000; @@ -707,4 +721,25 @@ HWTEST_F(SyncStateManagerTest, CheckMediaLibCleaningTest_010, TestSize.Level1) } GTEST_LOG_(INFO) << "CheckMediaLibCleaningTest_010 End"; } + +HWTEST_F(SyncStateManagerTest, CheckMediaLibCleaningTest_011, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "CheckMediaLibCleaningTest_011 start"; + try { + CloudStatus::isStopSync_.store(true); + std::shared_ptr systemMock = std::make_shared(); + ISystem::system_ = systemMock; + EXPECT_CALL(*systemMock, GetParameter(_, _)).Times(0); + SyncStateManager syncStateManager; + bool ret = syncStateManager.CheckMediaLibCleaning(); + EXPECT_EQ(ret, true); + + ISystem::system_ = nullptr; + CloudStatus::isStopSync_.store(false); + } catch (...) { + EXPECT_TRUE(false); + GTEST_LOG_(INFO) << "CheckMediaLibCleaningTest_011 ERROR"; + } + GTEST_LOG_(INFO) << "CheckMediaLibCleaningTest_011 End"; +} } \ No newline at end of file