• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2022 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 "accessibility_ability_info.h"
17 
18 #include "bundle_mgr_client.h"
19 #include "hilog_wrapper.h"
20 #include "json_utils.h"
21 #include "nlohmann/json.hpp"
22 #include "parcel_util.h"
23 
24 using namespace std;
25 using namespace OHOS::AppExecFwk;
26 
27 namespace OHOS {
28 namespace Accessibility {
AccessibilityAbilityInfo(const AppExecFwk::ExtensionAbilityInfo & abilityInfo)29 AccessibilityAbilityInfo::AccessibilityAbilityInfo(const AppExecFwk::ExtensionAbilityInfo &abilityInfo)
30 {
31     HILOG_DEBUG("start.");
32     bundleName_ = abilityInfo.bundleName;
33     moduleName_ = abilityInfo.moduleName;
34     name_ = abilityInfo.name;
35     eventTypes_ = EventType::TYPES_ALL_MASK;
36     HILOG_DEBUG("bundle name is [%{public}s].", bundleName_.c_str());
37     HILOG_DEBUG("module name is [%{public}s].", moduleName_.c_str());
38     HILOG_DEBUG("ability name is [%{public}s]].", name_.c_str());
39     description_ = abilityInfo.description;
40     std::vector<std::string> profileInfos;
41     std::string metadataName = "ohos.accessibleability";
42     BundleMgrClient bundleMgrClient;
43     bundleMgrClient.GetResConfigFile(abilityInfo, metadataName, profileInfos);
44     if (profileInfos.empty()) {
45         HILOG_ERROR("profileInfos is empty.");
46         return;
47     }
48 
49     if (!ParseAAConfig(profileInfos[0])) {
50         HILOG_ERROR("Parse AccessibilityAbility config file failed.");
51     }
52     HILOG_DEBUG("capabilities is [%{public}d].", capabilities_);
53     HILOG_DEBUG("rationale is [%{public}s].", rationale_.c_str());
54     HILOG_DEBUG("settingsAbility is [%{public}s]].", settingsAbility_.c_str());
55 }
56 
ParseAAConfig(std::string & config)57 bool AccessibilityAbilityInfo::ParseAAConfig(std::string &config)
58 {
59     HILOG_DEBUG("start.");
60     nlohmann::json sourceJson = nlohmann::json::parse(config);
61 
62     // accessibilityCapabilities
63     vector<string> capabilities;
64     if (!JsonUtils::GetStringVecFromJson(
65         sourceJson, AccessibleAbility_JSON_KEY_ACCESSIBILITY_CAPABILITIES,
66         capabilities)) {
67         HILOG_ERROR("Get stringVec from json failed.");
68         return false;
69     }
70     PraseVecUtils::ParseCapabilitiesFromVec(capabilities, capabilities_);
71 
72     // accessibilityCapabilityRationale
73     if (!JsonUtils::GetStringFromJson(
74         sourceJson,
75         AccessibleAbility_JSON_KEY_ACCESSIBILITY_CAPABILITIES_RATIONALE,
76         rationale_)) {
77         HILOG_ERROR("Get stringVec from json failed.");
78         return false;
79     }
80 
81     // settingsAbility
82     if (!JsonUtils::GetStringFromJson(
83         sourceJson, AccessibleAbility_JSON_KEY_SETTINGS_ABILITY,
84         settingsAbility_)) {
85         HILOG_ERROR("Get stringVec from json failed.");
86         return false;
87     }
88     return true;
89 }
90 
GetAccessibilityAbilityType()91 uint32_t AccessibilityAbilityInfo::GetAccessibilityAbilityType()
92 {
93     HILOG_DEBUG("types(%{public}d)start.", abilityTypes_);
94     return abilityTypes_;
95 }
96 
GetCapabilityValues()97 uint32_t AccessibilityAbilityInfo::GetCapabilityValues()
98 {
99     HILOG_DEBUG("start.");
100     return capabilities_;
101 }
102 
GetDescription()103 string AccessibilityAbilityInfo::GetDescription()
104 {
105     HILOG_DEBUG("start.");
106     return description_;
107 }
108 
GetEventTypes()109 uint32_t AccessibilityAbilityInfo::GetEventTypes()
110 {
111     HILOG_DEBUG("start.");
112     return eventTypes_;
113 }
114 
GetId()115 string AccessibilityAbilityInfo::GetId()
116 {
117     HILOG_DEBUG("start.");
118     return bundleName_ + "/" + name_;
119 }
120 
GetName()121 string AccessibilityAbilityInfo::GetName()
122 {
123     HILOG_DEBUG("start.");
124     return name_;
125 }
126 
GetPackageName()127 string AccessibilityAbilityInfo::GetPackageName()
128 {
129     HILOG_DEBUG("start.");
130     return bundleName_;
131 }
132 
SetPackageName(string bundleName)133 void AccessibilityAbilityInfo::SetPackageName(string bundleName)
134 {
135     HILOG_DEBUG("start.");
136     bundleName_ = bundleName;
137 }
138 
GetFilterBundleNames()139 vector<string> AccessibilityAbilityInfo::GetFilterBundleNames()
140 {
141     HILOG_DEBUG("start.");
142     return targetBundleNames_;
143 }
144 
GetSettingsAbility()145 std::string AccessibilityAbilityInfo::GetSettingsAbility()
146 {
147     HILOG_DEBUG("start.");
148     return settingsAbility_;
149 }
150 
ReadFromParcel(Parcel & parcel)151 bool AccessibilityAbilityInfo::ReadFromParcel(Parcel &parcel)
152 {
153     HILOG_DEBUG("start.");
154     READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(String, parcel, bundleName_);
155     READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(String, parcel, moduleName_);
156     READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(String, parcel, name_);
157     READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(String, parcel, description_);
158 
159     READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(Uint32, parcel, capabilities_);
160     READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(String, parcel, rationale_);
161     READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(Uint32, parcel, abilityTypes_);
162     READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(Uint32, parcel, eventTypes_);
163     READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(String, parcel, settingsAbility_);
164     READ_PARCEL_AND_RETURN_FALSE_IF_FAIL(StringVector, parcel, &targetBundleNames_);
165 
166     return true;
167 }
168 
Marshalling(Parcel & parcel) const169 bool AccessibilityAbilityInfo::Marshalling(Parcel &parcel) const
170 {
171     HILOG_DEBUG("start.");
172     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String, parcel, bundleName_);
173     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String, parcel, moduleName_);
174     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String, parcel, name_);
175     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String, parcel, description_);
176 
177     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Uint32, parcel, capabilities_);
178     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String, parcel, rationale_);
179     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Uint32, parcel, abilityTypes_);
180     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(Uint32, parcel, eventTypes_);
181     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(String, parcel, settingsAbility_);
182     WRITE_PARCEL_AND_RETURN_FALSE_IF_FAIL(StringVector, parcel, targetBundleNames_);
183 
184     return true;
185 }
186 
Unmarshalling(Parcel & parcel)187 AccessibilityAbilityInfo *AccessibilityAbilityInfo::Unmarshalling(Parcel &parcel)
188 {
189     HILOG_DEBUG("start.");
190     AccessibilityAbilityInfo *accessibilityAbilityInfo = new AccessibilityAbilityInfo();
191 
192     if (accessibilityAbilityInfo && !accessibilityAbilityInfo->ReadFromParcel(parcel)) {
193         HILOG_ERROR("ReadFromParcel AccessibilityAbilityInfo failed.");
194         delete accessibilityAbilityInfo;
195         accessibilityAbilityInfo = nullptr;
196     }
197 
198     return accessibilityAbilityInfo;
199 }
200 } // namespace Accessibility
201 } // namespace OHOS