/* * Copyright (c) 2023 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef OHOS_FORM_FWK_FORM_RENDER_MGR_INNER_H #define OHOS_FORM_FWK_FORM_RENDER_MGR_INNER_H #include #include #include #include #include "form_record.h" #include "form_render_connection.h" #include "form_render_interface.h" #include "want.h" namespace OHOS { namespace AppExecFwk { using Want = OHOS::AAFwk::Want; using WantParams = OHOS::AAFwk::WantParams; /** * @class FormRenderMgrInner * FormRenderMgrInner provides a facility for managing form render life cycle. */ class FormRenderMgrInner { public: FormRenderMgrInner(); virtual ~FormRenderMgrInner(); virtual ErrCode RenderForm( const FormRecord &formRecord, Want &want, const sptr &hostToken = nullptr); ErrCode UpdateRenderingForm(FormRecord &formRecord, const FormProviderData &formProviderData, const WantParams &wantParams, bool mergeData); ErrCode StopRenderingForm(int64_t formId, const FormRecord &formRecord, const std::string &compId = "", const sptr &hostToken = nullptr); ErrCode ReloadForm(const std::vector &&formRecords, const std::string &bundleName, int32_t userId); ErrCode StopRenderingFormCallback(int64_t formId, const Want &want); ErrCode AddConnection(int64_t formId, sptr connection); void RemoveConnection(int64_t formId); ErrCode checkConnectionsFormIds(std::vector formIds, std::vector &needconFormIds); void AddRenderDeathRecipient(const sptr &renderRemoteObj); void RerenderAllForms(); void CleanFormHost(const sptr &host); void OnRenderingBlock(const std::string &bundleName); ErrCode ReleaseRenderer(int64_t formId, const FormRecord &formRecord, const std::string &compId); void PostOnUnlockTask(); void NotifyScreenOn(); void PostSetVisibleChangeTask(int64_t formId, bool isVisible); int32_t GetReRenderCount() const; sptr GetRenderRemoteObj() const; void SetRenderRemoteObj(sptr remoteObject); ErrCode RecycleForms(const std::vector &formIds, const Want &want, const sptr &remoteObjectOfHost); ErrCode RecoverForms(const std::vector &formIds, const WantParams &wantParams); ErrCode UpdateFormSize(const int64_t &formId, float width, float height, float borderWidth); void SetUserId(int32_t userId); int32_t GetUserId() const; void RerenderAllFormsImmediate(); void DisconnectAllRenderConnections(); private: ErrCode ConnectRenderService(const sptr &connection, int32_t level) const; void DisconnectRenderService(const sptr connection, size_t size) const; void AddHostToken(const sptr &host, int64_t formId); void RemoveHostToken(const sptr &host); void NotifyHostRenderServiceIsDead() const; void FillBundleInfo(Want &want, const std::string &bundleName) const; void CheckIfFormRecycled(FormRecord &formRecord, Want& want) const; ErrCode GetConnectionAndRenderForm(FormRecord &formRecord, Want &want); ErrCode GetRenderObject(sptr &renderObj); private: class RemoteObjHash { public: size_t operator() (const sptr &remoteObj) const { return reinterpret_cast(remoteObj.GetRefPtr()); } }; mutable std::mutex resourceMutex_; mutable std::shared_mutex renderRemoteObjMutex_; // std::unordered_map> renderFormConnections_; // std::unordered_map, std::unordered_set, RemoteObjHash> etsHosts_; sptr renderRemoteObj_ = nullptr; sptr renderDeathRecipient_ = nullptr; std::atomic atomicRerenderCount_ = 0; // userId_ is Active User bool isActiveUser_ = true; int32_t userId_ = 0; }; /** * @class FormRenderRecipient * FormRenderRecipient notices IRemoteBroker died. */ class FormRenderRecipient : public IRemoteObject::DeathRecipient { public: using RemoteDiedHandler = std::function; explicit FormRenderRecipient(RemoteDiedHandler handler); virtual ~FormRenderRecipient(); void OnRemoteDied(const wptr &remote) override; private: RemoteDiedHandler handler_; }; } // namespace AppExecFwk } // namespace OHOS #endif // OHOS_FORM_FWK_FORM_RENDER_MGR_INNER_H