@quicktvui/ai 1.0.7 → 1.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (204) hide show
  1. package/package.json +1 -1
  2. package/rules/.clinerules +27 -4
  3. package/rules/.cursorrules +27 -4
  4. package/rules/.github/copilot-instructions.md +27 -4
  5. package/rules/.source/hippy/extend_views/CoverFlowHorizontalView.java +203 -0
  6. package/rules/.source/hippy/extend_views/CoverFlowVerticalView.java +203 -0
  7. package/rules/.source/hippy/extend_views/CoverFlowViewController.java +195 -0
  8. package/rules/.source/hippy/extend_views/EngineRootView.java +125 -0
  9. package/rules/.source/hippy/extend_views/ExtendTag.java +83 -0
  10. package/rules/.source/hippy/extend_views/FocusSearchHelper.java +124 -0
  11. package/rules/.source/hippy/extend_views/IRecyclerItemView.java +12 -0
  12. package/rules/.source/hippy/extend_views/JSEventHandleView.java +5 -0
  13. package/rules/.source/hippy/extend_views/MarqueeRelayManager.java +133 -0
  14. package/rules/.source/hippy/extend_views/MarqueeRelayTextView.java +211 -0
  15. package/rules/.source/hippy/extend_views/ProgressBarView.java +83 -0
  16. package/rules/.source/hippy/extend_views/ProgressBarViewController.java +145 -0
  17. package/rules/.source/hippy/extend_views/SeekBarView.java +104 -0
  18. package/rules/.source/hippy/extend_views/SeekBarViewController.java +218 -0
  19. package/rules/.source/hippy/extend_views/StateImageView.java +149 -0
  20. package/rules/.source/hippy/extend_views/StateImageViewController.java +34 -0
  21. package/rules/.source/hippy/extend_views/TVButtonView.java +314 -0
  22. package/rules/.source/hippy/extend_views/TVButtonViewController.java +89 -0
  23. package/rules/.source/hippy/extend_views/TVTextView.java +684 -0
  24. package/rules/.source/hippy/extend_views/TVViewActor.java +811 -0
  25. package/rules/.source/hippy/extend_views/TVViewActorHost.java +6 -0
  26. package/rules/.source/hippy/extend_views/TVViewActor/346/216/245/345/205/245.md +66 -0
  27. package/rules/.source/hippy/extend_views/TemplateUtil.java +336 -0
  28. package/rules/.source/hippy/extend_views/TextButtonNode.java +47 -0
  29. package/rules/.source/hippy/extend_views/TextViewController.java +377 -0
  30. package/rules/.source/hippy/extend_views/fastlist/CenterFlyInAnimator.java +96 -0
  31. package/rules/.source/hippy/extend_views/fastlist/ChildOnScreenScroller.java +548 -0
  32. package/rules/.source/hippy/extend_views/fastlist/ClonedViewTag.java +17 -0
  33. package/rules/.source/hippy/extend_views/fastlist/EventDeliverer.java +55 -0
  34. package/rules/.source/hippy/extend_views/fastlist/FastAdapter.java +4683 -0
  35. package/rules/.source/hippy/extend_views/fastlist/FastAdapterUtil.java +982 -0
  36. package/rules/.source/hippy/extend_views/fastlist/FastFlexNode.java +48 -0
  37. package/rules/.source/hippy/extend_views/fastlist/FastFlexView.java +873 -0
  38. package/rules/.source/hippy/extend_views/fastlist/FastFlexViewController.java +130 -0
  39. package/rules/.source/hippy/extend_views/fastlist/FastItemNode.java +67 -0
  40. package/rules/.source/hippy/extend_views/fastlist/FastItemView.java +306 -0
  41. package/rules/.source/hippy/extend_views/fastlist/FastItemViewController.java +106 -0
  42. package/rules/.source/hippy/extend_views/fastlist/FastListModule.java +95 -0
  43. package/rules/.source/hippy/extend_views/fastlist/FastListNode.java +90 -0
  44. package/rules/.source/hippy/extend_views/fastlist/FastListView.java +2466 -0
  45. package/rules/.source/hippy/extend_views/fastlist/FastListViewController.java +1038 -0
  46. package/rules/.source/hippy/extend_views/fastlist/FastListView/346/270/262/346/237/223/346/265/201/347/250/213/345/233/276.graffle +0 -0
  47. package/rules/.source/hippy/extend_views/fastlist/FastPendingView.java +47 -0
  48. package/rules/.source/hippy/extend_views/fastlist/ItemDecorations.java +71 -0
  49. package/rules/.source/hippy/extend_views/fastlist/ItemStoreNode.java +64 -0
  50. package/rules/.source/hippy/extend_views/fastlist/ItemStoreView.java +13 -0
  51. package/rules/.source/hippy/extend_views/fastlist/ItemStoreViewController.java +45 -0
  52. package/rules/.source/hippy/extend_views/fastlist/ListItemHolder.java +7 -0
  53. package/rules/.source/hippy/extend_views/fastlist/ListViewControlProp.java +41 -0
  54. package/rules/.source/hippy/extend_views/fastlist/MouseRecycleView.java +509 -0
  55. package/rules/.source/hippy/extend_views/fastlist/OnFastItemClickListener.java +12 -0
  56. package/rules/.source/hippy/extend_views/fastlist/OnFastItemFocusChangeListener.java +9 -0
  57. package/rules/.source/hippy/extend_views/fastlist/OnFastScrollStateChangedListener.java +7 -0
  58. package/rules/.source/hippy/extend_views/fastlist/PendingListNode.java +18 -0
  59. package/rules/.source/hippy/extend_views/fastlist/PendingViewController.java +13 -0
  60. package/rules/.source/hippy/extend_views/fastlist/PostHandlerView.java +6 -0
  61. package/rules/.source/hippy/extend_views/fastlist/PostTaskHolder.java +20 -0
  62. package/rules/.source/hippy/extend_views/fastlist/ReplaceChildController.java +105 -0
  63. package/rules/.source/hippy/extend_views/fastlist/ReplaceChildView.java +312 -0
  64. package/rules/.source/hippy/extend_views/fastlist/TVListView.java +3692 -0
  65. package/rules/.source/hippy/extend_views/fastlist/TemplateCodeParser.java +247 -0
  66. package/rules/.source/hippy/extend_views/fastlist/Utils.java +572 -0
  67. package/rules/.source/hippy/extend_views/fastlist/ViewTag.java +317 -0
  68. package/rules/.source/hippy/extend_views/fastlist/VirtualListView.java +8 -0
  69. package/rules/.source/hippy/extend_views/fastlist/diff/FastListDataBindingHelper.java +320 -0
  70. package/rules/.source/hippy/extend_views/fastlist/diff/KeyDiffHelper.java +289 -0
  71. package/rules/.source/hippy/extend_views/fastlist/diff/NoKeyDiffHelper.java +278 -0
  72. package/rules/.source/hippy/extend_views/tag/FontTag.java +53 -0
  73. package/rules/.source/hippy/extend_views/tag/HtmlTag.java +191 -0
  74. package/rules/.source/hippy/extend_views/tag/HtmlTagHandler.java +185 -0
  75. package/rules/.source/hippy/extend_views/tag/SpanTag.java +160 -0
  76. package/rules/.source/hippy/extend_views/tag/TextFontSpan.java +102 -0
  77. package/rules/.source/hippy/extend_views/waterfall/Chunk.java +10 -0
  78. package/rules/.source/hippy/extend_views/waterfall/ChunkGroup.java +5 -0
  79. package/rules/.source/hippy/extend_views/waterfall/Section.java +4 -0
  80. package/rules/.source/hippy/extend_views/waterfall/Tabs.java +5 -0
  81. package/rules/.source/hippy/extend_views/waterfall/WaterfallUtils.java +26 -0
  82. package/rules/.source/hippy/hippy_uimanager/ControllerHolder.java +30 -0
  83. package/rules/.source/hippy/hippy_uimanager/ControllerManager.java +651 -0
  84. package/rules/.source/hippy/hippy_uimanager/ControllerRegistry.java +102 -0
  85. package/rules/.source/hippy/hippy_uimanager/ControllerUpdateManger.java +252 -0
  86. package/rules/.source/hippy/hippy_uimanager/CustomControllerHelper.java +425 -0
  87. package/rules/.source/hippy/hippy_uimanager/DiffUtils.java +526 -0
  88. package/rules/.source/hippy/hippy_uimanager/ExtendViewGroup.java +36 -0
  89. package/rules/.source/hippy/hippy_uimanager/HippyCustomViewCreator.java +29 -0
  90. package/rules/.source/hippy/hippy_uimanager/HippyGroupController.java +83 -0
  91. package/rules/.source/hippy/hippy_uimanager/HippyViewBase.java +27 -0
  92. package/rules/.source/hippy/hippy_uimanager/HippyViewController.java +2189 -0
  93. package/rules/.source/hippy/hippy_uimanager/HippyViewEvent.java +52 -0
  94. package/rules/.source/hippy/hippy_uimanager/IHippyZIndexViewGroup.java +24 -0
  95. package/rules/.source/hippy/hippy_uimanager/InternalExtendViewUtil.java +395 -0
  96. package/rules/.source/hippy/hippy_uimanager/ListItemRenderNode.java +143 -0
  97. package/rules/.source/hippy/hippy_uimanager/ListViewRenderNode.java +44 -0
  98. package/rules/.source/hippy/hippy_uimanager/MatrixUtil.java +470 -0
  99. package/rules/.source/hippy/hippy_uimanager/NativeGestureDispatcher.java +349 -0
  100. package/rules/.source/hippy/hippy_uimanager/NativeGestureProcessor.java +188 -0
  101. package/rules/.source/hippy/hippy_uimanager/PullFooterRenderNode.java +43 -0
  102. package/rules/.source/hippy/hippy_uimanager/PullHeaderRenderNode.java +43 -0
  103. package/rules/.source/hippy/hippy_uimanager/RenderManager.java +304 -0
  104. package/rules/.source/hippy/hippy_uimanager/RenderNode.java +533 -0
  105. package/rules/.source/hippy/hippy_uimanager/StateView.java +17 -0
  106. package/rules/.source/hippy/hippy_uimanager/TransformUtil.java +125 -0
  107. package/rules/.source/hippy/hippy_uimanager/ViewGroupDrawingOrderHelper.java +108 -0
  108. package/rules/.source/hippy/hippy_uimanager/ViewStateProvider.java +10 -0
  109. package/rules/.source/hippy/hippy_views/audioview/AudioPlayManager.java +457 -0
  110. package/rules/.source/hippy/hippy_views/audioview/AudioView.java +225 -0
  111. package/rules/.source/hippy/hippy_views/audioview/AudioViewController.java +135 -0
  112. package/rules/.source/hippy/hippy_views/common/CommonBackgroundDrawable.java +58 -0
  113. package/rules/.source/hippy/hippy_views/common/CommonBorder.java +37 -0
  114. package/rules/.source/hippy/hippy_views/custom/HippyCustomPropsController.java +61 -0
  115. package/rules/.source/hippy/hippy_views/hippylist/HippyRecyclerListAdapter.java +399 -0
  116. package/rules/.source/hippy/hippy_views/hippylist/HippyRecyclerView.java +378 -0
  117. package/rules/.source/hippy/hippy_views/hippylist/HippyRecyclerViewController.java +187 -0
  118. package/rules/.source/hippy/hippy_views/hippylist/HippyRecyclerViewHolder.java +39 -0
  119. package/rules/.source/hippy/hippy_views/hippylist/HippyRecyclerViewWrapper.java +134 -0
  120. package/rules/.source/hippy/hippy_views/hippylist/NodePositionHelper.java +55 -0
  121. package/rules/.source/hippy/hippy_views/hippylist/PreloadHelper.java +54 -0
  122. package/rules/.source/hippy/hippy_views/hippylist/PullFooterEventHelper.java +61 -0
  123. package/rules/.source/hippy/hippy_views/hippylist/PullHeaderEventHelper.java +127 -0
  124. package/rules/.source/hippy/hippy_views/hippylist/RecyclerViewEventHelper.java +394 -0
  125. package/rules/.source/hippy/hippy_views/image/HippyContentDrawable.java +113 -0
  126. package/rules/.source/hippy/hippy_views/image/HippyImageView.java +1608 -0
  127. package/rules/.source/hippy/hippy_views/image/HippyImageViewController.java +382 -0
  128. package/rules/.source/hippy/hippy_views/image/IImageStateListener.java +7 -0
  129. package/rules/.source/hippy/hippy_views/list/ChildOnScreenScroller.java +255 -0
  130. package/rules/.source/hippy/hippy_views/list/HippyListAdapter.java +647 -0
  131. package/rules/.source/hippy/hippy_views/list/HippyListItemView.java +162 -0
  132. package/rules/.source/hippy/hippy_views/list/HippyListItemViewController.java +45 -0
  133. package/rules/.source/hippy/hippy_views/list/HippyListView.java +915 -0
  134. package/rules/.source/hippy/hippy_views/list/HippyListViewController.java +622 -0
  135. package/rules/.source/hippy/hippy_views/list/HippyRecycler.java +31 -0
  136. package/rules/.source/hippy/hippy_views/list/IRecycleItemTypeChange.java +23 -0
  137. package/rules/.source/hippy/hippy_views/list/ItemDecorations.java +70 -0
  138. package/rules/.source/hippy/hippy_views/list/NegativeLongKeyFlinger.java +156 -0
  139. package/rules/.source/hippy/hippy_views/list/NodeHolder.java +34 -0
  140. package/rules/.source/hippy/hippy_views/list/RecycleViewFlinger.java +126 -0
  141. package/rules/.source/hippy/hippy_views/list/TVRecyclerView.java +2070 -0
  142. package/rules/.source/hippy/hippy_views/list/TVSingleLineListView.java +15 -0
  143. package/rules/.source/hippy/hippy_views/modal/HippyModalHostManager.java +102 -0
  144. package/rules/.source/hippy/hippy_views/modal/HippyModalHostView.java +597 -0
  145. package/rules/.source/hippy/hippy_views/modal/ModalHostHelper.java +46 -0
  146. package/rules/.source/hippy/hippy_views/modal/ModalStyleNode.java +34 -0
  147. package/rules/.source/hippy/hippy_views/modal/RequestCloseEvent.java +32 -0
  148. package/rules/.source/hippy/hippy_views/modal/ShowEvent.java +31 -0
  149. package/rules/.source/hippy/hippy_views/navigator/Navigator.java +126 -0
  150. package/rules/.source/hippy/hippy_views/navigator/NavigatorController.java +120 -0
  151. package/rules/.source/hippy/hippy_views/refresh/HippyPullFooterView.java +47 -0
  152. package/rules/.source/hippy/hippy_views/refresh/HippyPullFooterViewController.java +65 -0
  153. package/rules/.source/hippy/hippy_views/refresh/HippyPullHeaderView.java +39 -0
  154. package/rules/.source/hippy/hippy_views/refresh/HippyPullHeaderViewController.java +104 -0
  155. package/rules/.source/hippy/hippy_views/refresh/RefreshWrapper.java +237 -0
  156. package/rules/.source/hippy/hippy_views/refresh/RefreshWrapperController.java +62 -0
  157. package/rules/.source/hippy/hippy_views/refresh/RefreshWrapperItemController.java +39 -0
  158. package/rules/.source/hippy/hippy_views/refresh/RefreshWrapperItemView.java +26 -0
  159. package/rules/.source/hippy/hippy_views/scroll/HippyHorizontalScrollView.java +500 -0
  160. package/rules/.source/hippy/hippy_views/scroll/HippyOnScrollHelper.java +39 -0
  161. package/rules/.source/hippy/hippy_views/scroll/HippyScrollView.java +46 -0
  162. package/rules/.source/hippy/hippy_views/scroll/HippyScrollViewController.java +178 -0
  163. package/rules/.source/hippy/hippy_views/scroll/HippyScrollViewEventHelper.java +92 -0
  164. package/rules/.source/hippy/hippy_views/scroll/HippyVerticalScrollView.java +522 -0
  165. package/rules/.source/hippy/hippy_views/text/HippyTextView.java +512 -0
  166. package/rules/.source/hippy/hippy_views/text/HippyTextViewController.java +77 -0
  167. package/rules/.source/hippy/hippy_views/textinput/HippyTextInput.java +668 -0
  168. package/rules/.source/hippy/hippy_views/textinput/HippyTextInputController.java +528 -0
  169. package/rules/.source/hippy/hippy_views/textinput/TextInputNode.java +115 -0
  170. package/rules/.source/hippy/hippy_views/videoview/APEZProvider.java +287 -0
  171. package/rules/.source/hippy/hippy_views/videoview/APKExpansionSupport.java +82 -0
  172. package/rules/.source/hippy/hippy_views/videoview/PivotPoint.java +13 -0
  173. package/rules/.source/hippy/hippy_views/videoview/ScalableType.java +34 -0
  174. package/rules/.source/hippy/hippy_views/videoview/ScalableVideoView.java +265 -0
  175. package/rules/.source/hippy/hippy_views/videoview/ScaleManager.java +191 -0
  176. package/rules/.source/hippy/hippy_views/videoview/Size.java +19 -0
  177. package/rules/.source/hippy/hippy_views/videoview/VideoHippyView.java +917 -0
  178. package/rules/.source/hippy/hippy_views/videoview/VideoHippyViewController.java +236 -0
  179. package/rules/.source/hippy/hippy_views/videoview/ZipResourceFile.java +427 -0
  180. package/rules/.source/hippy/hippy_views/view/CardRootView.java +28 -0
  181. package/rules/.source/hippy/hippy_views/view/CustomLayoutView.java +10 -0
  182. package/rules/.source/hippy/hippy_views/view/CustomNodeView.java +5 -0
  183. package/rules/.source/hippy/hippy_views/view/DialogViewGroup.java +113 -0
  184. package/rules/.source/hippy/hippy_views/view/HippyViewGroup.java +2042 -0
  185. package/rules/.source/hippy/hippy_views/view/HippyViewGroupController.java +583 -0
  186. package/rules/.source/hippy/hippy_views/view/WindowRoot.java +5 -0
  187. package/rules/.source/hippy/hippy_views/viewpager/HippyViewPager.java +308 -0
  188. package/rules/.source/hippy/hippy_views/viewpager/HippyViewPagerAdapter.java +148 -0
  189. package/rules/.source/hippy/hippy_views/viewpager/HippyViewPagerController.java +246 -0
  190. package/rules/.source/hippy/hippy_views/viewpager/HippyViewPagerItem.java +27 -0
  191. package/rules/.source/hippy/hippy_views/viewpager/HippyViewPagerItemController.java +42 -0
  192. package/rules/.source/hippy/hippy_views/viewpager/ViewPagerPageChangeListener.java +114 -0
  193. package/rules/.source/hippy/hippy_views/viewpager/event/HippyPageItemExposureEvent.java +40 -0
  194. package/rules/.source/hippy/hippy_views/viewpager/event/HippyPageScrollEvent.java +43 -0
  195. package/rules/.source/hippy/hippy_views/viewpager/event/HippyPageScrollStateChangedEvent.java +42 -0
  196. package/rules/.source/hippy/hippy_views/viewpager/event/HippyPageSelectedEvent.java +42 -0
  197. package/rules/.source/hippy/hippy_views/webview/HippyWebView.java +160 -0
  198. package/rules/.source/hippy/hippy_views/webview/HippyWebViewBridge.java +20 -0
  199. package/rules/.source/hippy/hippy_views/webview/HippyWebViewController.java +103 -0
  200. package/rules/.source/hippy/hippy_views/webview/HippyWebViewInner.java +77 -0
  201. package/rules/.windsurfrules +27 -4
  202. package/rules/AGENTS.md +27 -4
  203. package/rules/CLAUDE.md +27 -3
  204. package/rules/GEMINI.md +25 -3
