1db372d24Sopenharmony_ci/* 2db372d24Sopenharmony_ci * Copyright (c) 2022 Huawei Device Co., Ltd. 3db372d24Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4db372d24Sopenharmony_ci * you may not use this file except in compliance with the License. 5db372d24Sopenharmony_ci * You may obtain a copy of the License at 6db372d24Sopenharmony_ci * 7db372d24Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8db372d24Sopenharmony_ci * 9db372d24Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10db372d24Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11db372d24Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12db372d24Sopenharmony_ci * See the License for the specific language governing permissions and 13db372d24Sopenharmony_ci * limitations under the License. 14db372d24Sopenharmony_ci */ 15db372d24Sopenharmony_ci 16db372d24Sopenharmony_ci#ifndef UI_APPEARANCE_ABILITY_H 17db372d24Sopenharmony_ci#define UI_APPEARANCE_ABILITY_H 18db372d24Sopenharmony_ci 19db372d24Sopenharmony_ci#include <cstdint> 20db372d24Sopenharmony_ci#include <string> 21db372d24Sopenharmony_ci 22db372d24Sopenharmony_ci#include "appmgr/app_mgr_proxy.h" 23db372d24Sopenharmony_ci#include "common_event_manager.h" 24db372d24Sopenharmony_ci#include "common_event_support.h" 25db372d24Sopenharmony_ci#include "system_ability.h" 26db372d24Sopenharmony_ci#include "ui_appearance_ability_stub.h" 27db372d24Sopenharmony_ci 28db372d24Sopenharmony_cinamespace OHOS { 29db372d24Sopenharmony_cinamespace ArkUi::UiAppearance { 30db372d24Sopenharmony_ciclass UserSwitchEventSubscriber : public EventFwk::CommonEventSubscriber { 31db372d24Sopenharmony_cipublic: 32db372d24Sopenharmony_ci explicit UserSwitchEventSubscriber(const EventFwk::CommonEventSubscribeInfo& subscriberInfo, 33db372d24Sopenharmony_ci const std::function<void(const int32_t)>& userSwitchCallback); 34db372d24Sopenharmony_ci ~UserSwitchEventSubscriber() override = default; 35db372d24Sopenharmony_ci void OnReceiveEvent(const EventFwk::CommonEventData& data) override; 36db372d24Sopenharmony_ci 37db372d24Sopenharmony_ciprivate: 38db372d24Sopenharmony_ci std::function<void(const int32_t)> userSwitchCallback_; 39db372d24Sopenharmony_ci}; 40db372d24Sopenharmony_ci 41db372d24Sopenharmony_ciclass UiAppearanceAbility : public SystemAbility, public UiAppearanceAbilityStub { 42db372d24Sopenharmony_ci DECLARE_SYSTEM_ABILITY(UiAppearanceAbility); 43db372d24Sopenharmony_ci 44db372d24Sopenharmony_cipublic: 45db372d24Sopenharmony_ci struct UiAppearanceParam { 46db372d24Sopenharmony_ci DarkMode darkMode = DarkMode::ALWAYS_LIGHT; 47db372d24Sopenharmony_ci std::string fontScale = "1"; 48db372d24Sopenharmony_ci std::string fontWeightScale = "1"; 49db372d24Sopenharmony_ci }; 50db372d24Sopenharmony_ci UiAppearanceAbility(int32_t saId, bool runOnCreate); 51db372d24Sopenharmony_ci ~UiAppearanceAbility() = default; 52db372d24Sopenharmony_ci 53db372d24Sopenharmony_ci int32_t SetDarkMode(DarkMode mode) override; 54db372d24Sopenharmony_ci int32_t GetDarkMode() override; 55db372d24Sopenharmony_ci int32_t GetFontScale(std::string& fontScale) override; 56db372d24Sopenharmony_ci int32_t SetFontScale(std::string& fontScale) override; 57db372d24Sopenharmony_ci int32_t GetFontWeightScale(std::string& fontWeightScale) override; 58db372d24Sopenharmony_ci int32_t SetFontWeightScale(std::string& fontWeightScale) override; 59db372d24Sopenharmony_ci 60db372d24Sopenharmony_ciprotected: 61db372d24Sopenharmony_ci void OnStart() override; 62db372d24Sopenharmony_ci void OnStop() override; 63db372d24Sopenharmony_ci 64db372d24Sopenharmony_ci void OnAddSystemAbility(int32_t systemAbilityId, const std::string& deviceId) override; 65db372d24Sopenharmony_ci void OnRemoveSystemAbility(int32_t systemAbilityId, const std::string& deviceId) override; 66db372d24Sopenharmony_ci 67db372d24Sopenharmony_ciprivate: 68db372d24Sopenharmony_ci sptr<AppExecFwk::IAppMgr> GetAppManagerInstance(); 69db372d24Sopenharmony_ci bool VerifyAccessToken(const std::string& permissionName); 70db372d24Sopenharmony_ci void Init(); 71db372d24Sopenharmony_ci void SubscribeUserSwitchEvent(); 72db372d24Sopenharmony_ci bool IsUserExist(const int32_t userId); 73db372d24Sopenharmony_ci bool UpdateConfiguration(const AppExecFwk::Configuration& configuration, const int32_t userId); 74db372d24Sopenharmony_ci void DoCompatibleProcess(); 75db372d24Sopenharmony_ci int32_t GetCallingUserId(); 76db372d24Sopenharmony_ci std::vector<int32_t> GetUserIds(); 77db372d24Sopenharmony_ci void UserSwitchFunc(const int32_t userId); 78db372d24Sopenharmony_ci void DoInitProcess(); 79db372d24Sopenharmony_ci 80db372d24Sopenharmony_ci bool GetParameterWrap(const std::string& paramName, std::string& value, const std::string& defaultValue); 81db372d24Sopenharmony_ci bool GetParameterWrap(const std::string& paramName, std::string& value); 82db372d24Sopenharmony_ci bool SetParameterWrap(const std::string& paramName, const std::string& value); 83db372d24Sopenharmony_ci 84db372d24Sopenharmony_ci void UpdateCurrentUserConfiguration(const int32_t userId); 85db372d24Sopenharmony_ci int32_t OnSetDarkMode(const int32_t userId, DarkMode mode); 86db372d24Sopenharmony_ci UiAppearanceAbility::DarkMode InitGetDarkMode(const int32_t userId); 87db372d24Sopenharmony_ci int32_t OnSetFontScale(const int32_t userId, std::string& fontScale); 88db372d24Sopenharmony_ci int32_t OnSetFontWeightScale(const int32_t userId, std::string& fontWeightScale); 89db372d24Sopenharmony_ci std::string DarkNodeConfigurationAssignUser(const int32_t userId); 90db372d24Sopenharmony_ci std::string FontScaleConfigurationAssignUser(const int32_t userId); 91db372d24Sopenharmony_ci std::string FontWeightScaleConfigurationAssignUser(const int32_t userId); 92db372d24Sopenharmony_ci std::string DarkModeParamAssignUser(const int32_t userId); 93db372d24Sopenharmony_ci std::string FontScaleParamAssignUser(const int32_t userId); 94db372d24Sopenharmony_ci std::string FontWeightScaleParamAssignUser(const int32_t userId); 95db372d24Sopenharmony_ci 96db372d24Sopenharmony_ci std::shared_ptr<UserSwitchEventSubscriber> userSwitchSubscriber_; 97db372d24Sopenharmony_ci std::recursive_mutex usersParamMutex_; 98db372d24Sopenharmony_ci std::map<int32_t, UiAppearanceParam> usersParam_; 99db372d24Sopenharmony_ci std::atomic<bool> isNeedDoCompatibleProcess_ = false; 100db372d24Sopenharmony_ci std::atomic<bool> isInitializationFinished_ = false; 101db372d24Sopenharmony_ci}; 102db372d24Sopenharmony_ci} // namespace ArkUi::UiAppearance 103db372d24Sopenharmony_ci} // namespace OHOS 104db372d24Sopenharmony_ci#endif // UI_APPEARANCE_ABILITY_H 105