• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2025 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #include "hgm_app_page_url_strategy.h"
17 #include "hgm_log.h"
18 
19 namespace OHOS {
20 namespace Rosen {
21 
SetPageUrlConfig(PolicyConfigData::PageUrlConfigMap pageUrlConfig)22 void HgmAppPageUrlStrategy::SetPageUrlConfig(PolicyConfigData::PageUrlConfigMap pageUrlConfig)
23 {
24     pageUrlConfig_ = pageUrlConfig;
25 }
26 
RegisterPageUrlVoterCallback(const PageUrlVoterCallback & callback)27 void HgmAppPageUrlStrategy::RegisterPageUrlVoterCallback(const PageUrlVoterCallback& callback)
28 {
29     pageUrlVoterCallback_ = callback;
30 }
31 
ProcessRemoveVoter(pid_t pid)32 void HgmAppPageUrlStrategy::ProcessRemoveVoter(pid_t pid)
33 {
34     HGM_LOGI("HgmAppPageUrlStrategy: Remove Voter pid = %{public}d", pid);
35     if (pageUrlVoterCallback_ != nullptr) {
36         pageUrlVoterCallback_(pid, "", false);
37     }
38 }
39 
ProcessAddVoter(pid_t pid,std::string strategy)40 void HgmAppPageUrlStrategy::ProcessAddVoter(pid_t pid, std::string strategy)
41 {
42     HGM_LOGI("HgmAppPageUrlStrategy: Add Voter pid = %{public}d", pid);
43     if (pageUrlVoterCallback_ != nullptr) {
44         pageUrlVoterCallback_(pid, strategy, true);
45     }
46 }
47 
CleanPageUrlVote(pid_t pid)48 void HgmAppPageUrlStrategy::CleanPageUrlVote(pid_t pid)
49 {
50     if (pageUrlVoterInfo_.count(pid) > 0) {
51         HGM_LOGD("HgmAppPageUrlStrategy: clean pid = %{public}d", pid);
52         pageUrlVoterInfo_.erase(pid);
53     }
54 }
55 
NotifyScreenSettingChange()56 void HgmAppPageUrlStrategy::NotifyScreenSettingChange()
57 {
58     if (pageUrlVoterInfo_.empty()) {
59         return;
60     }
61     for (auto& pageUrlVoter : pageUrlVoterInfo_) {
62         uint32_t pid = pageUrlVoter.first;
63         VoterInfo voterInfo = pageUrlVoter.second;
64         std::string pageName = voterInfo.pageName;
65         if (!pageName.empty()) {
66             std::string packageName = voterInfo.packageName;
67             /* clean old config voter */
68             if (voterInfo.hasVoter) {
69                 ProcessRemoveVoter(pid);
70                 pageUrlVoterInfo_[pid].hasVoter = false;
71             }
72             /* add new config voter if have pageName config */
73             if (pageUrlConfig_.count(packageName) <= 0) {
74                 continue;
75             }
76             PolicyConfigData::PageUrlConfig pageUrlConfig = pageUrlConfig_[packageName];
77             if (pageUrlConfig.count(pageName) <= 0) {
78                 continue;
79             }
80             auto strategy = pageUrlConfig[pageName];
81             ProcessAddVoter(pid, strategy);
82             pageUrlVoterInfo_[pid].hasVoter = true;
83         }
84     }
85 }
86 
NotifyPageName(pid_t pid,const std::string & packageName,const std::string & pageName,bool isEnter)87 void HgmAppPageUrlStrategy::NotifyPageName(pid_t pid, const std::string& packageName,
88     const std::string& pageName, bool isEnter)
89 {
90     HGM_LOGD("HgmAppPageUrlStrategy: pid=%{public}d packageName=%{public}s pageName=%{public}s" \
91         " isEnter=%{public}d", pid, packageName.c_str(), pageName.c_str(), isEnter);
92     VoterInfo voterInfo = {false, packageName, pageName};
93     if (pageUrlVoterInfo_.count(pid) <= 0) {
94         pageUrlVoterInfo_[pid] = voterInfo;
95     }
96     pageUrlVoterInfo_[pid].pageName = isEnter ? pageName : "";
97     /* not config record pageName */
98     if (pageUrlConfig_.count(packageName) <= 0) {
99         HGM_LOGD("HgmAppPageUrlStrategy: not packageName config");
100         return;
101     }
102 
103     PolicyConfigData::PageUrlConfig pageUrlConfig = pageUrlConfig_[packageName];
104     if (pageUrlConfig.count(pageName) <= 0) {
105         HGM_LOGD("HgmAppPageUrlStrategy: not pageUrl config");
106         return;
107     }
108 
109     auto strategy = pageUrlConfig[pageName];
110     if (isEnter && !pageUrlVoterInfo_[pid].hasVoter) {
111         ProcessAddVoter(pid, strategy);
112         pageUrlVoterInfo_[pid].hasVoter = true;
113     } else if (!isEnter && pageUrlVoterInfo_[pid].hasVoter) {
114         ProcessRemoveVoter(pid);
115         pageUrlVoterInfo_[pid].hasVoter = false;
116     }
117 }
118 } // namespace Rosen
119 } // namespace OHOS