• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2021 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 #include "core/components/page/page_element.h"
17 
18 #include "base/log/dump_log.h"
19 #include "core/common/frontend.h"
20 #include "core/common/text_field_manager.h"
21 #include "core/components/transform/transform_element.h"
22 
23 namespace OHOS::Ace {
24 
PageElement(int32_t pageId,const std::string & pageUrl,const ComposeId & id)25 PageElement::PageElement(int32_t pageId, const std::string& pageUrl, const ComposeId& id)
26     : ComposedElement(id), pageId_(pageId), pageUrl_(pageUrl)
27 {}
28 
PageElement(int32_t pageId,const std::string & pageUrl,const ComposeId & cardComposeId,const ComposeId & id)29 PageElement::PageElement(
30     int32_t pageId, const std::string& pageUrl, const ComposeId& cardComposeId, const ComposeId& id)
31     : ComposedElement(id), pageId_(pageId), pageUrl_(pageUrl), cardComposeId_(cardComposeId)
32 {}
33 
~PageElement()34 PageElement::~PageElement()
35 {
36     auto context = context_.Upgrade();
37     if (!context) {
38         return;
39     }
40     auto textFieldManager = context->GetTextFieldManager();
41     if (textFieldManager) {
42         textFieldManager->RemovePageId(pageId_);
43     }
44 }
45 
RequestNextFocus(bool vertical,bool reverse,const Rect & rect)46 bool PageElement::RequestNextFocus(bool vertical, bool reverse, const Rect& rect)
47 {
48     // Do not precess logic.
49     return false;
50 }
51 
RemoveSharedTransition(const ShareId & shareId)52 void PageElement::RemoveSharedTransition(const ShareId& shareId)
53 {
54     LOGD("Remove shared transition id:%{public}s", shareId.c_str());
55     sharedTransitionElementMap_.erase(shareId);
56 }
57 
AddSharedTransition(const RefPtr<SharedTransitionElement> & shared)58 void PageElement::AddSharedTransition(const RefPtr<SharedTransitionElement>& shared)
59 {
60     if (!shared) {
61         LOGE("Add shared transition failed. element is null.");
62         return;
63     }
64     LOGD("Add shared transition element id:%{public}s", shared->GetShareId().c_str());
65     sharedTransitionElementMap_[shared->GetShareId()] = shared;
66 }
67 
GetSharedTransitionMap() const68 const PageElement::SharedTransitionMap& PageElement::GetSharedTransitionMap() const
69 {
70     return sharedTransitionElementMap_;
71 }
72 
SetHidden(bool hidden)73 void PageElement::SetHidden(bool hidden)
74 {
75     auto render = GetRenderNode();
76     if (render) {
77         auto parent = render->GetParent().Upgrade();
78         if (parent) {
79             parent->MarkNeedRender();
80         }
81         render->SetHidden(hidden);
82     }
83 
84     for (auto&& [id, callback] : hiddenCallbackMap_) {
85         callback(hidden);
86     }
87 }
88 
RemoveCardTransition(int32_t retakeId)89 void PageElement::RemoveCardTransition(int32_t retakeId)
90 {
91     cardTransitionMap_.erase(retakeId);
92 }
93 
AddCardTransition(const RefPtr<TransformElement> & transform)94 void PageElement::AddCardTransition(const RefPtr<TransformElement>& transform)
95 {
96     if (!transform) {
97         LOGE("Add transform transition failed. element is null.");
98         return;
99     }
100     cardTransitionMap_[transform->GetRetakeId()] = transform;
101 }
102 
GetCardTransitionMap() const103 const PageElement::CardTransitionMap& PageElement::GetCardTransitionMap() const
104 {
105     return cardTransitionMap_;
106 }
107 
AddGeometryTransition(const std::string & id,WeakPtr<BoxElement> & boxElement,AnimationOption & option)108 void PageElement::AddGeometryTransition(const std::string& id, WeakPtr<BoxElement>& boxElement, AnimationOption& option)
109 {
110     if (geometryTransitionMap_.find(id) == geometryTransitionMap_.end()) {
111         GeometryTransitionInfo sharedInfo;
112         sharedInfo.sharedAnimationOption = option;
113         sharedInfo.appearElement = boxElement;
114         sharedInfo.isNeedCreate = false;
115         geometryTransitionMap_.emplace(id, sharedInfo);
116     } else {
117         if (geometryTransitionMap_[id].appearElement != boxElement && !geometryTransitionMap_[id].isNeedCreate) {
118             geometryTransitionMap_[id].disappearElement = geometryTransitionMap_[id].appearElement;
119             geometryTransitionMap_[id].appearElement = boxElement;
120             geometryTransitionMap_[id].sharedAnimationOption = option;
121             geometryTransitionMap_[id].isNeedCreate = true;
122         }
123     }
124 }
125 
GetGeometryTransition() const126 const PageElement::GeometryTransitionMap& PageElement::GetGeometryTransition() const
127 {
128     return geometryTransitionMap_;
129 }
130 
RemoveGeometryTransition(const std::string & id)131 void PageElement::RemoveGeometryTransition(const std::string& id)
132 {
133     if (geometryTransitionMap_.find(id) != geometryTransitionMap_.end()) {
134         geometryTransitionMap_.erase(id);
135     }
136 }
137 
FinishCreateGeometryTransition(const std::string & id)138 void PageElement::FinishCreateGeometryTransition(const std::string& id)
139 {
140     geometryTransitionMap_[id].isNeedCreate = false;
141 }
142 
Dump()143 void PageElement::Dump()
144 {
145     for (const auto& item : geometryTransitionMap_) {
146         DumpLog::GetInstance().AddDesc(std::string("geometryTransitionID: ").append(item.first));
147         auto element = item.second.appearElement.Upgrade();
148         if (!element) {
149             continue;
150         }
151         std::string retakeId = std::to_string(element->GetRetakeId());
152         DumpLog::GetInstance().AddDesc(std::string("RetakeId: ").append(retakeId));
153     }
154 }
155 
156 } // namespace OHOS::Ace