@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,873 @@
1
+ package com.tencent.extend.views.fastlist;
2
+
3
+ import android.content.Context;
4
+ import android.util.Log;
5
+ import android.view.View;
6
+ import android.view.ViewGroup;
7
+
8
+ import android.support.annotation.Nullable;
9
+ import android.support.v7.widget.RecyclerView;
10
+
11
+ import com.tencent.extend.views.fastlist.diff.FastListDataBindingHelper;
12
+ import com.tencent.mtt.hippy.HippyEngineContext;
13
+ import com.tencent.mtt.hippy.HippyInstanceContext;
14
+ import com.tencent.mtt.hippy.common.HippyArray;
15
+ import com.tencent.mtt.hippy.common.HippyMap;
16
+ import com.tencent.mtt.hippy.modules.Promise;
17
+ import com.tencent.mtt.hippy.uimanager.RenderNode;
18
+ import com.tencent.mtt.hippy.utils.ExtendUtil;
19
+ import com.tencent.mtt.hippy.utils.LogUtils;
20
+ import com.tencent.mtt.hippy.views.list.HippyRecycler;
21
+ import com.tencent.mtt.hippy.views.view.HippyViewGroup;
22
+
23
+ import java.util.ArrayList;
24
+ import java.util.Iterator;
25
+
26
+ public class FastFlexView extends HippyViewGroup implements FastPendingView,HippyRecycler, FastAdapter.ScrollTaskHandler {
27
+ public static final String TAG = "FastFlexLog";
28
+ private FastAdapter mAdapter;
29
+ private int[] padding = new int[4];
30
+ private int preferWidth = -1;
31
+ private int preferHeight = -1;
32
+ private boolean hasReset = false;
33
+ protected EventDeliverer eventDeliverer;
34
+
35
+ private ArrayList<FastAdapter.Holder> cacheHolders;
36
+
37
+ private boolean useDiff = false;
38
+ private String keyName;
39
+ private boolean isAttached = false;
40
+
41
+ public boolean isUseDiff() {
42
+ return useDiff;
43
+ }
44
+
45
+ private boolean enablePlaceholder = FastAdapter.CHILD_LIST_PLACEHOLDER_ENABLE;
46
+
47
+ public FastFlexView(Context context) {
48
+ super(context);
49
+ setFocusable(false);
50
+ setClipChildren(false);
51
+ eventDeliverer = new EventDeliverer(Utils.getHippyContext(context));
52
+ init();
53
+ }
54
+
55
+ public void setUseDiff(boolean useDiff) {
56
+ this.useDiff = useDiff;
57
+ }
58
+
59
+ public void setKeyName(String keyName) {
60
+ this.keyName = keyName;
61
+ }
62
+
63
+ @Override
64
+ public EventDeliverer getEventDeliverer() {
65
+ return eventDeliverer;
66
+ }
67
+
68
+ @Override
69
+ public void onResetBeforeCache() {
70
+ super.onResetBeforeCache();
71
+ if(LogUtils.isDebug()) {
72
+ Log.d(TAG, "DebugPool flexView onResetBeforeCache:"+Utils.hashCode(this)+",rootList:"+mAdapter.getRootListView());
73
+ }
74
+ if(!hasReset) {
75
+ resetChildren();
76
+ hasReset = true;
77
+ }
78
+ }
79
+
80
+ private int mHandleEventNodeId = -1;
81
+ @Override
82
+ public void setHandleEventNodeId(int id) {
83
+ this.mHandleEventNodeId = id;
84
+ if(mAdapter != null){
85
+ mAdapter.rootListNodeID = id;
86
+ }
87
+ }
88
+
89
+ public void setEnablePlaceholder(boolean b){
90
+ this.enablePlaceholder = b;
91
+ if (mAdapter != null) {
92
+ mAdapter.setEnablePlaceholder(b);
93
+ }
94
+ }
95
+
96
+ @Override
97
+ public void pausePostTask() {
98
+
99
+ }
100
+
101
+ @Override
102
+ public void resumePostTask() {
103
+
104
+ }
105
+
106
+ @Override
107
+ public HippyArray getItemListData() {
108
+ return mAdapter != null ? mAdapter.dataList : null;
109
+ }
110
+
111
+ @Override
112
+ public void notifySaveState() {
113
+ super.notifySaveState();
114
+ if(cacheHolders != null && mAdapter != null) {
115
+ for (int i = 0; i < cacheHolders.size(); i ++){
116
+ final View view = cacheHolders.get(i).itemView;
117
+ if(view instanceof HippyRecycler){
118
+ if(LogUtils.isDebug()) {
119
+ Log.d(TAG, "++DebugPool flexView notifySaveState child:"+view);
120
+ }
121
+ ((HippyRecycler) view).notifySaveState();
122
+ }
123
+ }
124
+ }
125
+ }
126
+
127
+ @Override
128
+ public void notifyRestoreState() {
129
+ super.notifyRestoreState();
130
+ if(cacheHolders != null && mAdapter != null) {
131
+ for (int i = 0; i < cacheHolders.size(); i ++){
132
+ final View view = cacheHolders.get(i).itemView;
133
+ if(view instanceof HippyRecycler){
134
+ if(LogUtils.isDebug()) {
135
+ Log.d(TAG, "--DebugPool flexView notifyRestoreState child:"+view);
136
+ }
137
+ ((HippyRecycler) view).notifyRestoreState();
138
+ }
139
+ }
140
+ }
141
+ }
142
+
143
+ void resetChildren(){
144
+ if(cacheHolders != null && mAdapter != null) {
145
+ for (int i = 0; i < cacheHolders.size(); i ++){
146
+ final FastAdapter.Holder holder = cacheHolders.get(i);
147
+ //onViewRecycled生命周期方法在这里调用
148
+ mAdapter.onViewDetachedFromWindow(holder);
149
+ mAdapter.onViewRecycled(holder);
150
+ final View view = holder.itemView;
151
+ if(view instanceof HippyRecycler){
152
+ if(LogUtils.isDebug()) {
153
+ Log.d(TAG, "DebugPool flexView reset child:"+view);
154
+ }
155
+ ((HippyRecycler) view).onResetBeforeCache();
156
+ }
157
+ }
158
+ final Iterator<FastAdapter.Holder> it = cacheHolders.iterator();
159
+ int i = 0;
160
+ while (it.hasNext()){
161
+ final FastAdapter.Holder holder = it.next();
162
+ if(holder.singleton){
163
+ //zhaopeng 20220714 这里不将singleton的view缓存在flexView里,以防止后来重用时被误删
164
+ it.remove();
165
+ mAdapter.dataList.removeAt(i);
166
+ if(holder.itemView.getParent() instanceof ViewGroup){
167
+ ((ViewGroup) holder.itemView.getParent()).removeView(holder.itemView);
168
+ }
169
+ }
170
+ i++;
171
+ }
172
+ }
173
+ }
174
+
175
+ @Override
176
+ public void resetProps() {
177
+ super.resetProps();
178
+ }
179
+
180
+ @Override
181
+ public void clear() {
182
+ super.clear();
183
+ }
184
+
185
+ @Override
186
+ public View getView() {
187
+ return this;
188
+ }
189
+
190
+ @Override
191
+ public void notifyRecycled() {
192
+ if(LogUtils.isDebug()) {
193
+ Log.d(TAG, "notifyRecycled this:" + hashCode() + ",childrenCount:" + getChildCount());
194
+ }
195
+ // mAdapter.recycleAll();
196
+ }
197
+
198
+ @Override
199
+ public void updateItem(int pos, Object data) {
200
+ if (mAdapter != null) {
201
+ mAdapter.replaceItemData(pos,data);
202
+ RecyclerView.LayoutParams lpBefore = findCacheHolderFromIndex(pos) != null ? mAdapter.getItemLayoutParams(findCacheHolderFromIndex(pos)) : null;
203
+ updateHolder(pos);
204
+ RecyclerView.LayoutParams lpAfter = findCacheHolderFromIndex(pos) != null ? mAdapter.getItemLayoutParams(findCacheHolderFromIndex(pos)) : null;
205
+ boolean changed = lpBefore == null && lpAfter != null;
206
+ if (!changed) {
207
+ if (lpBefore != null && lpAfter != null) {
208
+ changed = lpBefore.width != lpAfter.width || lpBefore.height != lpAfter.height;
209
+ }
210
+ }
211
+ if (changed) {
212
+ computeSize(mAdapter.dataList);
213
+ }
214
+ }
215
+ }
216
+
217
+ @Override
218
+ public void replaceItemData(int pos, Object data) {
219
+ if (mAdapter != null) {
220
+ mAdapter.replaceItemData(pos,data);
221
+ }
222
+ }
223
+
224
+
225
+
226
+ @Override
227
+ public void updateItem(int pos, Object data, boolean traverse) {
228
+ this.updateItem(pos,data);
229
+ }
230
+
231
+ @Override
232
+ public void updateItemProps(String name,int position, Object data, boolean updateView) {
233
+ if (mAdapter != null) {
234
+ final RecyclerView.ViewHolder vh = findViewHolderForAdapterPosition(position);
235
+ mAdapter.updateItemProps(name, position, (HippyMap) data, updateView, vh);
236
+ if (vh == null) {
237
+ Log.e(TAG, "updateItemProps error,没有找到对应的Holder,当前View可能没有在展示");
238
+ }
239
+ }
240
+ }
241
+
242
+ @Override
243
+ public void notifyDetachFromParent() {
244
+ if(cacheHolders != null && mAdapter != null) {
245
+ for (int i = 0; i < cacheHolders.size(); i ++){
246
+ mAdapter.onViewDetachedFromWindow(cacheHolders.get(i));
247
+ }
248
+ }
249
+ }
250
+
251
+ @Override
252
+ public void notifyAttachToParent() {
253
+ if(cacheHolders != null && mAdapter != null) {
254
+ // Log.i(AutoFocusManager.TAG,"FastList notifyAttachToParent cacheHolders size:"+cacheHolders.size());
255
+ for (int i = 0; i < cacheHolders.size(); i ++){
256
+ mAdapter.onViewAttachedToWindow(cacheHolders.get(i));
257
+ }
258
+ }else{
259
+ // Log.i(AutoFocusManager.TAG,"FastList notifyAttachToParent cacheHolders size:"+0);
260
+ }
261
+ }
262
+
263
+ @Override
264
+ protected void onAttachedToWindow() {
265
+ super.onAttachedToWindow();
266
+ isAttached = true;
267
+ updateCachePoolName();
268
+ updateCachePoolMap();
269
+ }
270
+
271
+ private HippyMap recycledViewPoolMap;
272
+ private String poolName = hashCode()+"";
273
+
274
+ public HippyMap getRecycledViewPoolMap() {
275
+ if (recycledViewPoolMap == null) {
276
+ recycledViewPoolMap = new HippyMap();
277
+ }
278
+ return recycledViewPoolMap;
279
+ }
280
+
281
+ // public void setCachePoolName(String name) {
282
+ // this.poolName = name;
283
+ // if(isAttached()){
284
+ // updateCachePoolName();
285
+ // }
286
+ // }
287
+
288
+ private void updateCachePoolName(){
289
+ mAdapter.setShareViewPoolType(poolName);
290
+ }
291
+
292
+ private void updateCachePoolMap(){
293
+ final HippyMap map = recycledViewPoolMap;
294
+ if (map == null) {
295
+ return;
296
+ }
297
+ if (mAdapter != null) {
298
+ if (map.containsKey("name")) {
299
+ mAdapter.setShareViewPoolType(map.getString("name"));
300
+ final RecyclerView.RecycledViewPool pool = mAdapter.getCacheWorker(getContext(),this);
301
+ if (LogUtils.isDebug()) {
302
+ Log.i("DebugPool", "flex setCachePoolMap name=" + map.getString("name") + ",this:" + this);
303
+ Log.i("DebugPool", "DebugPool setupPool in flex instance:" + Utils.hashCode(pool)+",context:"+getContext());
304
+ }
305
+ HippyMap size = map.getMap("size");
306
+ for (String typeS : size.keySet()) {
307
+ final int type = Integer.parseInt(typeS);
308
+ final int count = size.getInt(typeS);
309
+ if (LogUtils.isDebug()) {
310
+ Log.i("DebugPool", "setCachePoolMap in flex type:" + type + ",count:" + count + ",this:" + this);
311
+ }
312
+ if (mAdapter.findOldCacheWorker() != null) {
313
+ mAdapter.findOldCacheWorker().setMaxCacheSize(type, count);
314
+ }
315
+ }
316
+ }else{
317
+ //Log.e("DebugPool", "flex updateCachePoolMap on no name:"+map);
318
+ }
319
+ }
320
+ }
321
+
322
+ @Override
323
+ protected void onDetachedFromWindow() {
324
+ super.onDetachedFromWindow();
325
+ isAttached = false;
326
+ if(LogUtils.isDebug()) {
327
+ Log.e(TAG, "onDetachedFromWindow this:" + hashCode() + ",childrenCount:" + (cacheHolders == null ? 0 : cacheHolders.size()));
328
+ }
329
+ if (mAdapter != null) {
330
+ mAdapter.clearDetachCaches();
331
+ }
332
+ // recycleChildren();
333
+ }
334
+
335
+
336
+
337
+ HippyEngineContext getEngineContext(){
338
+ return ((HippyInstanceContext) getContext()).getEngineContext();
339
+ }
340
+
341
+ public void setPendingData(Object data, RenderNode templateNode){
342
+ setPendingData(data,templateNode,this.useDiff);
343
+ }
344
+
345
+ public void setPendingData(Object data, RenderNode templateNode,boolean useDiff) {
346
+ boolean isPauseOnInVisible = mAdapter.getRootListView() != null && mAdapter.getRootListView().isPostTaskPaused();
347
+ if(LogUtils.isDebug()) {
348
+ Log.v(TAG, "setPendingData data:" + data +",isPauseOnInVisible:"+isPauseOnInVisible + ",templateNode:" + templateNode + ",data instanceof HippyArray :" + (data instanceof HippyArray) );
349
+ }
350
+ assert (templateNode instanceof FastAdapter.ListNode);
351
+ assert (data instanceof HippyArray);
352
+ mAdapter.setContext(getEngineContext(),getContext());
353
+ mAdapter.setListNode((FastAdapter.ListNode) templateNode);
354
+ //共享数据
355
+ mAdapter.onBeforeChangeAdapter();
356
+
357
+ final HippyArray newArray = (HippyArray) data;
358
+
359
+
360
+ if (!useDiff || (isPauseOnInVisible || mAdapter.isEnablePlaceholder()) ) {
361
+ mAdapter.setData(newArray);
362
+ mAdapter.onAttachedToView(this);
363
+ computeSize(newArray);
364
+ onAdapterChange();
365
+ return;
366
+ }
367
+
368
+ final HippyArray oldArray = mAdapter.dataList;
369
+ if (LogUtils.isDebug()) {
370
+ Log.i(TAG, "handleDataDiff 刷新数据 oldArray.size--" + (oldArray == null ? "0" : oldArray.size())
371
+ + " newArray.size--" + (newArray == null ? "0" : newArray.size())
372
+ + " hashCode--" + FastFlexView.this.hashCode());
373
+ }
374
+ FastListDataBindingHelper.handleDataDiffCallBack3(oldArray, newArray, keyName,
375
+ new FastListDataBindingHelper.OnDataDiffListener3() {
376
+
377
+ @Override
378
+ public void onRangeInsert(int position, int count) {
379
+ if (LogUtils.isDebug()) {
380
+ Log.i(TAG, "handleDataDiff 刷新数据 onRangeInsert--" + " position--" + position + " count--" + count);
381
+ }
382
+ for(int i = position;i < position+ count; i ++){
383
+ FastAdapter.Holder vh = obtainHolder(i);
384
+ addHolderView(i,vh);
385
+ mAdapter.onBindViewHolder(vh,i);
386
+ cacheHolders.add(i,vh);
387
+ if(isAttached){
388
+ mAdapter.onViewAttachedToWindow(vh);
389
+ }
390
+ }
391
+ }
392
+ //0,1,2 1-2
393
+ @Override
394
+ public void onRangeDelete(int position, int count) {
395
+ if (LogUtils.isDebug()) {
396
+ Log.i(TAG, "handleDataDiff 刷新数据 onRangeDelete--" + " position--" + position + " count--" + count);
397
+ }
398
+ for(int i = position + count -1; i > position - 1; i --){
399
+ removeHolder(i);
400
+ }
401
+ }
402
+
403
+ @Override
404
+ public void onUpdateViewData() {
405
+ mAdapter.setData(newArray);
406
+ if (LogUtils.isDebug()) {
407
+ Log.i(TAG, "handleDataDiff 刷新数据 onUpdateViewData");
408
+ }
409
+ mAdapter.onAttachedToView(FastFlexView.this);
410
+ computeSize(newArray);
411
+ }
412
+
413
+
414
+ @Override
415
+ public void onMove(int position, int nextPosition) {
416
+ //mAdapter.notifyItemMoved(position, nextPosition);
417
+ if (LogUtils.isDebug()) {
418
+ Log.i(TAG, "handleDataDiff 刷新数据 onMove--" + " position--" + position + " nextPosition--" + nextPosition);
419
+ }
420
+ onAdapterChange();
421
+ }
422
+
423
+ @Override
424
+ public void onRangeUpdate(int start, int count) {
425
+ if (LogUtils.isDebug()) {
426
+ Log.i(TAG, "handleDataDiff 刷新数据 onRangeUpdate--" + " start--" + start + " count--" + count);
427
+ }
428
+ for(int i = start; i < start + count; i ++){
429
+ updateHolder(i);
430
+ }
431
+ }
432
+
433
+ @Override
434
+ public void onAllChange() {
435
+ if (LogUtils.isDebug()) {
436
+ Log.i(TAG, "handleDataDiff 刷新数据 onAllChange");
437
+ }
438
+ onAdapterChange();
439
+ }
440
+ },
441
+ item -> (HippyMap) item.raw, FastAdapter.ItemEntity.class);
442
+ }
443
+
444
+ private void computeSize(HippyArray list){
445
+ try {
446
+
447
+ int maxWidth = 0;
448
+ int maxHeight = 0;
449
+ for (int i = 0; i < list.size(); i++) {
450
+
451
+
452
+ final HippyMap item = (HippyMap) list.get(i);
453
+ // Log.d(TAG, "computeSize item:" + item);
454
+ final HippyArray layout = item.getArray("layout");
455
+ if(layout == null || layout.size() < 1){
456
+ //throw new IllegalArgumentException("FastFlexView计算尺寸错误,请确保item数据里有layout对象");
457
+ if(LogUtils.isDebug()) {
458
+ Log.e(TAG, "FastFlexView计算尺寸时, layout数据 未指定,可能会造成显示错误");
459
+ }
460
+ continue;
461
+ }
462
+ // Log.d(TAG, "computeSize layout:" + layout);
463
+ final int x = Utils.toPX(layout.getInt(0));
464
+ final int y = Utils.toPX(layout.getInt(1));
465
+ final int w = Utils.toPX(layout.getInt(2));
466
+ final int h = Utils.toPX(layout.getInt(3));
467
+ if (x + w > maxWidth) {
468
+ maxWidth = x + w;
469
+ }
470
+ if (y + h > maxHeight) {
471
+ maxHeight = y + h;
472
+ }
473
+ }
474
+
475
+ if (padding != null) {
476
+ //0 1 2 3 : l t r b
477
+ maxWidth += (padding[0] + padding[2]);
478
+ maxHeight += (padding[1] + padding[3]);
479
+ }
480
+ if (maxWidth > 0) {
481
+ this.preferWidth = maxWidth;
482
+ }
483
+ if (maxHeight > 0) {
484
+ this.preferHeight = maxHeight;
485
+ }
486
+ if(LogUtils.isDebug()) {
487
+ Log.e(TAG, "computeSize preferWidth:" + preferWidth + ",preferHeight:" + preferHeight);
488
+ }
489
+ }catch (Throwable t){
490
+ t.printStackTrace();
491
+ if(LogUtils.isDebug()) {
492
+ Log.e(TAG, "computeSize preferWidth:" + preferWidth + ",preferHeight:" + preferHeight);
493
+ }
494
+ }
495
+
496
+ }
497
+
498
+ public int getPreferWidth(){
499
+ return this.preferWidth;
500
+ }
501
+
502
+ public int getPreferHeight(){
503
+ return this.preferHeight;
504
+ }
505
+
506
+ void recycleChildren(){
507
+ if(cacheHolders != null && mAdapter != null) {
508
+ for (int i = 0; i < cacheHolders.size(); i ++){
509
+ recycleItem(cacheHolders.get(i),i);
510
+ }
511
+ cacheHolders.clear();
512
+ }
513
+ }
514
+
515
+ FastAdapter.Holder findCacheHolderFromIndex(int i){
516
+ if(cacheHolders == null || cacheHolders.size() <= i || i < 0){
517
+ return null;
518
+ }
519
+ final FastAdapter.Holder result = cacheHolders.get(i);
520
+
521
+ // if(result.itemView.getParent() == this){
522
+ // return result;
523
+ // }
524
+ return result;
525
+ }
526
+
527
+ void recycleItem(FastAdapter.Holder holder,int index){
528
+ if(LogUtils.isDebug()) {
529
+ Log.i(TAG, "DebugPool FlexView recycleItem holder type:" + holder.type + ",index:" + index);
530
+ }
531
+ // if(getChildCount() > index && index > -1){
532
+ // removeViewAt(index);
533
+ // }else {
534
+ final View v = holder.itemView;
535
+ if (v.getParent() instanceof ViewGroup) {
536
+ ((ViewGroup) v.getParent()).removeView(v);
537
+ }
538
+ // }
539
+ if(mAdapter != null ){
540
+ mAdapter.onViewDetachedFromWindow(holder);
541
+ // if(holder.itemView instanceof HippyRecycler){
542
+ // ((HippyRecycler) holder.itemView).onResetBeforeCache();
543
+ // }
544
+ mAdapter.onViewRecycled(holder);
545
+ mAdapter.recycleItem(holder);
546
+ }
547
+ }
548
+
549
+ ArrayList<FastAdapter.Holder> tempHolders;
550
+ ArrayList<Integer> markToDelete;
551
+
552
+ void updateHolder(int pos){
553
+ // FastAdapter.Holder vh = findCacheHolderFromIndex(pos);
554
+ // if (vh != null) {
555
+ //// mAdapter.bindViewHolder(vh,pos);
556
+ //
557
+ // mAdapter.onBindViewHolder(vh,pos);
558
+ // }
559
+
560
+ final int type = mAdapter.getItemViewType(pos);
561
+ // if(cacheHolders == null){
562
+ // this.cacheHolders = new ArrayList<>();
563
+ // }
564
+ FastAdapter.Holder vh = null;
565
+ //先从当前view里找
566
+ FastAdapter.Holder cvh = findCacheHolderFromIndex(pos);
567
+ if(cvh != null){
568
+ //类型相同,只需要重新onBind
569
+ if(cvh.type == type) {
570
+ vh = cvh;
571
+ // if(LogUtils.isDebug()) {
572
+ // Log.e(TAG, "DebugPool findCacheHolderFromIndex type Matched ,vh" + vh.hashCode() + ",type:" + vh.type);
573
+ // }
574
+ mAdapter.onBindViewHolder(vh, pos);
575
+ // cacheHolders.add(pos, vh);
576
+ }else{
577
+ // //类型不同,放入缓存池
578
+ recycleItem(cvh, pos);
579
+ }
580
+ }
581
+ if(vh == null) {//对应位置没有缓存
582
+ //从adapter缓存里找
583
+ vh = obtainHolder(pos);
584
+ addHolderView(pos, vh);
585
+ mAdapter.onBindViewHolder(vh, pos);
586
+ cacheHolders.set(pos, vh);
587
+ }
588
+ }
589
+
590
+ @Override
591
+ public void setSharedItemStore(String name) {
592
+ if(mAdapter != null){
593
+ mAdapter.setShareItemStoreName(name);
594
+ }
595
+ }
596
+
597
+ public FastAdapter getAdapter() {
598
+ return mAdapter;
599
+ }
600
+
601
+ void addHolderView(int position, FastAdapter.Holder vh){
602
+ final RenderNode rn = vh.tag.template;
603
+ if(LogUtils.isDebug()) {
604
+ Log.v(TAG, "onAdapterChange add vh templateNode:" + rn);
605
+ }
606
+ // RenderUtil.reLayoutView(vh.itemView,rn.getX(),rn.getY(),rn.getWidth(), rn.getHeight());
607
+ final ViewGroup.LayoutParams lp = new ViewGroup.LayoutParams(rn.getWidth(),rn.getHeight());
608
+ if(vh.itemView.getParent() == null){
609
+ addView(vh.itemView,position,lp);
610
+ }else{
611
+ throw new IllegalStateException("此view Parent 不为空,请先删除 view:"+vh.itemView);
612
+ }
613
+ }
614
+
615
+ void removeHolder(int pos){
616
+ recycleItem(cacheHolders.get(pos),pos);
617
+ cacheHolders.remove(pos);
618
+ }
619
+
620
+ FastAdapter.Holder obtainHolder(int position){
621
+ final int type = mAdapter.getItemViewType(position);
622
+ FastAdapter.Holder vh = mAdapter.findOldCacheView(type);
623
+ if(vh == null) {
624
+ vh = mAdapter.createViewHolder(this, type);
625
+ if(LogUtils.isDebug()) {
626
+ Log.e(TAG, "DebugPool flex createHolder new vh" + vh.hashCode() + ",type:" + vh.type+",this:"+ExtendUtil.debugView(this)+",map:"+ recycledViewPoolMap);
627
+ }
628
+ }
629
+ return vh;
630
+ }
631
+ FastAdapter.Holder findHolderByPosition(int pos){
632
+ if (cacheHolders != null && cacheHolders.size() > pos && pos > -1) {
633
+ return cacheHolders.get(pos);
634
+ }
635
+ return null;
636
+ }
637
+ void onAdapterChange(){
638
+ this.hasReset = false;
639
+ //Log.d(TAG,"onAdapterChange itemCount:"+mAdapter.getItemCount());
640
+ if(mAdapter != null){
641
+ if(tempHolders != null){
642
+ tempHolders.clear();
643
+ }else{
644
+ tempHolders = new ArrayList<>();
645
+ }
646
+ //removeAllViews();
647
+ for(int i = 0; i < mAdapter.getItemCount(); i++){
648
+ try {
649
+ final int type = mAdapter.getItemViewType(i);
650
+
651
+ FastAdapter.Holder vh = null;
652
+ //先从当前view里找
653
+ FastAdapter.Holder cvh = findCacheHolderFromIndex(i);
654
+
655
+ if (cvh != null) {
656
+ //类型相同,只需要重新onBind
657
+ if (cvh.type == type) {
658
+ vh = cvh;
659
+ if (LogUtils.isDebug()) {
660
+ Log.i(TAG, "DebugPool findCacheHolderFromIndex type Matched ,vh" + vh.hashCode() + ",type:" + vh.type);
661
+ }
662
+ mAdapter.onBindViewHolder(vh, i);
663
+ if(isAttached){
664
+ mAdapter.onViewAttachedToWindow(vh);
665
+ }
666
+ tempHolders.add(i, vh);
667
+ } else {
668
+ //类型不同,放入缓存池
669
+ recycleItem(cvh, i);
670
+ }
671
+ }
672
+ if (vh == null) {//对应位置没有缓存
673
+ //从adapter缓存里找
674
+ vh = obtainHolder(i);
675
+ addHolderView(i, vh);
676
+ mAdapter.onBindViewHolder(vh, i);
677
+ if(isAttached){
678
+ mAdapter.onViewAttachedToWindow(vh);
679
+ }
680
+ // mAdapter.onViewAttachedToWindow(vh);
681
+ tempHolders.add(i, vh);
682
+ }
683
+ }catch (Throwable t){
684
+ t.printStackTrace();
685
+ }
686
+ }
687
+
688
+ if(tempHolders != null){
689
+ //删除不需要的view
690
+ if(cacheHolders == null){
691
+ this.cacheHolders = new ArrayList<>();
692
+ }
693
+ if(tempHolders.size() < cacheHolders.size()){
694
+ for(int i = tempHolders.size(); i < cacheHolders.size(); i ++){
695
+ recycleItem(cacheHolders.get(i),i);
696
+ }
697
+ }
698
+ this.cacheHolders.clear();
699
+ this.cacheHolders.addAll(tempHolders);
700
+ tempHolders.clear();
701
+ }
702
+ }
703
+ }
704
+
705
+ @Override
706
+ public void setCachePoolMap(HippyMap map) {
707
+ this.recycledViewPoolMap = map;
708
+ // Log.e("DebugPool","setCachePoolMap map :"+map+",this:"+ ExtendUtil.debugView(this));
709
+ updateCachePoolMap();
710
+ }
711
+
712
+ public void dispatchItemFunction(HippyArray var, @Nullable Promise promise) {
713
+ final int itemPos = var.getInt(0);
714
+ final String targetName = var.getString(1);
715
+ final String functionTargetName = var.getString(2);
716
+ final HippyArray array = var.getArray(3);
717
+
718
+ final RecyclerView.ViewHolder holder = findViewHolderForAdapterPosition(itemPos);
719
+ if (holder instanceof FastAdapter.Holder) {
720
+ FastAdapter.Holder vh = (FastAdapter.Holder) holder;
721
+ final FastAdapter.ElementNode targetNode = Utils.findElementNodeByName(targetName, vh.tag.getRootNode());
722
+ final View target = targetNode == null ? null : targetNode.boundView;
723
+ if (target != null && functionTargetName != null && !"dispatchFunctionByViewName".equals(functionTargetName)) {
724
+ if (LogUtils.isDebug()) {
725
+ Log.i(TAG, "dispatchItemFunction dispatchItemFunction work, target ==:" + target + ",targetName:" + targetName + ",functionTargetName:" + functionTargetName);
726
+ }
727
+ Utils.dispatchFunction(mAdapter.getControllerManager(), targetNode, functionTargetName, array, promise);
728
+ } else {
729
+ if (LogUtils.isDebug()) {
730
+ Log.e(TAG, "dispatchItemFunction dispatchFunctionByViewName error target ==:" + target + ",targetName:" + targetName + ",functionTargetName:" + functionTargetName);
731
+ }
732
+ }
733
+ } else {
734
+ Log.e(TAG, "dispatchItemFunction dispatchItemFunction error , found holder null , pos:" + itemPos);
735
+ }
736
+
737
+ }
738
+
739
+ private RecyclerView.ViewHolder findViewHolderForAdapterPosition(int itemPos) {
740
+ return findCacheHolderFromIndex(itemPos);
741
+ }
742
+
743
+ @Override
744
+ public View findViewByPosition(int position) {
745
+ if(position > -1 && position < getChildCount()){
746
+ return getChildAt(position);
747
+ }
748
+ return null;
749
+ }
750
+
751
+ @Override
752
+ public void notifyPauseTask() {
753
+ if(cacheHolders != null && mAdapter != null) {
754
+ for (int i = 0; i < cacheHolders.size(); i ++){
755
+ final View view = cacheHolders.get(i).itemView;
756
+ if(view instanceof FastAdapter.ScrollTaskHandler){
757
+ ((FastAdapter.ScrollTaskHandler) view).notifyPauseTask();
758
+ }
759
+ }
760
+ }
761
+ }
762
+
763
+ @Override
764
+ public void notifyBringToFront(boolean front) {
765
+ if(cacheHolders != null && mAdapter != null) {
766
+ for (int i = 0; i < cacheHolders.size(); i ++){
767
+ final View view = cacheHolders.get(i).itemView;
768
+ if(view instanceof FastAdapter.ScrollTaskHandler){
769
+ ((FastAdapter.ScrollTaskHandler) view).notifyBringToFront(front);
770
+ }
771
+ }
772
+ }
773
+ }
774
+
775
+ @Override
776
+ public void notifyResumeTask() {
777
+ if(cacheHolders != null && mAdapter != null) {
778
+ for (int i = 0; i < cacheHolders.size(); i ++){
779
+ final View view = cacheHolders.get(i).itemView;
780
+ if(view instanceof FastAdapter.ScrollTaskHandler){
781
+ ((FastAdapter.ScrollTaskHandler) view).notifyResumeTask();
782
+ }
783
+ }
784
+ }
785
+ }
786
+
787
+ void init(){
788
+ mAdapter = new FastAdapter();
789
+ mAdapter.setEnablePlaceholder(enablePlaceholder);
790
+ mAdapter.eventDeliverer = eventDeliverer;
791
+ // mAdapter.setShareViewPoolType(hashCode()+"");
792
+ mAdapter.setBoundFLexView(this);
793
+ }
794
+
795
+
796
+ @Override
797
+ public void clearPostTask(int type) {
798
+
799
+ }
800
+
801
+ @Override
802
+ public void setRootList(FastListView rootList,FastAdapter parentAdapter) {
803
+ if(mAdapter != null){
804
+ mAdapter.setRootList(rootList,parentAdapter);
805
+ }
806
+ }
807
+
808
+
809
+ @Override
810
+ public int findPositionByChild(View child) {
811
+ return -1;
812
+ }
813
+
814
+ private HippyViewGroup pageRootView;
815
+ @Override
816
+ public HippyViewGroup findPageRootView() {
817
+ if (pageRootView != null) {
818
+ return pageRootView;
819
+ }
820
+ View v = HippyViewGroup.findRootViewFromParent(this);
821
+ if(v instanceof HippyViewGroup){
822
+ pageRootView = (HippyViewGroup) v;
823
+ }
824
+ return pageRootView;
825
+ }
826
+
827
+ @Override
828
+ public void searchUpdateItemDataByItemID(String id, Object data, boolean traverse) {
829
+ if (mAdapter != null) {
830
+ FastAdapterUtil.updateItemData4FastAdapterTraverse(id,data,mAdapter.dataList,traverse,"FlexView:"+Integer.toHexString(hashCode()));
831
+ }
832
+ }
833
+
834
+ @Override
835
+ public void searchUpdateItemViewByItemID(String id, Object data, boolean traverse) {
836
+ FastAdapterUtil.updateItemViewByItemID(this.getView(),id,data,traverse);
837
+ }
838
+
839
+ @Override
840
+ public int findItemPositionBySID(String id) {
841
+ return mAdapter == null ? -1 : mAdapter.findItemPositionBySID(id);
842
+ }
843
+
844
+ /**
845
+ * 根据指定的itemID,动态的更新一个元素的属性,
846
+ */
847
+ @Override
848
+ public void searchUpdateItemPropsBySID(String name, String itemID, String prop, Object newValue, boolean updateView){
849
+ FastAdapterUtil.updateItemPropsByItemID(this.getView(),name,itemID,prop,newValue,updateView);
850
+ }
851
+
852
+ @Override
853
+ public void updateItemSpecificProp(String name, int position, String key, Object value,boolean updateView) {
854
+ if (mAdapter != null) {
855
+ final RecyclerView.ViewHolder vh = findViewHolderForAdapterPosition(position);
856
+ mAdapter.updateItemSpecificPropByTargetName(name, position, key, value, updateView,vh);
857
+ if (vh == null) {
858
+ Log.e(TAG, "updateItemSpecificProp error,没有找到对应的Holder,当前View可能没有在展示");
859
+ }
860
+ }
861
+ }
862
+
863
+ @Override
864
+ public View findFirstFocusByDirection(int direction) {
865
+ if (direction == View.FOCUS_DOWN) {
866
+ if (getChildCount() > 0) {
867
+ return getChildAt(0);
868
+ }
869
+ }
870
+ return null;
871
+ }
872
+
873
+ }