1 /*
2 * Copyright (c) 2023-2024 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 #ifndef OHOS_AAFwk_UI_EXTENSION_UTILS_H
17 #define OHOS_AAFwk_UI_EXTENSION_UTILS_H
18
19 #include <unordered_set>
20
21 #include "extension_ability_info.h"
22 #include "ipc_skeleton.h"
23
24 namespace OHOS {
25 namespace AAFwk {
26 namespace {
27 constexpr int EDM_SA_UID = 3057;
28 }
29 namespace UIExtensionUtils {
30 // ui extension type list
GetUiExtensionSet()31 inline std::unordered_set<AppExecFwk::ExtensionAbilityType> GetUiExtensionSet()
32 {
33 return std::unordered_set<AppExecFwk::ExtensionAbilityType> {
34 AppExecFwk::ExtensionAbilityType::SHARE,
35 AppExecFwk::ExtensionAbilityType::ACTION,
36 AppExecFwk::ExtensionAbilityType::EMBEDDED_UI,
37 AppExecFwk::ExtensionAbilityType::INSIGHT_INTENT_UI,
38 AppExecFwk::ExtensionAbilityType::AUTO_FILL_PASSWORD,
39 AppExecFwk::ExtensionAbilityType::UI,
40 AppExecFwk::ExtensionAbilityType::SYSPICKER_MEDIACONTROL,
41 AppExecFwk::ExtensionAbilityType::SYSDIALOG_USERAUTH,
42 AppExecFwk::ExtensionAbilityType::SYSDIALOG_COMMON,
43 AppExecFwk::ExtensionAbilityType::SYSDIALOG_ATOMICSERVICEPANEL,
44 AppExecFwk::ExtensionAbilityType::SYSDIALOG_POWER,
45 AppExecFwk::ExtensionAbilityType::SYSPICKER_SHARE,
46 AppExecFwk::ExtensionAbilityType::HMS_ACCOUNT,
47 AppExecFwk::ExtensionAbilityType::ADS,
48 AppExecFwk::ExtensionAbilityType::VOIP,
49 AppExecFwk::ExtensionAbilityType::STATUS_BAR_VIEW,
50 AppExecFwk::ExtensionAbilityType::SYSDIALOG_MEETIMECALL,
51 AppExecFwk::ExtensionAbilityType::SYSDIALOG_MEETIMECONTACT,
52 AppExecFwk::ExtensionAbilityType::SYSDIALOG_MEETIMEMESSAGE,
53 AppExecFwk::ExtensionAbilityType::SYSDIALOG_PRINT,
54 AppExecFwk::ExtensionAbilityType::SYSPICKER_MEETIMECONTACT,
55 AppExecFwk::ExtensionAbilityType::SYSPICKER_MEETIMECALLLOG,
56 AppExecFwk::ExtensionAbilityType::SYSPICKER_PHOTOPICKER,
57 AppExecFwk::ExtensionAbilityType::SYS_COMMON_UI,
58 AppExecFwk::ExtensionAbilityType::SYSPICKER_NAVIGATION,
59 AppExecFwk::ExtensionAbilityType::SYSPICKER_APPSELECTOR,
60 AppExecFwk::ExtensionAbilityType::SYSPICKER_CAMERA,
61 AppExecFwk::ExtensionAbilityType::SYSPICKER_FILEPICKER,
62 AppExecFwk::ExtensionAbilityType::AUTO_FILL_SMART,
63 AppExecFwk::ExtensionAbilityType::LIVEVIEW_LOCKSCREEN,
64 AppExecFwk::ExtensionAbilityType::SYSPICKER_PHOTOEDITOR,
65 AppExecFwk::ExtensionAbilityType::PHOTO_EDITOR,
66 AppExecFwk::ExtensionAbilityType::SYSPICKER_AUDIOPICKER,
67 AppExecFwk::ExtensionAbilityType::SYS_VISUAL,
68 AppExecFwk::ExtensionAbilityType::RECENT_PHOTO,
69 AppExecFwk::ExtensionAbilityType::FORM_EDIT,
70 AppExecFwk::ExtensionAbilityType::AWC_WEBPAGE,
71 AppExecFwk::ExtensionAbilityType::AWC_NEWSFEED
72 };
73 }
74
IsUIExtension(const AppExecFwk::ExtensionAbilityType type)75 inline bool IsUIExtension(const AppExecFwk::ExtensionAbilityType type)
76 {
77 return GetUiExtensionSet().count(type) > 0;
78 }
79
IsSystemUIExtension(const AppExecFwk::ExtensionAbilityType type)80 inline bool IsSystemUIExtension(const AppExecFwk::ExtensionAbilityType type)
81 {
82 const std::unordered_set<AppExecFwk::ExtensionAbilityType> systemUiExtensionSet = {
83 AppExecFwk::ExtensionAbilityType::SYSDIALOG_COMMON,
84 AppExecFwk::ExtensionAbilityType::SYSDIALOG_ATOMICSERVICEPANEL,
85 AppExecFwk::ExtensionAbilityType::SYSDIALOG_POWER,
86 AppExecFwk::ExtensionAbilityType::SYSDIALOG_MEETIMECALL,
87 AppExecFwk::ExtensionAbilityType::SYSDIALOG_MEETIMECONTACT,
88 AppExecFwk::ExtensionAbilityType::SYSDIALOG_MEETIMEMESSAGE,
89 AppExecFwk::ExtensionAbilityType::SYSDIALOG_PRINT,
90 AppExecFwk::ExtensionAbilityType::SYSPICKER_MEDIACONTROL,
91 AppExecFwk::ExtensionAbilityType::SYSPICKER_SHARE,
92 AppExecFwk::ExtensionAbilityType::SYSPICKER_MEETIMECONTACT,
93 AppExecFwk::ExtensionAbilityType::SYSPICKER_MEETIMECALLLOG,
94 AppExecFwk::ExtensionAbilityType::SYSPICKER_PHOTOPICKER,
95 AppExecFwk::ExtensionAbilityType::SYSPICKER_NAVIGATION,
96 AppExecFwk::ExtensionAbilityType::SYSPICKER_APPSELECTOR,
97 AppExecFwk::ExtensionAbilityType::UI,
98 AppExecFwk::ExtensionAbilityType::SYS_COMMON_UI,
99 AppExecFwk::ExtensionAbilityType::SYSPICKER_PHOTOEDITOR,
100 AppExecFwk::ExtensionAbilityType::ADS,
101 AppExecFwk::ExtensionAbilityType::SYSPICKER_AUDIOPICKER,
102 AppExecFwk::ExtensionAbilityType::AUTO_FILL_PASSWORD,
103 AppExecFwk::ExtensionAbilityType::SYSPICKER_CAMERA,
104 AppExecFwk::ExtensionAbilityType::AUTO_FILL_SMART,
105 AppExecFwk::ExtensionAbilityType::SYSPICKER_FILEPICKER,
106 AppExecFwk::ExtensionAbilityType::SYSDIALOG_USERAUTH,
107 AppExecFwk::ExtensionAbilityType::HMS_ACCOUNT,
108 AppExecFwk::ExtensionAbilityType::SYS_VISUAL,
109 AppExecFwk::ExtensionAbilityType::RECENT_PHOTO,
110 AppExecFwk::ExtensionAbilityType::AWC_WEBPAGE,
111 AppExecFwk::ExtensionAbilityType::AWC_NEWSFEED
112 };
113 return systemUiExtensionSet.find(type) != systemUiExtensionSet.end();
114 }
115
116 // In this case, extension which be starting needs that caller should be the system app, otherwise not supported.
IsSystemCallerNeeded(const AppExecFwk::ExtensionAbilityType type)117 inline bool IsSystemCallerNeeded(const AppExecFwk::ExtensionAbilityType type)
118 {
119 const std::unordered_set<AppExecFwk::ExtensionAbilityType> uiExtensionStartingSet = {
120 AppExecFwk::ExtensionAbilityType::PHOTO_EDITOR,
121 AppExecFwk::ExtensionAbilityType::INSIGHT_INTENT_UI,
122 AppExecFwk::ExtensionAbilityType::LIVEVIEW_LOCKSCREEN,
123 AppExecFwk::ExtensionAbilityType::SHARE,
124 AppExecFwk::ExtensionAbilityType::ACTION,
125 AppExecFwk::ExtensionAbilityType::STATUS_BAR_VIEW,
126 AppExecFwk::ExtensionAbilityType::VOIP,
127 AppExecFwk::ExtensionAbilityType::FORM_EDIT
128 };
129 return uiExtensionStartingSet.find(type) != uiExtensionStartingSet.end();
130 }
131
132 // In this collection, extension can be embedded by public app, which requires vertical businesses to ensure security.
IsPublicForEmbedded(const AppExecFwk::ExtensionAbilityType type)133 inline bool IsPublicForEmbedded(const AppExecFwk::ExtensionAbilityType type)
134 {
135 const std::unordered_set<AppExecFwk::ExtensionAbilityType> publicForEmbeddedSet = {
136 AppExecFwk::ExtensionAbilityType::EMBEDDED_UI, // EMBEDDED_UI usage within the app
137 AppExecFwk::ExtensionAbilityType::ADS,
138 AppExecFwk::ExtensionAbilityType::SYSPICKER_MEDIACONTROL,
139 AppExecFwk::ExtensionAbilityType::SYS_VISUAL,
140 AppExecFwk::ExtensionAbilityType::AUTO_FILL_SMART,
141 AppExecFwk::ExtensionAbilityType::AUTO_FILL_PASSWORD
142 };
143 return publicForEmbeddedSet.find(type) != publicForEmbeddedSet.end();
144 }
145
146 // In this collection, extension can be embedded by public app, which some UX effects are constrained
IsPublicForConstrainedEmbedded(const AppExecFwk::ExtensionAbilityType type)147 inline bool IsPublicForConstrainedEmbedded(const AppExecFwk::ExtensionAbilityType type)
148 {
149 const std::unordered_set<AppExecFwk::ExtensionAbilityType> publicForConstrainedEmbeddedSet = {
150 AppExecFwk::ExtensionAbilityType::SYSPICKER_PHOTOPICKER,
151 AppExecFwk::ExtensionAbilityType::RECENT_PHOTO
152 };
153 return publicForConstrainedEmbeddedSet.find(type) != publicForConstrainedEmbeddedSet.end();
154 }
155
IsOnlyForModal(const AppExecFwk::ExtensionAbilityType type)156 inline bool IsOnlyForModal(const AppExecFwk::ExtensionAbilityType type)
157 {
158 const std::unordered_set<AppExecFwk::ExtensionAbilityType> onlyForMoadalSet = {
159 AppExecFwk::ExtensionAbilityType::AWC_WEBPAGE,
160 AppExecFwk::ExtensionAbilityType::AWC_NEWSFEED
161 };
162 return onlyForMoadalSet.find(type) != onlyForMoadalSet.end();
163 }
164
IsEnterpriseAdmin(const AppExecFwk::ExtensionAbilityType type)165 inline bool IsEnterpriseAdmin(const AppExecFwk::ExtensionAbilityType type)
166 {
167 bool enterpriseAdminSa = (IPCSkeleton::GetCallingUid() == EDM_SA_UID);
168 bool isEnterpriseAdmin = (type == AppExecFwk::ExtensionAbilityType::ENTERPRISE_ADMIN);
169 return enterpriseAdminSa && isEnterpriseAdmin;
170 }
171
IsWindowExtension(const AppExecFwk::ExtensionAbilityType type)172 inline bool IsWindowExtension(const AppExecFwk::ExtensionAbilityType type)
173 {
174 return type == AppExecFwk::ExtensionAbilityType::WINDOW;
175 }
176 } // namespace UIExtensionUtils
177 } // namespace AAFwk
178 } // namespace OHOS
179 #endif // OHOS_AAFwk_UI_EXTENSION_UTILS_H
180