1ea497e4dSopenharmony_ci/* 2ea497e4dSopenharmony_ci * Copyright (c) 2023 Huawei Device Co., Ltd. 3ea497e4dSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4ea497e4dSopenharmony_ci * you may not use this file except in compliance with the License. 5ea497e4dSopenharmony_ci * You may obtain a copy of the License at 6ea497e4dSopenharmony_ci * 7ea497e4dSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8ea497e4dSopenharmony_ci * 9ea497e4dSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10ea497e4dSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11ea497e4dSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12ea497e4dSopenharmony_ci * See the License for the specific language governing permissions and 13ea497e4dSopenharmony_ci * limitations under the License. 14ea497e4dSopenharmony_ci */ 15ea497e4dSopenharmony_ci 16ea497e4dSopenharmony_ci#include "screen_brightness_manager.h" 17ea497e4dSopenharmony_ci 18ea497e4dSopenharmony_ci#include "iam_check.h" 19ea497e4dSopenharmony_ci#include "iam_logger.h" 20ea497e4dSopenharmony_ci#include "iam_ptr.h" 21ea497e4dSopenharmony_ci 22ea497e4dSopenharmony_ci#include "sa_command_manager.h" 23ea497e4dSopenharmony_ci#include "service_ex_manager.h" 24ea497e4dSopenharmony_ci 25ea497e4dSopenharmony_ci#define LOG_TAG "FACE_AUTH_SA" 26ea497e4dSopenharmony_ci 27ea497e4dSopenharmony_cinamespace OHOS { 28ea497e4dSopenharmony_cinamespace UserIam { 29ea497e4dSopenharmony_cinamespace FaceAuth { 30ea497e4dSopenharmony_cinamespace { 31ea497e4dSopenharmony_cistd::shared_ptr<ScreenBrightnessManager> CreateScreenBrightnessManager() 32ea497e4dSopenharmony_ci{ 33ea497e4dSopenharmony_ci auto manager = Common::MakeShared<ScreenBrightnessManager>(); 34ea497e4dSopenharmony_ci IF_FALSE_LOGE_AND_RETURN_VAL(manager != nullptr, nullptr); 35ea497e4dSopenharmony_ci 36ea497e4dSopenharmony_ci std::vector<SaCommandId> commandIds = { SaCommandId::BEGIN_SCREEN_BRIGHTNESS_INCREASE, 37ea497e4dSopenharmony_ci SaCommandId::END_SCREEN_BRIGHTNESS_INCREASE }; 38ea497e4dSopenharmony_ci SaCommandManager::GetInstance().RegisterSaCommandProcessor(commandIds, manager); 39ea497e4dSopenharmony_ci return manager; 40ea497e4dSopenharmony_ci} 41ea497e4dSopenharmony_ci} // namespace 42ea497e4dSopenharmony_ci 43ea497e4dSopenharmony_cistd::shared_ptr<ScreenBrightnessManager> ScreenBrightnessManager::GetInstance() 44ea497e4dSopenharmony_ci{ 45ea497e4dSopenharmony_ci static auto manager = CreateScreenBrightnessManager(); 46ea497e4dSopenharmony_ci if (manager == nullptr) { 47ea497e4dSopenharmony_ci IAM_LOGE("ScreenBrightnessManager is null"); 48ea497e4dSopenharmony_ci } 49ea497e4dSopenharmony_ci return manager; 50ea497e4dSopenharmony_ci} 51ea497e4dSopenharmony_ci 52ea497e4dSopenharmony_cistd::shared_ptr<IScreenBrightnessTask> ScreenBrightnessManager::GetCurrentTask() 53ea497e4dSopenharmony_ci{ 54ea497e4dSopenharmony_ci return taskInProc_; 55ea497e4dSopenharmony_ci} 56ea497e4dSopenharmony_ci 57ea497e4dSopenharmony_ciUserAuth::ResultCode ScreenBrightnessManager::ProcessSaCommand(std::shared_ptr<FaceAuthAllInOneExecutorHdi> executor, 58ea497e4dSopenharmony_ci const SaCommand &command) 59ea497e4dSopenharmony_ci{ 60ea497e4dSopenharmony_ci IF_FALSE_LOGE_AND_RETURN_VAL(executor != nullptr, UserAuth::GENERAL_ERROR); 61ea497e4dSopenharmony_ci 62ea497e4dSopenharmony_ci std::lock_guard<std::mutex> lock(mutex_); 63ea497e4dSopenharmony_ci 64ea497e4dSopenharmony_ci UserAuth::ResultCode result = UserAuth::GENERAL_ERROR; 65ea497e4dSopenharmony_ci switch (command.id) { 66ea497e4dSopenharmony_ci case SaCommandId::BEGIN_SCREEN_BRIGHTNESS_INCREASE: 67ea497e4dSopenharmony_ci result = ProcessScreenBrightnessIncreaseBegin(executor, command.param); 68ea497e4dSopenharmony_ci break; 69ea497e4dSopenharmony_ci case SaCommandId::END_SCREEN_BRIGHTNESS_INCREASE: 70ea497e4dSopenharmony_ci result = ProcessScreenBrightnessIncreaseEnd(executor, command.param); 71ea497e4dSopenharmony_ci break; 72ea497e4dSopenharmony_ci default: 73ea497e4dSopenharmony_ci IAM_LOGE("command id %{public}d not match", command.id); 74ea497e4dSopenharmony_ci } 75ea497e4dSopenharmony_ci return result; 76ea497e4dSopenharmony_ci} 77ea497e4dSopenharmony_ci 78ea497e4dSopenharmony_civoid ScreenBrightnessManager::OnHdiDisconnect(std::shared_ptr<FaceAuthAllInOneExecutorHdi> executor) 79ea497e4dSopenharmony_ci{ 80ea497e4dSopenharmony_ci IF_FALSE_LOGE_AND_RETURN(executor != nullptr); 81ea497e4dSopenharmony_ci 82ea497e4dSopenharmony_ci std::lock_guard<std::mutex> lock(mutex_); 83ea497e4dSopenharmony_ci 84ea497e4dSopenharmony_ci if (executorInProc_ != executor) { 85ea497e4dSopenharmony_ci return; 86ea497e4dSopenharmony_ci } 87ea497e4dSopenharmony_ci 88ea497e4dSopenharmony_ci IAM_LOGI("start"); 89ea497e4dSopenharmony_ci executorInProc_ = nullptr; 90ea497e4dSopenharmony_ci 91ea497e4dSopenharmony_ci if (taskInProc_ != nullptr) { 92ea497e4dSopenharmony_ci taskInProc_->Stop(); 93ea497e4dSopenharmony_ci taskInProc_ = nullptr; 94ea497e4dSopenharmony_ci } 95ea497e4dSopenharmony_ci IAM_LOGI("success"); 96ea497e4dSopenharmony_ci} 97ea497e4dSopenharmony_ci 98ea497e4dSopenharmony_ciUserAuth::ResultCode ScreenBrightnessManager::ProcessScreenBrightnessIncreaseBegin( 99ea497e4dSopenharmony_ci std::shared_ptr<FaceAuthAllInOneExecutorHdi> executor, const SaCommandParam param) 100ea497e4dSopenharmony_ci{ 101ea497e4dSopenharmony_ci if (executorInProc_ != nullptr) { 102ea497e4dSopenharmony_ci IAM_LOGE("another executor is using this module"); 103ea497e4dSopenharmony_ci return UserAuth::GENERAL_ERROR; 104ea497e4dSopenharmony_ci } 105ea497e4dSopenharmony_ci 106ea497e4dSopenharmony_ci if (taskInProc_ != nullptr) { 107ea497e4dSopenharmony_ci IAM_LOGE("another task is running"); 108ea497e4dSopenharmony_ci return UserAuth::GENERAL_ERROR; 109ea497e4dSopenharmony_ci } 110ea497e4dSopenharmony_ci 111ea497e4dSopenharmony_ci IAM_LOGI("start"); 112ea497e4dSopenharmony_ci auto acquireRet = ServiceExManager::GetInstance().Acquire(); 113ea497e4dSopenharmony_ci IF_FALSE_LOGE_AND_RETURN_VAL(acquireRet == UserAuth::SUCCESS, UserAuth::GENERAL_ERROR); 114ea497e4dSopenharmony_ci 115ea497e4dSopenharmony_ci auto taskInProc = ServiceExManager::GetInstance().GetScreenBrightnessTask(); 116ea497e4dSopenharmony_ci if (taskInProc == nullptr) { 117ea497e4dSopenharmony_ci ServiceExManager::GetInstance().Release(); 118ea497e4dSopenharmony_ci IAM_LOGE("failed to get task"); 119ea497e4dSopenharmony_ci return UserAuth::GENERAL_ERROR; 120ea497e4dSopenharmony_ci } 121ea497e4dSopenharmony_ci taskInProc->RegisterDestructCallback([]() { 122ea497e4dSopenharmony_ci IAM_LOGI("task destruct"); 123ea497e4dSopenharmony_ci ServiceExManager::GetInstance().Release(); 124ea497e4dSopenharmony_ci }); 125ea497e4dSopenharmony_ci taskInProc->Start(); 126ea497e4dSopenharmony_ci 127ea497e4dSopenharmony_ci executorInProc_ = executor; 128ea497e4dSopenharmony_ci taskInProc_ = taskInProc; 129ea497e4dSopenharmony_ci IAM_LOGI("success"); 130ea497e4dSopenharmony_ci return UserAuth::SUCCESS; 131ea497e4dSopenharmony_ci} 132ea497e4dSopenharmony_ci 133ea497e4dSopenharmony_ciUserAuth::ResultCode ScreenBrightnessManager::ProcessScreenBrightnessIncreaseEnd( 134ea497e4dSopenharmony_ci std::shared_ptr<FaceAuthAllInOneExecutorHdi> executor, const SaCommandParam param) 135ea497e4dSopenharmony_ci{ 136ea497e4dSopenharmony_ci if (executorInProc_ != executor) { 137ea497e4dSopenharmony_ci IAM_LOGE("another executor is using this module"); 138ea497e4dSopenharmony_ci return UserAuth::GENERAL_ERROR; 139ea497e4dSopenharmony_ci } 140ea497e4dSopenharmony_ci 141ea497e4dSopenharmony_ci IAM_LOGI("start"); 142ea497e4dSopenharmony_ci executorInProc_ = nullptr; 143ea497e4dSopenharmony_ci 144ea497e4dSopenharmony_ci if (taskInProc_ != nullptr) { 145ea497e4dSopenharmony_ci taskInProc_->Stop(); 146ea497e4dSopenharmony_ci taskInProc_ = nullptr; 147ea497e4dSopenharmony_ci } 148ea497e4dSopenharmony_ci 149ea497e4dSopenharmony_ci IAM_LOGI("success"); 150ea497e4dSopenharmony_ci return UserAuth::SUCCESS; 151ea497e4dSopenharmony_ci} 152ea497e4dSopenharmony_ci 153ea497e4dSopenharmony_ci} // namespace FaceAuth 154ea497e4dSopenharmony_ci} // namespace UserIam 155ea497e4dSopenharmony_ci} // namespace OHOS