15ccb8f90Sopenharmony_ci/*
25ccb8f90Sopenharmony_ci * Copyright (c) 2024 Huawei Device Co., Ltd.
35ccb8f90Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
45ccb8f90Sopenharmony_ci * you may not use this file except in compliance with the License.
55ccb8f90Sopenharmony_ci * You may obtain a copy of the License at
65ccb8f90Sopenharmony_ci *
75ccb8f90Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
85ccb8f90Sopenharmony_ci *
95ccb8f90Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
105ccb8f90Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
115ccb8f90Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
125ccb8f90Sopenharmony_ci * See the License for the specific language governing permissions and
135ccb8f90Sopenharmony_ci * limitations under the License.
145ccb8f90Sopenharmony_ci */
155ccb8f90Sopenharmony_ci
165ccb8f90Sopenharmony_ci#include "hibernate_controller.h"
175ccb8f90Sopenharmony_ci#include "system_suspend_controller.h"
185ccb8f90Sopenharmony_ci
195ccb8f90Sopenharmony_cinamespace OHOS {
205ccb8f90Sopenharmony_cinamespace PowerMgr {
215ccb8f90Sopenharmony_cibool HibernateController::Hibernate(bool clearMemory)
225ccb8f90Sopenharmony_ci{
235ccb8f90Sopenharmony_ci    return SystemSuspendController::GetInstance().Hibernate();
245ccb8f90Sopenharmony_ci}
255ccb8f90Sopenharmony_ci
265ccb8f90Sopenharmony_civoid HibernateController::RegisterSyncHibernateCallback(const sptr<ISyncHibernateCallback>& cb)
275ccb8f90Sopenharmony_ci{
285ccb8f90Sopenharmony_ci    std::lock_guard<std::mutex> lock(mutex_);
295ccb8f90Sopenharmony_ci    callbacks_.insert(cb);
305ccb8f90Sopenharmony_ci}
315ccb8f90Sopenharmony_ci
325ccb8f90Sopenharmony_civoid HibernateController::UnregisterSyncHibernateCallback(const sptr<ISyncHibernateCallback>& cb)
335ccb8f90Sopenharmony_ci{
345ccb8f90Sopenharmony_ci    std::lock_guard<std::mutex> lock(mutex_);
355ccb8f90Sopenharmony_ci    callbacks_.erase(cb);
365ccb8f90Sopenharmony_ci}
375ccb8f90Sopenharmony_ci
385ccb8f90Sopenharmony_civoid HibernateController::PreHibernate() const
395ccb8f90Sopenharmony_ci{
405ccb8f90Sopenharmony_ci    for (const auto &cb : callbacks_) {
415ccb8f90Sopenharmony_ci        if (cb != nullptr) {
425ccb8f90Sopenharmony_ci            cb->OnSyncHibernate();
435ccb8f90Sopenharmony_ci        }
445ccb8f90Sopenharmony_ci    }
455ccb8f90Sopenharmony_ci}
465ccb8f90Sopenharmony_ci
475ccb8f90Sopenharmony_civoid HibernateController::PostHibernate(bool hibernateResult) const
485ccb8f90Sopenharmony_ci{
495ccb8f90Sopenharmony_ci    for (const auto &cb : callbacks_) {
505ccb8f90Sopenharmony_ci        if (cb != nullptr) {
515ccb8f90Sopenharmony_ci            cb->OnSyncWakeup(hibernateResult);
525ccb8f90Sopenharmony_ci        }
535ccb8f90Sopenharmony_ci    }
545ccb8f90Sopenharmony_ci}
555ccb8f90Sopenharmony_ci} // namespace PowerMgr
565ccb8f90Sopenharmony_ci} // namespace OHOS
57