@@ -0,0 +1,399 @@
1
+ /* Tencent is pleased to support the open source community by making Hippy available.
2
+ * Copyright (C) 2018 THL A29 Limited, a Tencent company. All rights reserved.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ package com.tencent.mtt.hippy.views.hippylist;
18
+
19
+ import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;
20
+
21
+ import android.support.annotation.NonNull;
22
+ import android.support.v7.widget.HippyItemTypeHelper;
23
+ import android.support.v7.widget.IItemLayoutParams;
24
+ import android.support.v7.widget.RecyclerView.Adapter;
25
+ import android.support.v7.widget.RecyclerView.LayoutParams;
26
+ import android.view.View;
27
+ import android.view.ViewGroup;
28
+ import android.widget.FrameLayout;
29
+ import com.tencent.mtt.hippy.HippyEngineContext;
30
+ import com.tencent.mtt.hippy.uimanager.DiffUtils;
31
+ import com.tencent.mtt.hippy.uimanager.DiffUtils.PatchType;
32
+ import com.tencent.mtt.hippy.uimanager.ListItemRenderNode;
33
+ import com.tencent.mtt.hippy.uimanager.PullHeaderRenderNode;
34
+ import com.tencent.mtt.hippy.uimanager.RenderNode;
35
+ import com.tencent.mtt.hippy.views.list.IRecycleItemTypeChange;
36
+ import com.tencent.mtt.hippy.views.refresh.HippyPullHeaderView;
37
+ import com.tencent.mtt.nxeasy.recyclerview.helper.skikcy.IStickyItemsProvider;
38
+ import java.util.ArrayList;
39
+
40
+ public class HippyRecyclerListAdapter<HRCV extends HippyRecyclerView> extends
41
+ Adapter<HippyRecyclerViewHolder>
42
+ implements IRecycleItemTypeChange, IStickyItemsProvider, IItemLayoutParams {
43
+
44
+ protected final HippyEngineContext hpContext;
45
+ protected final HRCV hippyRecyclerView;
46
+ protected final HippyItemTypeHelper hippyItemTypeHelper;
47
+ protected int positionToCreateHolder;
48
+ protected PullFooterEventHelper footerEventHelper;
49
+ protected PullHeaderEventHelper headerEventHelper;
50
+ protected PreloadHelper preloadHelper;
51
+
52
+ public HippyRecyclerListAdapter(HRCV hippyRecyclerView, HippyEngineContext hpContext) {
53
+ this.hpContext = hpContext;
54
+ this.hippyRecyclerView = hippyRecyclerView;
55
+ hippyItemTypeHelper = new HippyItemTypeHelper(hippyRecyclerView);
56
+ preloadHelper = new PreloadHelper(hippyRecyclerView);
57
+ }
58
+
59
+ /**
60
+ * 对于吸顶到RenderNode需要特殊处理 吸顶的View需要包一层ViewGroup,吸顶的时候,从ViewGroup把RenderNode的View取出来挂载到顶部
61
+ * 当RenderNode的View已经挂载到Header位置上面,如果重新触发创建ViewHolder,renderView会创建失败,
62
+ * 此时就只返回一个空到renderViewContainer上去,等viewHolder需要显示到时候,再把header上面的View还原到这个 ViewHolder上面。
63
+ */
64
+ @NonNull
65
+ @Override
66
+ public HippyRecyclerViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
67
+ ListItemRenderNode renderNode = getChildNodeByAdapterPosition(positionToCreateHolder);
68
+ boolean isViewExist = renderNode.isViewExist();
69
+ boolean needsDelete = renderNode.needDeleteExistRenderView();
70
+ View renderView = createRenderView(renderNode);
71
+ if (isPullHeader(positionToCreateHolder)) {
72
+ ((HippyPullHeaderView) renderView).setParentView(hippyRecyclerView);
73
+ initPullHeadEventHelper((PullHeaderRenderNode) renderNode, renderView);
74
+ return new HippyRecyclerViewHolder(headerEventHelper.getView(), renderNode);
75
+ } else if (isStickyPosition(positionToCreateHolder)) {
76
+ return new HippyRecyclerViewHolder(getStickyContainer(parent, renderView), renderNode);
77
+ } else {
78
+ if (renderView == null) {
79
+ throw new IllegalArgumentException("createRenderView error!"
80
+ + ",isDelete:" + renderNode.isDelete()
81
+ + ",isViewExist:" + isViewExist
82
+ + ",needsDelete:" + needsDelete
83
+ + ",className:" + renderNode.getClassName()
84
+ + ",isLazy :" + renderNode.isIsLazyLoad()
85
+ + ",itemCount :" + getItemCount()
86
+ + ",getNodeCount:" + getRenderNodeCount()
87
+ + ",notifyCount:" + hippyRecyclerView.renderNodeCount
88
+ + "curPos:" + positionToCreateHolder
89
+ + ",rootView:" + renderNode.hasRootView()
90
+ + ",parentNode:" + (renderNode.getParent() != null)
91
+ + ",offset:" + hippyRecyclerView.computeVerticalScrollOffset()
92
+ + ",range:" + hippyRecyclerView.computeVerticalScrollRange()
93
+ + ",extent:" + hippyRecyclerView.computeVerticalScrollExtent()
94
+ + ",viewType:" + viewType
95
+ + ",id:" + renderNode.getId()
96
+ + ",attachedIds:" + getAttachedIds()
97
+ + ",nodeOffset:" + hippyRecyclerView.getNodePositionHelper().getNodeOffset()
98
+ + ",view:" + hippyRecyclerView
99
+ );
100
+ }
101
+ return new HippyRecyclerViewHolder(renderView, renderNode);
102
+ }
103
+ }
104
+
105
+ String getAttachedIds() {
106
+ StringBuilder attachedIds = new StringBuilder();
107
+ int childCount = hippyRecyclerView.getChildCount();
108
+ for (int i = 0; i < childCount; ++i) {
109
+ View attachedView = hippyRecyclerView.getChildAt(i);
110
+ attachedIds.append("|p_" + hippyRecyclerView.getChildAdapterPosition(attachedView));
111
+ attachedIds.append("_i_" + attachedView.getId());
112
+ }
113
+ return attachedIds.toString();
114
+ }
115
+
116
+
117
+ /**
118
+ * deleteExistRenderView 是异常情况,正常情况应该不会走这个逻辑, 本来在{@link HippyRecyclerView#onViewAbound(HippyRecyclerViewHolder)}
119
+ * 的地方应该已经调用了deleteExistRenderView,deleteExistRenderView这里不应该可能走到 如果是吸顶的View,shouldSticky为true的情况下,是本身就存在的,不应该去调用deleteExistRenderView
120
+ *
121
+ * @param renderNode
122
+ * @return
123
+ */
124
+ protected View createRenderView(ListItemRenderNode renderNode) {
125
+ if (renderNode.needDeleteExistRenderView() && !renderNode.shouldSticky()) {
126
+ deleteExistRenderView(renderNode);
127
+ }
128
+ renderNode.setLazy(false);
129
+ View view = renderNode.createViewRecursive();
130
+ renderNode.updateViewRecursive();
131
+ return view;
132
+ }
133
+
134
+ public void deleteExistRenderView(ListItemRenderNode renderNode) {
135
+ renderNode.setLazy(true);
136
+ RenderNode parentNode = getParentNode();
137
+ if (parentNode != null) {
138
+ hpContext.getRenderManager().getControllerManager()
139
+ .deleteChild(parentNode.getId(), renderNode.getId());
140
+ }
141
+ renderNode.setRecycleItemTypeChangeListener(null);
142
+ }
143
+
144
+ private FrameLayout getStickyContainer(ViewGroup parent, View renderView) {
145
+ FrameLayout container = new FrameLayout(parent.getContext());
146
+ if (renderView != null) {
147
+ container.addView(renderView, new FrameLayout.LayoutParams(MATCH_PARENT, MATCH_PARENT));
148
+ }
149
+ return container;
150
+ }
151
+
152
+ private void initPullHeadEventHelper(PullHeaderRenderNode renderNode, View renderView) {
153
+ if (headerEventHelper == null) {
154
+ headerEventHelper = new PullHeaderEventHelper(hippyRecyclerView, renderNode);
155
+ }
156
+ headerEventHelper.setRenderNodeView(renderView);
157
+ }
158
+
159
+ @Override
160
+ public String toString() {
161
+ return "HippyRecyclerAdapter: itemCount:" + getItemCount();
162
+ }
163
+
164
+ /**
165
+ * 绑定数据 对于全新的viewHolder,isCreated 为true,调用updateViewRecursive进行物理树的创建,以及数据的绑定
166
+ * 对于非全新创建的viewHolder,进行view树的diff,然后在把数据绑定到view树上面
167
+ *
168
+ * @param hippyRecyclerViewHolder position当前的viewHolder
169
+ * @param position 绑定数据的节点位置
170
+ */
171
+ @Override
172
+ public void onBindViewHolder(HippyRecyclerViewHolder hippyRecyclerViewHolder, int position) {
173
+ setLayoutParams(hippyRecyclerViewHolder.itemView, position);
174
+ RenderNode oldNode = hippyRecyclerViewHolder.bindNode;
175
+ ListItemRenderNode newNode = getChildNodeByAdapterPosition(position);
176
+ oldNode.setLazy(true);
177
+ newNode.setLazy(false);
178
+ if (oldNode != newNode) {
179
+ //step 1: diff
180
+ ArrayList<PatchType> patchTypes = DiffUtils.diff(oldNode, newNode);
181
+ //step:2 delete unUseful views
182
+ DiffUtils.deleteViews(hpContext.getRenderManager().getControllerManager(), patchTypes);
183
+ //step:3 replace id
184
+ DiffUtils.replaceIds(hpContext.getRenderManager().getControllerManager(), patchTypes);
185
+ //step:4 create view is do not reUse
186
+ DiffUtils.createView(patchTypes);
187
+ //step:5 patch the dif result
188
+ DiffUtils.doPatch(hpContext.getRenderManager().getControllerManager(), patchTypes);
189
+ }
190
+ newNode.setRecycleItemTypeChangeListener(this);
191
+ hippyRecyclerViewHolder.bindNode = newNode;
192
+ enablePullFooter(position, hippyRecyclerViewHolder.itemView);
193
+ }
194
+
195
+ /**
196
+ * 检测最后一个item是否是footer,如果是,需要对这个itemView设置监控,footer显示就通知前端加载下一页
197
+ */
198
+ private void enablePullFooter(int position, View itemView) {
199
+ if (position == getItemCount() - 1) {
200
+ ListItemRenderNode renderNode = getChildNodeByAdapterPosition(position);
201
+ if (renderNode.isPullFooter()) {
202
+ if (footerEventHelper == null) {
203
+ footerEventHelper = new PullFooterEventHelper(hippyRecyclerView);
204
+ }
205
+ footerEventHelper.enableFooter(itemView);
206
+ } else {
207
+ if (footerEventHelper != null) {
208
+ footerEventHelper.disableFooter();
209
+ }
210
+ }
211
+ }
212
+ }
213
+
214
+ /**
215
+ * 设置View的LayoutParams排版属性,宽高由render节点提供
216
+ */
217
+ protected void setLayoutParams(View itemView, int position) {
218
+ LayoutParams childLp = getLayoutParams(itemView);
219
+ ListItemRenderNode childNode = getChildNodeByAdapterPosition(position);
220
+ childLp.height = getRenderNodeHeight(position);
221
+ childLp.width = childNode.getWidth();
222
+ itemView.setLayoutParams(childLp);
223
+ }
224
+
225
+
226
+ protected LayoutParams getLayoutParams(View itemView) {
227
+ ViewGroup.LayoutParams params = itemView.getLayoutParams();
228
+ LayoutParams childLp = null;
229
+ if (params instanceof LayoutParams) {
230
+ childLp = (LayoutParams) params;
231
+ }
232
+ if (childLp == null) {
233
+ childLp = new LayoutParams(MATCH_PARENT, 0);
234
+ }
235
+ return childLp;
236
+ }
237
+
238
+ @Override
239
+ public int getItemViewType(int position) {
240
+ //在调用onCreateViewHolder之前,必然会调用getItemViewType,所以这里把position记下来
241
+ //用在onCreateViewHolder的时候来创建View,不然onCreateViewHolder是无法创建RenderNode到View的
242
+ setPositionToCreate(position);
243
+ return getChildNodeByAdapterPosition(position).getItemViewType();
244
+ }
245
+
246
+ protected void setPositionToCreate(int position) {
247
+ positionToCreateHolder = position;
248
+ }
249
+
250
+ /**
251
+ * 获取子节点,理论上面是不会返回空的,否则就是某个流程出了问题
252
+ *
253
+ * @param position adapter实际的item位置
254
+ */
255
+ public ListItemRenderNode getChildNodeByAdapterPosition(int position) {
256
+ return getChildNode(hippyRecyclerView.getNodePositionHelper().getRenderNodePosition(position));
257
+ }
258
+
259
+ /**
260
+ * 获取前端的renderNode的子节点
261
+ *
262
+ * @param position 前端的子节点的位置
263
+ */
264
+ public ListItemRenderNode getChildNode(int position) {
265
+ RenderNode parentNode = getParentNode();
266
+ if (parentNode != null && position < parentNode.getChildCount() && position >= 0) {
267
+ return (ListItemRenderNode) parentNode.getChildAt(position);
268
+ }
269
+ return null;
270
+ }
271
+
272
+ /**
273
+ * listItemView的数量
274
+ */
275
+ @Override
276
+ public int getItemCount() {
277
+ return getRenderNodeCount();
278
+ }
279
+
280
+ /**
281
+ * 返回前端的list的内容Item数目
282
+ *
283
+ * @return
284
+ */
285
+ public int getRenderNodeCount() {
286
+ RenderNode listNode = getParentNode();
287
+ if (listNode != null) {
288
+ return listNode.getChildCount();
289
+ }
290
+ return 0;
291
+ }
292
+
293
+ /**
294
+ * 前端展示的内容的高度
295
+ *
296
+ * @return
297
+ */
298
+ public int getRenderNodeTotalHeight() {
299
+ int renderCount = getRenderNodeCount();
300
+ int renderNodeTotalHeight = 0;
301
+ for (int i = 0; i < renderCount; i++) {
302
+ renderNodeTotalHeight += getRenderNodeHeight(i);
303
+ }
304
+ return renderNodeTotalHeight;
305
+ }
306
+
307
+ public int getItemHeight(int position) {
308
+ return getRenderNodeHeight(position);
309
+ }
310
+
311
+ public int getRenderNodeHeight(int position) {
312
+ ListItemRenderNode childNode = getChildNode(position);
313
+ if (childNode != null) {
314
+ if (childNode.isPullHeader()) {
315
+ return 0;
316
+ }
317
+ return childNode.getHeight();
318
+ }
319
+ return 0;
320
+ }
321
+
322
+ public int getItemWidth(int position) {
323
+ Integer renderNodeWidth = getRenderNodeWidth(position);
324
+ if (renderNodeWidth != null) {
325
+ return renderNodeWidth;
326
+ }
327
+ return 0;
328
+ }
329
+
330
+ public int getRenderNodeWidth(int position) {
331
+ ListItemRenderNode childNode = getChildNode(position);
332
+ if (childNode != null) {
333
+ return childNode.getWidth();
334
+ }
335
+ return 0;
336
+ }
337
+
338
+ protected RenderNode getParentNode() {
339
+ return hpContext.getRenderManager().getRenderNode(getHippyListViewId());
340
+ }
341
+
342
+ private int getHippyListViewId() {
343
+ return ((View) hippyRecyclerView.getParent()).getId();
344
+ }
345
+
346
+ @Override
347
+ public void onRecycleItemTypeChanged(int oldType, int newType, ListItemRenderNode listItemNode) {
348
+ hippyItemTypeHelper.updateItemType(oldType, newType, listItemNode);
349
+ }
350
+
351
+ @Override
352
+ public long getItemId(int position) {
353
+ return getChildNodeByAdapterPosition(position).getId();
354
+ }
355
+
356
+ /**
357
+ * 该position对于的renderNode是否是吸顶的属性
358
+ */
359
+ @Override
360
+ public boolean isStickyPosition(int position) {
361
+ if (position >= 0 && position < getItemCount()) {
362
+ return getChildNodeByAdapterPosition(position).shouldSticky();
363
+ }
364
+ return false;
365
+ }
366
+
367
+ /**
368
+ * 该position对于的renderNode是否是Header属性,值判断第一个节点
369
+ */
370
+ private boolean isPullHeader(int position) {
371
+ if (position == 0) {
372
+ return getChildNodeByAdapterPosition(0).isPullHeader();
373
+ }
374
+ return false;
375
+ }
376
+
377
+ /**
378
+ * 获取下拉刷新的事件辅助器
379
+ */
380
+ public PullHeaderEventHelper getHeaderEventHelper() {
381
+ return headerEventHelper;
382
+ }
383
+
384
+ public PreloadHelper getPreloadHelper() {
385
+ return preloadHelper;
386
+ }
387
+
388
+ public void setPreloadItemNumber(int preloadItemNumber) {
389
+ preloadHelper.setPreloadItemNumber(preloadItemNumber);
390
+ }
391
+
392
+ @Override
393
+ public void getItemLayoutParams(int position, LayoutParams lp) {
394
+ if (lp == null) {
395
+ return;
396
+ }
397
+ lp.height = getRenderNodeHeight(position);
398
+ }
399
+ }