• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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         AppExecFwk::ExtensionAbilityType::LIVE_FORM
73     };
74 }
75 
IsUIExtension(const AppExecFwk::ExtensionAbilityType type)76 inline bool IsUIExtension(const AppExecFwk::ExtensionAbilityType type)
77 {
78     return GetUiExtensionSet().count(type) > 0;
79 }
80 
IsSystemUIExtension(const AppExecFwk::ExtensionAbilityType type)81 inline bool IsSystemUIExtension(const AppExecFwk::ExtensionAbilityType type)
82 {
83     const std::unordered_set<AppExecFwk::ExtensionAbilityType> systemUiExtensionSet = {
84         AppExecFwk::ExtensionAbilityType::SYSDIALOG_COMMON,
85         AppExecFwk::ExtensionAbilityType::SYSDIALOG_ATOMICSERVICEPANEL,
86         AppExecFwk::ExtensionAbilityType::SYSDIALOG_POWER,
87         AppExecFwk::ExtensionAbilityType::SYSDIALOG_MEETIMECALL,
88         AppExecFwk::ExtensionAbilityType::SYSDIALOG_MEETIMECONTACT,
89         AppExecFwk::ExtensionAbilityType::SYSDIALOG_MEETIMEMESSAGE,
90         AppExecFwk::ExtensionAbilityType::SYSDIALOG_PRINT,
91         AppExecFwk::ExtensionAbilityType::SYSPICKER_MEDIACONTROL,
92         AppExecFwk::ExtensionAbilityType::SYSPICKER_SHARE,
93         AppExecFwk::ExtensionAbilityType::SYSPICKER_MEETIMECONTACT,
94         AppExecFwk::ExtensionAbilityType::SYSPICKER_MEETIMECALLLOG,
95         AppExecFwk::ExtensionAbilityType::SYSPICKER_PHOTOPICKER,
96         AppExecFwk::ExtensionAbilityType::SYSPICKER_NAVIGATION,
97         AppExecFwk::ExtensionAbilityType::SYSPICKER_APPSELECTOR,
98         AppExecFwk::ExtensionAbilityType::UI,
99         AppExecFwk::ExtensionAbilityType::SYS_COMMON_UI,
100         AppExecFwk::ExtensionAbilityType::SYSPICKER_PHOTOEDITOR,
101         AppExecFwk::ExtensionAbilityType::ADS,
102         AppExecFwk::ExtensionAbilityType::SYSPICKER_AUDIOPICKER,
103         AppExecFwk::ExtensionAbilityType::AUTO_FILL_PASSWORD,
104         AppExecFwk::ExtensionAbilityType::SYSPICKER_CAMERA,
105         AppExecFwk::ExtensionAbilityType::AUTO_FILL_SMART,
106         AppExecFwk::ExtensionAbilityType::SYSPICKER_FILEPICKER,
107         AppExecFwk::ExtensionAbilityType::SYSDIALOG_USERAUTH,
108         AppExecFwk::ExtensionAbilityType::HMS_ACCOUNT,
109         AppExecFwk::ExtensionAbilityType::SYS_VISUAL,
110         AppExecFwk::ExtensionAbilityType::RECENT_PHOTO,
111         AppExecFwk::ExtensionAbilityType::AWC_WEBPAGE,
112         AppExecFwk::ExtensionAbilityType::AWC_NEWSFEED
113     };
114     return systemUiExtensionSet.find(type) != systemUiExtensionSet.end();
115 }
116 
117 // In this case, extension which be starting needs that caller should be the system app, otherwise not supported.
IsSystemCallerNeeded(const AppExecFwk::ExtensionAbilityType type)118 inline bool IsSystemCallerNeeded(const AppExecFwk::ExtensionAbilityType type)
119 {
120     const std::unordered_set<AppExecFwk::ExtensionAbilityType> uiExtensionStartingSet = {
121         AppExecFwk::ExtensionAbilityType::PHOTO_EDITOR,
122         AppExecFwk::ExtensionAbilityType::INSIGHT_INTENT_UI,
123         AppExecFwk::ExtensionAbilityType::LIVEVIEW_LOCKSCREEN,
124         AppExecFwk::ExtensionAbilityType::SHARE,
125         AppExecFwk::ExtensionAbilityType::ACTION,
126         AppExecFwk::ExtensionAbilityType::STATUS_BAR_VIEW,
127         AppExecFwk::ExtensionAbilityType::VOIP,
128         AppExecFwk::ExtensionAbilityType::FORM_EDIT,
129         AppExecFwk::ExtensionAbilityType::LIVE_FORM
130     };
131     return uiExtensionStartingSet.find(type) != uiExtensionStartingSet.end();
132 }
133 
134 // In this collection, extension can be embedded by public app, which requires vertical businesses to ensure security.
IsPublicForEmbedded(const AppExecFwk::ExtensionAbilityType type)135 inline bool IsPublicForEmbedded(const AppExecFwk::ExtensionAbilityType type)
136 {
137     const std::unordered_set<AppExecFwk::ExtensionAbilityType> publicForEmbeddedSet = {
138         AppExecFwk::ExtensionAbilityType::EMBEDDED_UI, // EMBEDDED_UI usage within the app
139         AppExecFwk::ExtensionAbilityType::ADS,
140         AppExecFwk::ExtensionAbilityType::SYSPICKER_MEDIACONTROL,
141         AppExecFwk::ExtensionAbilityType::SYS_VISUAL,
142         AppExecFwk::ExtensionAbilityType::AUTO_FILL_SMART,
143         AppExecFwk::ExtensionAbilityType::AUTO_FILL_PASSWORD
144     };
145     return publicForEmbeddedSet.find(type) != publicForEmbeddedSet.end();
146 }
147 
148 // In this collection, extension can be embedded by public app, which some UX effects are constrained
IsPublicForConstrainedEmbedded(const AppExecFwk::ExtensionAbilityType type)149 inline bool IsPublicForConstrainedEmbedded(const AppExecFwk::ExtensionAbilityType type)
150 {
151     const std::unordered_set<AppExecFwk::ExtensionAbilityType> publicForConstrainedEmbeddedSet = {
152         AppExecFwk::ExtensionAbilityType::SYSPICKER_PHOTOPICKER,
153         AppExecFwk::ExtensionAbilityType::RECENT_PHOTO
154     };
155     return publicForConstrainedEmbeddedSet.find(type) != publicForConstrainedEmbeddedSet.end();
156 }
157 
IsOnlyForModal(const AppExecFwk::ExtensionAbilityType type)158 inline bool IsOnlyForModal(const AppExecFwk::ExtensionAbilityType type)
159 {
160     const std::unordered_set<AppExecFwk::ExtensionAbilityType> onlyForMoadalSet = {
161         AppExecFwk::ExtensionAbilityType::AWC_WEBPAGE,
162         AppExecFwk::ExtensionAbilityType::AWC_NEWSFEED
163     };
164     return onlyForMoadalSet.find(type) != onlyForMoadalSet.end();
165 }
166 
IsEnterpriseAdmin(const AppExecFwk::ExtensionAbilityType type)167 inline bool IsEnterpriseAdmin(const AppExecFwk::ExtensionAbilityType type)
168 {
169     bool enterpriseAdminSa = (IPCSkeleton::GetCallingUid() == EDM_SA_UID);
170     bool isEnterpriseAdmin = (type == AppExecFwk::ExtensionAbilityType::ENTERPRISE_ADMIN);
171     return enterpriseAdminSa && isEnterpriseAdmin;
172 }
173 
IsWindowExtension(const AppExecFwk::ExtensionAbilityType type)174 inline bool IsWindowExtension(const AppExecFwk::ExtensionAbilityType type)
175 {
176     return type == AppExecFwk::ExtensionAbilityType::WINDOW;
177 }
178 } // namespace UIExtensionUtils
179 } // namespace AAFwk
180 } // namespace OHOS
181 #endif // OHOS_AAFwk_UI_EXTENSION_UTILS_H
182