@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,102 @@
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
+ package com.tencent.mtt.hippy.uimanager;
17
+
18
+ import android.util.SparseArray;
19
+ import android.view.View;
20
+
21
+ import com.tencent.mtt.hippy.HippyEngineContext;
22
+ import com.tencent.mtt.hippy.HippyRootView;
23
+
24
+ import java.util.HashMap;
25
+ import java.util.Map;
26
+
27
+ public class ControllerRegistry {
28
+
29
+ private final SparseArray<View> mViews; // store all views here
30
+ private final SparseArray<View> mRoots; // store all root views here
31
+ private final Map<String, ControllerHolder> mControllers; // store all viewManager instance here
32
+ final HippyEngineContext engineContext;
33
+
34
+ public ControllerRegistry(HippyEngineContext context) {
35
+ mViews = new SparseArray<>();
36
+ mRoots = new SparseArray<>();
37
+ mControllers = new HashMap<>();
38
+ engineContext = context;
39
+ }
40
+
41
+ public void addControllerHolder(String name, ControllerHolder controllerHolder) {
42
+ mControllers.put(name, controllerHolder);
43
+ }
44
+
45
+ public ControllerHolder getControllerHolder(String className) {
46
+ return mControllers.get(className);
47
+ }
48
+
49
+ @SuppressWarnings({"rawtypes"})
50
+ public HippyViewController getViewController(String className) {
51
+ try {
52
+ return mControllers.get(className).hippyViewController;
53
+ } catch (Throwable e) {
54
+ if (engineContext != null) {
55
+ String message = "NOTFOUND:" + className;
56
+ Exception exception = new RuntimeException(message);
57
+ engineContext.getGlobalConfigs().getExceptionHandler()
58
+ .handleNativeException(exception, true);
59
+ }
60
+ }
61
+ return null;
62
+ }
63
+
64
+ public View getView(int id) {
65
+ View view = mViews.get(id);
66
+ if (view == null) {
67
+ view = mRoots.get(id);
68
+ }
69
+ return view;
70
+ }
71
+
72
+ public int getRootViewCount() {
73
+ return mRoots.size();
74
+ }
75
+
76
+ public int getRootIDAt(int index) {
77
+ return mRoots.keyAt(index);
78
+ }
79
+
80
+ public View getRootView(int id) {
81
+ return mRoots.get(id);
82
+ }
83
+
84
+
85
+ public void addView(View view) {
86
+ mViews.put(view.getId(), view);
87
+ }
88
+
89
+ public void addRootView(HippyRootView rootView) {
90
+ mRoots.put(rootView.getId(), rootView);
91
+ }
92
+
93
+
94
+ public void removeView(int id) {
95
+ mViews.remove(id);
96
+ }
97
+
98
+ public void removeRootView(int id) {
99
+ mRoots.remove(id);
100
+ }
101
+
102
+ }
@@ -0,0 +1,252 @@
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
+ package com.tencent.mtt.hippy.uimanager;
17
+
18
+ import android.util.Log;
19
+ import android.view.View;
20
+
21
+ import com.tencent.mtt.hippy.annotation.HippyControllerProps;
22
+ import com.tencent.mtt.hippy.common.HippyMap;
23
+ import com.tencent.mtt.hippy.dom.node.NodeProps;
24
+ import com.tencent.mtt.hippy.utils.ArgumentUtils;
25
+ import com.tencent.mtt.hippy.utils.ExtendUtil;
26
+ import com.tencent.mtt.hippy.utils.LogUtils;
27
+ import com.tencent.mtt.hippy.views.custom.HippyCustomPropsController;
28
+
29
+ import java.lang.reflect.Method;
30
+ import java.lang.reflect.Type;
31
+ import java.util.HashMap;
32
+ import java.util.Map;
33
+ import java.util.Set;
34
+
35
+ @SuppressWarnings({"deprecation", "unused", "rawtypes"})
36
+ public class ControllerUpdateManger<T, G> {
37
+
38
+ static final Map<Class, Map<String, PropsMethodHolder>> CLASS_PROPS_METHOD = new HashMap<>();
39
+
40
+ public void destroy() {
41
+ synchronized (CLASS_PROPS_METHOD){
42
+ CLASS_PROPS_METHOD.clear();
43
+ }
44
+ }
45
+
46
+ public static class PropsMethodHolder {
47
+
48
+ Method mMethod;
49
+ String mDefaultType;
50
+ String mDefaultString;
51
+ double mDefaultNumber;
52
+ boolean mDefaultBoolean;
53
+ Type[] mTypes;
54
+ }
55
+
56
+ private T customPropsController;
57
+
58
+ public void setCustomPropsController(T controller) {
59
+ assert (controller != null);
60
+ customPropsController = controller;
61
+ }
62
+
63
+ private static void findPropsMethod(Class cls, Map<String, PropsMethodHolder> hashMap) {
64
+ if (cls != HippyViewController.class) {
65
+ // find parent methods first
66
+ findPropsMethod(cls.getSuperclass(), hashMap);
67
+ }
68
+
69
+ Map<String, PropsMethodHolder> methodHolder = CLASS_PROPS_METHOD.get(cls);
70
+ if (methodHolder == null) {
71
+
72
+ Method[] methods = cls.getMethods();
73
+ for (Method method : methods) {
74
+ HippyControllerProps controllerProps = method.getAnnotation(HippyControllerProps.class);
75
+ if (controllerProps != null) {
76
+ String style = controllerProps.name();
77
+ PropsMethodHolder propsMethodHolder = new PropsMethodHolder();
78
+ propsMethodHolder.mDefaultNumber = controllerProps.defaultNumber();
79
+ propsMethodHolder.mDefaultType = controllerProps.defaultType();
80
+ propsMethodHolder.mDefaultString = controllerProps.defaultString();
81
+ propsMethodHolder.mDefaultBoolean = controllerProps.defaultBoolean();
82
+ propsMethodHolder.mMethod = method;
83
+ hashMap.put(style, propsMethodHolder);
84
+ }
85
+ }
86
+ // put to CLASS_PROPS_METHOD
87
+ CLASS_PROPS_METHOD.put(cls, new HashMap<>(hashMap));
88
+ } else {
89
+ hashMap.putAll(methodHolder);
90
+ }
91
+
92
+ }
93
+
94
+
95
+ /**
96
+ * zhaopeng add
97
+ * @param cla
98
+ * @return
99
+ */
100
+ private static Map<String, PropsMethodHolder> findPropsMethod(Class cla) {
101
+ Map<String, PropsMethodHolder> hashMap = new HashMap<>();
102
+ findPropsMethod(cla, hashMap);
103
+ return hashMap;
104
+ }
105
+ /**
106
+ * zhaopeng add
107
+ * @param cla
108
+ * @return
109
+ */
110
+ static Map<String, PropsMethodHolder> getPropsMethodSafety(Class cla) {
111
+ Map<String, PropsMethodHolder> methodHolder = CLASS_PROPS_METHOD.get(cla);
112
+ if (methodHolder == null) {
113
+ methodHolder = findPropsMethod(cla);
114
+ }
115
+ return methodHolder;
116
+ }
117
+
118
+ private void invokePropMethod(T t, G g, HippyMap hippyMap, String prop,
119
+ PropsMethodHolder propsMethodHolder) {
120
+ Object object = null;
121
+ try {
122
+ if (hippyMap.get(prop) == null) {
123
+ switch (propsMethodHolder.mDefaultType) {
124
+ case HippyControllerProps.BOOLEAN:
125
+ // if(LogUtils.isDebug()) {
126
+ // LogUtils.e("ControllerUpdateManager", "propsMethodHolder prop1 " + prop + ",invoke t:" + t + ",g:" + g + ",object:" + propsMethodHolder.mDefaultBoolean);
127
+ // }
128
+ propsMethodHolder.mMethod.invoke(t, g, propsMethodHolder.mDefaultBoolean);
129
+ break;
130
+ case HippyControllerProps.NUMBER:
131
+ if (propsMethodHolder.mTypes == null) {
132
+ propsMethodHolder.mTypes = propsMethodHolder.mMethod.getGenericParameterTypes();
133
+ }
134
+ // if(LogUtils.isDebug()) {
135
+ // LogUtils.e("ControllerUpdateManager", "propsMethodHolder prop2 " + prop + ",invoke t:" + t + ",g:" + g + ",object:" + propsMethodHolder.mDefaultNumber);
136
+ // }
137
+ propsMethodHolder.mMethod.invoke(t, g, ArgumentUtils
138
+ .parseArgument(propsMethodHolder.mTypes[1], propsMethodHolder.mDefaultNumber));
139
+ break;
140
+ case HippyControllerProps.STRING:
141
+ // if(LogUtils.isDebug()) {
142
+ // LogUtils.e("ControllerUpdateManager", "propsMethodHolder prop3 " + prop + ",invoke t:" + t + ",g:" + g + ",object:" + propsMethodHolder.mDefaultString);
143
+ // }
144
+ propsMethodHolder.mMethod.invoke(t, g, propsMethodHolder.mDefaultString);
145
+ break;
146
+ default:
147
+ // if(LogUtils.isDebug()) {
148
+ // LogUtils.e("ControllerUpdateManager", "propsMethodHolder prop4 " + prop + ",invoke t:" + t + ",g:" + g + ",object: null");
149
+ // }
150
+ propsMethodHolder.mMethod.invoke(t, g, null);
151
+ break;
152
+ }
153
+ } else {
154
+ object = hippyMap.get(prop);
155
+ if (object instanceof Number) {
156
+ if (propsMethodHolder.mTypes == null) {
157
+ propsMethodHolder.mTypes = propsMethodHolder.mMethod.getGenericParameterTypes();
158
+ }
159
+ object = ArgumentUtils.parseArgument(propsMethodHolder.mTypes[1], hippyMap, prop);
160
+ }
161
+ propsMethodHolder.mMethod.invoke(t, g, object);
162
+ }
163
+ } catch (Throwable e) {
164
+ if(LogUtils.isDebug()) {
165
+ if (hippyMap != null && hippyMap.get(prop) instanceof String) {
166
+ final String value = hippyMap.getString(prop);
167
+ if(!value.startsWith("${")){//表达式的直接忽略
168
+ if(g instanceof View) {
169
+ LogUtils.w("ControllerUpdateManager", "<---invokeProp error on "+ExtendUtil.debugViewLite((View) g));
170
+ LogUtils.w("ControllerUpdateManager", "prop:" + prop + ",object[ value:" + value+",class:"+(object == null ?"null":object.getClass())+"]--->");
171
+ }else{
172
+ e.printStackTrace();
173
+ }
174
+ }
175
+ }
176
+ }
177
+ }
178
+ }
179
+
180
+ private void handleCustomProps(T t, G g, HippyMap hippyMap, String prop) {
181
+ assert (g instanceof View);
182
+ assert (customPropsController instanceof HippyCustomPropsController);
183
+
184
+ boolean hasCustomMethodHolder = false;
185
+
186
+ //noinspection ConstantConditions
187
+ if (!(g instanceof View)) {
188
+ return;
189
+ }
190
+
191
+ Object customProps = hippyMap.get(prop);
192
+
193
+ if (customPropsController != null
194
+ && customPropsController instanceof HippyCustomPropsController) {
195
+ Class cla = customPropsController.getClass();
196
+ Map<String, PropsMethodHolder> methodHolder = CLASS_PROPS_METHOD.get(cla);
197
+ if (methodHolder == null) {
198
+ methodHolder = findPropsMethod(cla);
199
+ }
200
+ PropsMethodHolder propsMethodHolder = methodHolder.get(prop);
201
+ try {
202
+ if (propsMethodHolder != null) {
203
+ invokePropMethod(customPropsController, g, hippyMap, prop, propsMethodHolder);
204
+ hasCustomMethodHolder = true;
205
+ }
206
+ } catch (Throwable e) {
207
+ LogUtils.e("ControllerUpdateManager", "customProps " + e.getMessage(), e);
208
+ if(LogUtils.isDebug()) {
209
+ e.printStackTrace();
210
+ }
211
+ }
212
+ }
213
+
214
+ if (!hasCustomMethodHolder && t instanceof HippyViewController) {
215
+ //noinspection unchecked
216
+ ((HippyViewController) t).setCustomProp((View) g, prop, customProps);
217
+ }
218
+ }
219
+
220
+ public static Map<String, PropsMethodHolder> findMethodHolder(Class cla){
221
+ return CLASS_PROPS_METHOD.get(cla);
222
+ }
223
+
224
+ public void updateProps(T t, G g, HippyMap hippyMap) {
225
+ assert (hippyMap != null);
226
+
227
+ //noinspection ConstantConditions
228
+ if (hippyMap == null) {
229
+ return;
230
+ }
231
+ Class cla = t.getClass();
232
+
233
+ Map<String, PropsMethodHolder> methodHolder = CLASS_PROPS_METHOD.get(cla);
234
+ if (methodHolder == null) {
235
+ methodHolder = findPropsMethod(cla);
236
+ }
237
+
238
+ Set<String> props = hippyMap.keySet();
239
+ for (String prop : props) {
240
+ PropsMethodHolder propsMethodHolder = methodHolder.get(prop);
241
+ if (propsMethodHolder != null) {
242
+ invokePropMethod(t, g, hippyMap, prop, propsMethodHolder);
243
+ } else {
244
+ if (prop.equals(NodeProps.STYLE) && hippyMap.get(prop) instanceof HippyMap) {
245
+ updateProps(t, g, (HippyMap) hippyMap.get(prop));
246
+ } else {
247
+ handleCustomProps(t, g, hippyMap, prop);
248
+ }
249
+ }
250
+ }
251
+ }
252
+ }