1 /* 2 * Copyright (c) 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_ABILITY_RUNTIME_UI_EXTENSION_BASE_H 17 #define OHOS_ABILITY_RUNTIME_UI_EXTENSION_BASE_H 18 19 #include <string> 20 21 #include "extension.h" 22 #include "extension_base.h" 23 #include "iremote_object.h" 24 #include "ui_extension_context.h" 25 #include "ui_extension_base_impl.h" 26 27 namespace OHOS { 28 namespace AbilityRuntime { 29 template<class C = UIExtensionContext> 30 class UIExtensionBase : public ExtensionBase<C> { 31 public: 32 UIExtensionBase() = default; ~UIExtensionBase()33 virtual ~UIExtensionBase() 34 { 35 auto context = ExtensionBase<C>::GetContext(); 36 if (context != nullptr) { 37 context->Unbind(); 38 } 39 } 40 Init(const std::shared_ptr<AppExecFwk::AbilityLocalRecord> & record,const std::shared_ptr<AppExecFwk::OHOSApplication> & application,std::shared_ptr<AppExecFwk::AbilityHandler> & handler,const sptr<IRemoteObject> & token)41 void Init(const std::shared_ptr<AppExecFwk::AbilityLocalRecord> &record, 42 const std::shared_ptr<AppExecFwk::OHOSApplication> &application, 43 std::shared_ptr<AppExecFwk::AbilityHandler> &handler, 44 const sptr<IRemoteObject> &token) override 45 { 46 ExtensionBase<C>::Init(record, application, handler, token); 47 if (impl_ != nullptr) { 48 impl_->SetAbilityInfo(Extension::abilityInfo_); 49 impl_->SetContext(ExtensionBase<C>::GetContext()); 50 auto extensionCommon = impl_->Init(record, application, handler, token); 51 ExtensionBase<C>::SetExtensionCommon(extensionCommon); 52 } 53 } 54 OnStart(const AAFwk::Want & want)55 void OnStart(const AAFwk::Want &want) override 56 { 57 Extension::OnStart(want); 58 if (impl_ != nullptr) { 59 auto launchParam = Extension::GetLaunchParam(); 60 impl_->OnStart(want, launchParam); 61 } 62 } 63 OnCommand(const AAFwk::Want & want,bool restart,int startId)64 void OnCommand(const AAFwk::Want &want, bool restart, int startId) override 65 { 66 Extension::OnCommand(want, restart, startId); 67 if (impl_ != nullptr) { 68 impl_->OnCommand(want, restart, startId); 69 } 70 } 71 OnCommandWindow(const AAFwk::Want & want,const sptr<AAFwk::SessionInfo> & sessionInfo,AAFwk::WindowCommand winCmd)72 void OnCommandWindow(const AAFwk::Want &want, const sptr<AAFwk::SessionInfo> &sessionInfo, 73 AAFwk::WindowCommand winCmd) override 74 { 75 Extension::OnCommandWindow(want, sessionInfo, winCmd); 76 if (impl_ != nullptr) { 77 impl_->OnCommandWindow(want, sessionInfo, winCmd); 78 } 79 } 80 OnStop()81 void OnStop() override 82 { 83 Extension::OnStop(); 84 if (impl_ != nullptr) { 85 impl_->OnStop(); 86 } 87 } 88 OnStop(AppExecFwk::AbilityTransactionCallbackInfo<> * callbackInfo,bool & isAsyncCallback)89 void OnStop(AppExecFwk::AbilityTransactionCallbackInfo<> *callbackInfo, bool &isAsyncCallback) override 90 { 91 Extension::OnStop(); 92 if (impl_ != nullptr) { 93 impl_->OnStop(callbackInfo, isAsyncCallback); 94 } 95 } 96 OnForeground(const Want & want,sptr<AAFwk::SessionInfo> sessionInfo)97 void OnForeground(const Want &want, sptr<AAFwk::SessionInfo> sessionInfo) override 98 { 99 Extension::OnForeground(want, sessionInfo); 100 if (impl_ != nullptr) { 101 impl_->OnForeground(want, sessionInfo); 102 } 103 } 104 OnBackground()105 void OnBackground() override 106 { 107 if (impl_ != nullptr) { 108 impl_->OnBackground(); 109 } 110 Extension::OnBackground(); 111 } 112 OnConfigurationUpdated(const AppExecFwk::Configuration & configuration)113 void OnConfigurationUpdated(const AppExecFwk::Configuration& configuration) override 114 { 115 Extension::OnConfigurationUpdated(configuration); 116 if (impl_ != nullptr) { 117 impl_->OnConfigurationUpdated(configuration); 118 } 119 } 120 Dump(const std::vector<std::string> & params,std::vector<std::string> & info)121 void Dump(const std::vector<std::string> ¶ms, std::vector<std::string> &info) override 122 { 123 Extension::Dump(params, info); 124 if (impl_ != nullptr) { 125 impl_->Dump(params, info); 126 } 127 } 128 OnAbilityResult(int requestCode,int resultCode,const Want & resultData)129 void OnAbilityResult(int requestCode, int resultCode, const Want &resultData) override 130 { 131 Extension::OnAbilityResult(requestCode, resultCode, resultData); 132 if (impl_ != nullptr) { 133 impl_->OnAbilityResult(requestCode, resultCode, resultData); 134 } 135 } 136 SetUIExtensionBaseImpl(const std::shared_ptr<UIExtensionBaseImpl> & impl)137 void SetUIExtensionBaseImpl(const std::shared_ptr<UIExtensionBaseImpl> &impl) 138 { 139 impl_ = impl; 140 } 141 142 private: 143 std::shared_ptr<UIExtensionBaseImpl> impl_ = nullptr; 144 }; 145 } // namespace AbilityRuntime 146 } // namespace OHOS 147 #endif // OHOS_ABILITY_RUNTIME_UI_EXTENSION_BASE_H 148