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 "imf_hisysevent_info.h"
17
18 #include <algorithm>
19
20 namespace OHOS {
21 namespace MiscServices {
Builder()22 HiSysOriginalInfo::Builder::Builder()
23 {
24 info_ = std::make_shared<HiSysOriginalInfo>();
25 info_->eventCode = 0;
26 info_->errCode = 0;
27 info_->peerPid = 0;
28 info_->peerUserId = 0;
29 info_->clientType = ClientType::CLIENT_TYPE_END;
30 info_->inputPattern = 0;
31 info_->isShowKeyboard = true;
32 info_->imeCbTime = -1;
33 info_->baseTextOperationTime = -1;
34 }
SetEventCode(int32_t eventCode)35 HiSysOriginalInfo::Builder &HiSysOriginalInfo::Builder::SetEventCode(int32_t eventCode)
36 {
37 info_->eventCode = eventCode;
38 return *this;
39 }
SetErrCode(int32_t errCode)40 HiSysOriginalInfo::Builder &HiSysOriginalInfo::Builder::SetErrCode(int32_t errCode)
41 {
42 info_->errCode = errCode;
43 return *this;
44 }
SetPeerName(const std::string & peerName)45 HiSysOriginalInfo::Builder &HiSysOriginalInfo::Builder::SetPeerName(const std::string &peerName)
46 {
47 info_->peerName = peerName;
48 return *this;
49 }
SetPeerPid(int64_t peerPid)50 HiSysOriginalInfo::Builder &HiSysOriginalInfo::Builder::SetPeerPid(int64_t peerPid)
51 {
52 info_->peerPid = peerPid;
53 return *this;
54 }
SetPeerUserId(int32_t peerUserId)55 HiSysOriginalInfo::Builder &HiSysOriginalInfo::Builder::SetPeerUserId(int32_t peerUserId)
56 {
57 info_->peerUserId = peerUserId;
58 return *this;
59 }
SetClientType(ClientType clientType)60 HiSysOriginalInfo::Builder &HiSysOriginalInfo::Builder::SetClientType(ClientType clientType)
61 {
62 info_->clientType = clientType;
63 return *this;
64 }
SetInputPattern(int32_t inputPattern)65 HiSysOriginalInfo::Builder &HiSysOriginalInfo::Builder::SetInputPattern(int32_t inputPattern)
66 {
67 info_->inputPattern = inputPattern;
68 return *this;
69 }
SetIsShowKeyboard(bool isShowKeyboard)70 HiSysOriginalInfo::Builder &HiSysOriginalInfo::Builder::SetIsShowKeyboard(bool isShowKeyboard)
71 {
72 info_->isShowKeyboard = isShowKeyboard;
73 return *this;
74 }
SetImeName(const std::string & imeName)75 HiSysOriginalInfo::Builder &HiSysOriginalInfo::Builder::SetImeName(const std::string &imeName)
76 {
77 info_->imeName = imeName;
78 return *this;
79 }
SetImeCbTime(int32_t imeCbTime)80 HiSysOriginalInfo::Builder &HiSysOriginalInfo::Builder::SetImeCbTime(int32_t imeCbTime)
81 {
82 info_->imeCbTime = imeCbTime;
83 return *this;
84 }
SetBaseTextOperatorTime(int32_t baseTextOperationTime)85 HiSysOriginalInfo::Builder &HiSysOriginalInfo::Builder::SetBaseTextOperatorTime(int32_t baseTextOperationTime)
86 {
87 info_->baseTextOperationTime = baseTextOperationTime;
88 return *this;
89 }
Build()90 std::shared_ptr<HiSysOriginalInfo> HiSysOriginalInfo::Builder::Build()
91 {
92 return info_;
93 }
94
ModCountDistributions(uint32_t intervalIndex,const std::string & key)95 void CountDistributionInfo::ModCountDistributions(uint32_t intervalIndex, const std::string &key)
96 {
97 count++;
98 if (intervalIndex >= countDistributions.size()) {
99 return;
100 }
101 auto &intervalInfos = countDistributions[intervalIndex];
102 auto it = std::find_if(intervalInfos.begin(), intervalInfos.end(),
103 [key](const std::pair<std::string, uint64_t> &infoTmp) { return infoTmp.first == key; });
104 if (it == intervalInfos.end()) {
105 intervalInfos.emplace_back(key, 1);
106 return;
107 }
108 it->second++;
109 }
110
Marshal(cJSON * node) const111 bool CountDistributionInfo::Marshal(cJSON *node) const
112 {
113 auto ret = SetValue(node, GET_NAME(COUNT), count);
114 std::vector<std::vector<std::string>> distributions;
115 for (const auto &distribution : countDistributions) {
116 std::vector<std::string> infos;
117 for (const auto &info : distribution) {
118 std::string str(info.first);
119 str.append("/").append(std::to_string(info.second));
120 infos.push_back(str);
121 }
122 distributions.push_back(infos);
123 }
124 return SetValue(node, GET_NAME(COUNT_DISTRIBUTION), distributions) && ret;
125 }
126 } // namespace MiscServices
127 } // namespace OHOS