1 /* 2 * Copyright (c) 2021-2022 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_FORM_FWK_FORM_HOST_RECORD_H 17 #define OHOS_FORM_FWK_FORM_HOST_RECORD_H 18 19 #include <unordered_map> 20 #include <vector> 21 #include "fms_log_wrapper.h" 22 #include "form_host_callback.h" 23 #include "form_item_info.h" 24 #include "form_record.h" 25 #include "iremote_object.h" 26 27 namespace OHOS { 28 namespace AppExecFwk { 29 /** 30 * @class FormHostRecord 31 * Form host data. 32 */ 33 class FormHostRecord { 34 public: 35 /** 36 * @brief Create form host record. 37 * @param callback remote object. 38 * @param callingUid Calling uid. 39 */ 40 static FormHostRecord CreateRecord(const FormItemInfo &info, const sptr<IRemoteObject> &callback, int callingUid); 41 /** 42 * @brief Add form id. 43 * @param formId The Id of the form. 44 */ 45 void AddForm(int64_t formId); 46 /** 47 * @brief Delete form id. 48 * @param formId The Id of the form. 49 */ 50 void DelForm(int64_t formId); 51 /** 52 * @brief forms_ is empty or not. 53 * @return forms_ is empty or not. 54 */ 55 bool IsEmpty() const; 56 /** 57 * @brief formId is in forms_ or not. 58 * @param formId The Id of the form. 59 * @return formId is in forms_ or not. 60 */ 61 bool Contains(int64_t formId) const; 62 63 /** 64 * @brief Set refresh enable flag. 65 * @param formId The Id of the form. 66 * @param flag True for enable, false for disable. 67 */ 68 void SetEnableRefresh(int64_t formId, bool flag); 69 70 /** 71 * @brief Refresh enable or not. 72 * @param formId The Id of the form. 73 * @return true on enable, false on disable. 74 */ 75 bool IsEnableRefresh(int64_t formId) const; 76 77 /** 78 * @brief Set Update enable flag. 79 * @param formId The Id of the form. 80 * @param enable True for enable, false for disable. 81 */ 82 void SetEnableUpdate(int64_t formId, bool enable); 83 84 /** 85 * @brief update enable or not. 86 * @param formId The Id of the form. 87 * @return true on enable, false on disable. 88 */ 89 bool IsEnableUpdate(int64_t formId) const; 90 91 /** 92 * @brief Set need refresh enable flag. 93 * @param formId The Id of the form. 94 * @param flag True for enable, false for disable. 95 */ 96 void SetNeedRefresh(int64_t formId, bool flag); 97 /** 98 * @brief Need Refresh enable or not. 99 * @param formId The Id of the form. 100 * @return true on enable, false on disable. 101 */ 102 bool IsNeedRefresh(int64_t formId) const; 103 104 /** 105 * @brief Send form data to form host. 106 * @param id The Id of the form. 107 * @param record Form record. 108 */ 109 void OnAcquire(int64_t id, const FormRecord &record); 110 111 /** 112 * @brief Update form data to form host. 113 * @param id The Id of the form. 114 * @param record Form record. 115 */ 116 void OnUpdate(int64_t id, const FormRecord &record); 117 /** 118 * Send form uninstall message to form host. 119 * 120 * @param formIds the uninstalled form id list. 121 */ 122 void OnFormUninstalled(std::vector<int64_t> &formIds); 123 /** 124 * Send form state message to form host. 125 * 126 * @param state The form state. 127 * @param want The want of onAcquireFormState. 128 */ 129 void OnAcquireState(AppExecFwk::FormState state, const AAFwk::Want &want); 130 131 /** 132 * Send form data to form host. 133 * 134 * @param wantParams Indicates the data information acquired by the form. 135 * @param requestCode Indicates the requested id. 136 */ 137 void OnAcquireFormData(const AAFwk::WantParams &wantParams, int64_t requestCode); 138 139 /** 140 * @brief Release resource. 141 */ 142 void CleanResource(); 143 /** 144 * @brief Get caller Uid. 145 * @return the caller Uid. 146 */ GetCallerUid()147 int GetCallerUid() const 148 { 149 return callerUid_; 150 } 151 /** 152 * @brief Get client stub. 153 * @return client stub. 154 */ 155 sptr<IRemoteObject> GetFormHostClient() const; 156 /** 157 * @brief Get death recipient. 158 * @return death recipient. 159 */ 160 sptr<IRemoteObject::DeathRecipient> GetDeathRecipient() const; 161 /** 162 * @brief Set value of caller uid. 163 * @param callerUid Caller uid. 164 */ 165 void SetCallerUid(const int callerUid); 166 /** 167 * @brief Set value of client stub. 168 * @param formHostClient remote object. 169 */ 170 void SetFormHostClient(const sptr<IRemoteObject> &formHostClient); 171 /** 172 * @brief Set value of formHostCallback_. 173 * @param formHostCallback Form host callback object. 174 */ 175 void SetCallback(const std::shared_ptr<FormHostCallback> &formHostCallback); 176 /** 177 * @brief Set value of deathRecipient_. 178 * @param formHostCallback DeathRecipient object. 179 */ 180 void SetDeathRecipient(const sptr<IRemoteObject::DeathRecipient> &deathRecipient); 181 /** 182 * @brief Add deathRecipient object to formHostClient_. 183 * @param deathRecipient DeathRecipient object. 184 */ 185 void AddDeathRecipient(const sptr<IRemoteObject::DeathRecipient>& deathRecipient); 186 /** 187 * @brief Get hostBundleName_. 188 * @return hostBundleName_. 189 */ 190 std::string GetHostBundleName() const; 191 /** 192 * @brief Set hostBundleName_. 193 * @param hostBundleName Host bundle name. 194 */ 195 void SetHostBundleName(const std::string &hostBundleName); 196 197 /** 198 * @brief get forms count. 199 * @return the number of host form. 200 */ 201 int32_t GetFormsCount() const; 202 private: 203 int callerUid_ = 0; 204 sptr<IRemoteObject> formHostClient_ = nullptr; 205 std::shared_ptr<FormHostCallback> formHostCallback_ = nullptr; 206 sptr<IRemoteObject::DeathRecipient> deathRecipient_ = nullptr; 207 std::unordered_map<int64_t, bool> forms_; 208 std::unordered_map<int64_t, bool> enableUpdateMap_; 209 std::unordered_map<int64_t, bool> needRefresh_; 210 std::string hostBundleName_ = ""; 211 212 /** 213 * @class ClientDeathRecipient 214 * notices IRemoteBroker died. 215 */ 216 class ClientDeathRecipient : public IRemoteObject::DeathRecipient { 217 public: 218 /** 219 * @brief Constructor 220 */ 221 ClientDeathRecipient() = default; 222 ~ClientDeathRecipient() = default; 223 /** 224 * @brief handle remote object died event. 225 * @param remote remote object. 226 */ 227 void OnRemoteDied(const wptr<IRemoteObject> &remote) override; 228 }; 229 }; 230 } // namespace AppExecFwk 231 } // namespace OHOS 232 233 #endif // OHOS_FORM_FWK_FORM_HOST_RECORD_H 234