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