@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,349 @@
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.text.TextUtils;
19
+ import android.util.Log;
20
+ import android.view.MotionEvent;
21
+ import android.view.View;
22
+ import android.view.ViewConfiguration;
23
+ import com.tencent.mtt.hippy.HippyEngineContext;
24
+ import com.tencent.mtt.hippy.HippyInstanceContext;
25
+ import com.tencent.mtt.hippy.adapter.monitor.HippyEngineMonitorAdapter;
26
+ import com.tencent.mtt.hippy.common.HippyMap;
27
+ import com.tencent.mtt.hippy.dom.node.NodeProps;
28
+ import com.tencent.mtt.hippy.modules.javascriptmodules.EventDispatcher;
29
+ import com.tencent.mtt.hippy.utils.ExtendUtil;
30
+ import com.tencent.mtt.hippy.utils.LogUtils;
31
+ import com.tencent.mtt.hippy.utils.PixelUtil;
32
+
33
+ import java.util.HashSet;
34
+
35
+ @SuppressWarnings({"deprecation", "unused"})
36
+ public class NativeGestureDispatcher implements NativeGestureProcessor.Callback {
37
+
38
+ private static final String TAG = "NativeGestureDispatcher";
39
+ private static final String KEY_EVENT_NAME = "name";
40
+ private static final String KEY_TAG_ID = "id";
41
+ private static final String KEY_PAGE_X = "page_x";
42
+ private static final String KEY_PAGE_Y = "page_y";
43
+ private static final int TAP_TIMEOUT = ViewConfiguration.getTapTimeout();
44
+
45
+ private static final View.OnClickListener mOnClickListener = new View.OnClickListener() {
46
+ @Override
47
+ public void onClick(final View view) {
48
+ if(LogUtils.isDebug()) {
49
+ Log.i("DebugClick", "onClick in NativeGestureDispatcher : view :"+ExtendUtil.debugView(view));
50
+ }
51
+ if (view != null && view.getContext() instanceof HippyInstanceContext) {
52
+ view.postDelayed(new Runnable() {
53
+ @Override
54
+ public void run() {
55
+ int tagId = view.getId();
56
+ handleClick(view, ((HippyInstanceContext) view.getContext())
57
+ .getEngineContext(), tagId, false);
58
+ }
59
+ }, TAP_TIMEOUT);
60
+ }
61
+
62
+ }
63
+ };
64
+ private static final View.OnLongClickListener mOnLongClickListener = new View.OnLongClickListener() {
65
+ @Override
66
+ public boolean onLongClick(final View view) {
67
+ if (view != null && view.getContext() instanceof HippyInstanceContext) {
68
+ view.postDelayed(new Runnable() {
69
+ @Override
70
+ public void run() {
71
+ int tagId = view.getId();
72
+ handleLongClick(((HippyInstanceContext) view.getContext())
73
+ .getEngineContext(), tagId);
74
+ }
75
+ }, TAP_TIMEOUT);
76
+
77
+
78
+ }
79
+ return true;
80
+ }
81
+ };
82
+
83
+ private static final View.OnAttachStateChangeListener mOnAttachedToWindowListener = new View.OnAttachStateChangeListener() {
84
+
85
+ @Override
86
+ public void onViewAttachedToWindow(View view) {
87
+ if (view != null && view.getContext() instanceof HippyInstanceContext) {
88
+ int tagId = view.getId();
89
+ handleAttachedToWindow(((HippyInstanceContext) view.getContext())
90
+ .getEngineContext(), tagId);
91
+ }
92
+ }
93
+
94
+ @Override
95
+ public void onViewDetachedFromWindow(View view) {
96
+
97
+ }
98
+ };
99
+
100
+ private static final View.OnAttachStateChangeListener mOnDetachedFromWindowListener = new View.OnAttachStateChangeListener() {
101
+
102
+ @Override
103
+ public void onViewAttachedToWindow(View view) {
104
+
105
+ }
106
+
107
+ @Override
108
+ public void onViewDetachedFromWindow(View view) {
109
+ if (view != null && view.getContext() instanceof HippyInstanceContext) {
110
+ int tagId = view.getId();
111
+ handleDetachedFromWindow(((HippyInstanceContext) view.getContext())
112
+ .getEngineContext(), tagId);
113
+ }
114
+ }
115
+ };
116
+
117
+ private final View mTargetView;
118
+ private HashSet<String> mGestureTypes = null;
119
+ private NativeGestureProcessor mGestureProcessor;
120
+ private HippyEngineContext mEngineContext;
121
+
122
+ public NativeGestureDispatcher(View view) {
123
+ mTargetView = view;
124
+ if (view != null && view.getContext() instanceof HippyInstanceContext) {
125
+ mEngineContext = ((HippyInstanceContext) view.getContext()).getEngineContext();
126
+ }
127
+ }
128
+
129
+ public static View.OnClickListener getOnClickListener() {
130
+ return mOnClickListener;
131
+ }
132
+
133
+ public static View.OnLongClickListener getOnLongClickListener() {
134
+ return mOnLongClickListener;
135
+ }
136
+
137
+ public static View.OnAttachStateChangeListener getOnAttachedToWindowListener() {
138
+ return mOnAttachedToWindowListener;
139
+ }
140
+
141
+ public static View.OnAttachStateChangeListener getOnDetachedFromWindowListener() {
142
+ return mOnDetachedFromWindowListener;
143
+ }
144
+
145
+ public static void handleClick(View target, HippyEngineContext context, int tagId,
146
+ boolean isCustomEvent) {
147
+ if (context == null) {
148
+ return;
149
+ }
150
+
151
+ HippyEngineMonitorAdapter monitorAdapter = context.getGlobalConfigs().getEngineMonitorAdapter();
152
+ if (monitorAdapter != null && target != null) {
153
+ monitorAdapter.reportClickEvent(target, isCustomEvent);
154
+ }
155
+
156
+ HippyMap params = new HippyMap();
157
+ params.pushString(KEY_EVENT_NAME, NodeProps.ON_CLICK);
158
+ params.pushInt(KEY_TAG_ID, tagId);
159
+ params.pushString("sid", ExtendUtil.getViewSID(target));
160
+ context.getModuleManager().getJavaScriptModule(EventDispatcher.class)
161
+ .receiveNativeGesture(params);
162
+ LogUtils.d("DebugClick", "send msg: " + NodeProps.ON_CLICK);
163
+ }
164
+
165
+ public static void handleLongClick(HippyEngineContext context, int tagId) {
166
+ if (context == null) {
167
+ return;
168
+ }
169
+ HippyMap params = new HippyMap();
170
+ params.pushString(KEY_EVENT_NAME, NodeProps.ON_LONG_CLICK);
171
+ params.pushInt(KEY_TAG_ID, tagId);
172
+ context.getModuleManager().getJavaScriptModule(EventDispatcher.class)
173
+ .receiveNativeGesture(params);
174
+ }
175
+
176
+ public static void handleAttachedToWindow(HippyEngineContext context, int tagId) {
177
+ if (context == null) {
178
+ return;
179
+ }
180
+ context.getModuleManager().getJavaScriptModule(EventDispatcher.class)
181
+ .receiveUIComponentEvent(tagId, NodeProps.ON_ATTACHED_TO_WINDOW, null);
182
+ }
183
+
184
+ public static void handleDetachedFromWindow(HippyEngineContext context, int tagId) {
185
+ if (context == null) {
186
+ return;
187
+ }
188
+ context.getModuleManager().getJavaScriptModule(EventDispatcher.class)
189
+ .receiveUIComponentEvent(tagId, NodeProps.ON_DETACHED_FROM_WINDOW, null);
190
+ }
191
+
192
+ public static void handlePressIn(HippyEngineContext context, int tagId) {
193
+ if (context == null) {
194
+ return;
195
+ }
196
+ HippyMap params = new HippyMap();
197
+ params.pushString(KEY_EVENT_NAME, NodeProps.ON_PRESS_IN);
198
+ params.pushInt(KEY_TAG_ID, tagId);
199
+ context.getModuleManager().getJavaScriptModule(EventDispatcher.class)
200
+ .receiveNativeGesture(params);
201
+ LogUtils.d(TAG, "send msg: " + NodeProps.ON_PRESS_IN);
202
+ }
203
+
204
+ public static void handlePressOut(HippyEngineContext context, int tagId) {
205
+ if (context == null) {
206
+ return;
207
+ }
208
+ HippyMap params = new HippyMap();
209
+ params.pushString(KEY_EVENT_NAME, NodeProps.ON_PRESS_OUT);
210
+ params.pushInt(KEY_TAG_ID, tagId);
211
+ context.getModuleManager().getJavaScriptModule(EventDispatcher.class)
212
+ .receiveNativeGesture(params);
213
+ LogUtils.d(TAG, "send msg: " + NodeProps.ON_PRESS_IN);
214
+ }
215
+
216
+ public static void handleTouchDown(HippyEngineContext context, int mTagId, float x, float y,
217
+ int viewId) {
218
+ int[] viewCoords = new int[2];
219
+ getLocationInWindow(context, viewId, viewCoords);
220
+ HippyMap params = new HippyMap();
221
+ params.pushString(KEY_EVENT_NAME, NodeProps.ON_TOUCH_DOWN);
222
+ params.pushInt(KEY_TAG_ID, mTagId);
223
+ params.pushDouble(KEY_PAGE_X, PixelUtil.px2dp(viewCoords[0] + x));
224
+ params.pushDouble(KEY_PAGE_Y, PixelUtil.px2dp(viewCoords[1] + y));
225
+ context.getModuleManager().getJavaScriptModule(EventDispatcher.class)
226
+ .receiveNativeGesture(params);
227
+ }
228
+
229
+ public static void handleTouchMove(HippyEngineContext context, int mTagId, float x, float y,
230
+ int viewId) {
231
+ int[] viewCoords = new int[2];
232
+ getLocationInWindow(context, viewId, viewCoords);
233
+ HippyMap params = new HippyMap();
234
+ params.pushString(KEY_EVENT_NAME, NodeProps.ON_TOUCH_MOVE);
235
+ params.pushInt(KEY_TAG_ID, mTagId);
236
+ params.pushDouble(KEY_PAGE_X, PixelUtil.px2dp(viewCoords[0] + x));
237
+ params.pushDouble(KEY_PAGE_Y, PixelUtil.px2dp(viewCoords[1] + y));
238
+ context.getModuleManager().getJavaScriptModule(EventDispatcher.class)
239
+ .receiveNativeGesture(params);
240
+ }
241
+
242
+ public static void handleTouchEnd(HippyEngineContext context, int mTagId, float x, float y,
243
+ int viewId) {
244
+ int[] viewCoords = new int[2];
245
+ getLocationInWindow(context, viewId, viewCoords);
246
+ HippyMap params = new HippyMap();
247
+ params.pushString(KEY_EVENT_NAME, NodeProps.ON_TOUCH_END);
248
+ params.pushInt(KEY_TAG_ID, mTagId);
249
+ params.pushDouble(KEY_PAGE_X, PixelUtil.px2dp(viewCoords[0] + x));
250
+ params.pushDouble(KEY_PAGE_Y, PixelUtil.px2dp(viewCoords[1] + y));
251
+ context.getModuleManager().getJavaScriptModule(EventDispatcher.class)
252
+ .receiveNativeGesture(params);
253
+ }
254
+
255
+ public static void handleTouchCancel(HippyEngineContext context, int mTagId, float x, float y,
256
+ int viewId) {
257
+ int[] viewCoords = new int[2];
258
+ getLocationInWindow(context, viewId, viewCoords);
259
+ HippyMap params = new HippyMap();
260
+ params.pushString(KEY_EVENT_NAME, NodeProps.ON_TOUCH_CANCEL);
261
+ params.pushInt(KEY_TAG_ID, mTagId);
262
+ params.pushDouble(KEY_PAGE_X, PixelUtil.px2dp(viewCoords[0] + x));
263
+ params.pushDouble(KEY_PAGE_Y, PixelUtil.px2dp(viewCoords[1] + y));
264
+ context.getModuleManager().getJavaScriptModule(EventDispatcher.class)
265
+ .receiveNativeGesture(params);
266
+ }
267
+
268
+ // private static void calculateViewCoords(float[] viewCoords, RenderNode node)
269
+ // {
270
+ // if (node != null)
271
+ // {
272
+ // viewCoords[0] = viewCoords[0] + node.getX();
273
+ // viewCoords[1] = viewCoords[1] + node.getY();
274
+ // calculateViewCoords(viewCoords, node.mParent);
275
+ // }
276
+ // }
277
+
278
+ private static void getLocationInWindow(HippyEngineContext context, int id, int[] viewCoords) {
279
+ if (id >= 0) {
280
+ View view = context.getRenderManager().getControllerManager().findView(id);
281
+ if (view != null) {
282
+ view.getLocationInWindow(viewCoords);
283
+ }
284
+ }
285
+ }
286
+
287
+ public boolean handleTouchEvent(MotionEvent event) {
288
+ if (mGestureProcessor == null) {
289
+ mGestureProcessor = new NativeGestureProcessor(this);
290
+ }
291
+ return mGestureProcessor.onTouchEvent(event);
292
+ }
293
+
294
+ public void addGestureType(String type) {
295
+ if (mGestureTypes == null) {
296
+ mGestureTypes = new HashSet<>();
297
+ }
298
+ mGestureTypes.add(type);
299
+ }
300
+
301
+ public void removeGestureType(String type) {
302
+ if (mGestureTypes != null) {
303
+ mGestureTypes.remove(type);
304
+ }
305
+ }
306
+
307
+ @Override
308
+ public boolean needHandle(String type) {
309
+ if (mGestureTypes != null) {
310
+
311
+ boolean result = mGestureTypes.contains(type);
312
+ if (!result && !TextUtils.equals(type, NodeProps.ON_INTERCEPT_TOUCH_EVENT) && !TextUtils
313
+ .equals(type, NodeProps.ON_INTERCEPT_PULL_UP_EVENT)) {
314
+ if (needHandle(NodeProps.ON_INTERCEPT_TOUCH_EVENT) || needHandle(
315
+ NodeProps.ON_INTERCEPT_PULL_UP_EVENT)) {
316
+ return true;
317
+ }
318
+ }
319
+ return result;
320
+ }
321
+ return false;
322
+ }
323
+
324
+ @Override
325
+ public void handle(String type, float x, float y) {
326
+ if (mTargetView == null) {
327
+ LogUtils.e("NativeGestureDispatcher", "handle!!! but view is null!!!!");
328
+ return;
329
+ }
330
+
331
+ if (TextUtils.equals(type, NodeProps.ON_PRESS_IN)) {
332
+ handlePressIn(mEngineContext, mTargetView.getId());
333
+ } else if (TextUtils.equals(type, NodeProps.ON_PRESS_OUT)) {
334
+ handlePressOut(mEngineContext, mTargetView.getId());
335
+ } else if (TextUtils.equals(type, NodeProps.ON_TOUCH_DOWN)) {
336
+ NativeGestureDispatcher
337
+ .handleTouchDown(mEngineContext, mTargetView.getId(), x, y, mTargetView.getId());
338
+ } else if (TextUtils.equals(type, NodeProps.ON_TOUCH_MOVE)) {
339
+ NativeGestureDispatcher
340
+ .handleTouchMove(mEngineContext, mTargetView.getId(), x, y, mTargetView.getId());
341
+ } else if (TextUtils.equals(type, NodeProps.ON_TOUCH_END)) {
342
+ NativeGestureDispatcher
343
+ .handleTouchEnd(mEngineContext, mTargetView.getId(), x, y, mTargetView.getId());
344
+ } else if (TextUtils.equals(type, NodeProps.ON_TOUCH_CANCEL)) {
345
+ NativeGestureDispatcher
346
+ .handleTouchCancel(mEngineContext, mTargetView.getId(), x, y, mTargetView.getId());
347
+ }
348
+ }
349
+ }
@@ -0,0 +1,188 @@
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.os.Handler;
19
+ import android.os.Looper;
20
+ import android.os.Message;
21
+ import android.view.MotionEvent;
22
+ import android.view.ViewConfiguration;
23
+
24
+ import com.tencent.mtt.hippy.dom.node.NodeProps;
25
+
26
+ @SuppressWarnings({"unused"})
27
+ public class NativeGestureProcessor {
28
+
29
+ static final int PRESS_IN = 1;
30
+ static final int PRESS_OUT = 2;
31
+ private static final int TAP_TIMEOUT = ViewConfiguration.getTapTimeout();
32
+ @SuppressWarnings("deprecation")
33
+ private static final int TOUCH_SLOP = ViewConfiguration.getTouchSlop();
34
+
35
+ boolean mNoPressIn = false;
36
+ final Callback mCallback;
37
+ private Handler mHandler;
38
+
39
+ private float mLastPressInX = 0;
40
+ private float mLastPressInY = 0;
41
+
42
+ public NativeGestureProcessor(Callback callback) {
43
+ this.mCallback = callback;
44
+ }
45
+
46
+ public Handler getGestureHandler() {
47
+ if (mHandler == null) {
48
+ mHandler = new GestureHandler(this);
49
+ }
50
+ return mHandler;
51
+ }
52
+
53
+ private Callback getCallback() {
54
+ return mCallback;
55
+ }
56
+
57
+ public boolean onTouchEvent(MotionEvent event) {
58
+ int action = event.getAction() & MotionEvent.ACTION_MASK;
59
+ boolean handle = false;
60
+ switch (action) {
61
+ case MotionEvent.ACTION_DOWN: {
62
+ if (mCallback.needHandle(NodeProps.ON_PRESS_IN)) {
63
+ mNoPressIn = false;
64
+ mLastPressInX = event.getX();
65
+ mLastPressInY = event.getY();
66
+ getGestureHandler().sendEmptyMessageDelayed(PRESS_IN, TAP_TIMEOUT);
67
+ handle = true;
68
+ } else {
69
+ mNoPressIn = true;
70
+ }
71
+
72
+ if (mCallback.needHandle(NodeProps.ON_TOUCH_DOWN)) {
73
+ mCallback.handle(NodeProps.ON_TOUCH_DOWN, event.getX(), event.getY());
74
+ handle = true;
75
+ }
76
+
77
+ if (!handle && mCallback.needHandle(NodeProps.ON_TOUCH_MOVE)) {
78
+ handle = true;
79
+ }
80
+
81
+ if (!handle && mCallback.needHandle(NodeProps.ON_TOUCH_END)) {
82
+ handle = true;
83
+ }
84
+
85
+ if (!handle && mCallback.needHandle(NodeProps.ON_TOUCH_CANCEL)) {
86
+ handle = true;
87
+ }
88
+ break;
89
+ }
90
+ case MotionEvent.ACTION_MOVE: {
91
+ if (mCallback.needHandle(NodeProps.ON_TOUCH_MOVE)) {
92
+ mCallback.handle(NodeProps.ON_TOUCH_MOVE, event.getX(), event.getY());
93
+ handle = true;
94
+ }
95
+
96
+ if (!handle && mCallback.needHandle(NodeProps.ON_TOUCH_END)) {
97
+ handle = true;
98
+ }
99
+
100
+ if (!handle && mCallback.needHandle(NodeProps.ON_TOUCH_CANCEL)) {
101
+ handle = true;
102
+ }
103
+
104
+ if (!mNoPressIn) {
105
+ float distX = Math.abs(event.getX() - mLastPressInX);
106
+ float distY = Math.abs(event.getY() - mLastPressInY);
107
+ if (distX > TOUCH_SLOP || distY > TOUCH_SLOP) {
108
+ getGestureHandler().removeMessages(PRESS_IN);
109
+ mNoPressIn = true;
110
+ }
111
+ }
112
+
113
+ break;
114
+ }
115
+ case MotionEvent.ACTION_UP: {
116
+ if (mCallback.needHandle(NodeProps.ON_TOUCH_END)) {
117
+ mCallback.handle(NodeProps.ON_TOUCH_END, event.getX(), event.getY());
118
+ handle = true;
119
+ }
120
+
121
+ if (mNoPressIn && mCallback.needHandle(NodeProps.ON_PRESS_OUT)) {
122
+ mCallback.handle(NodeProps.ON_PRESS_OUT, event.getX(), event.getY());
123
+ handle = true;
124
+ } else if (!mNoPressIn && mCallback.needHandle(NodeProps.ON_PRESS_OUT)) {
125
+ getGestureHandler().sendEmptyMessageDelayed(PRESS_OUT, TAP_TIMEOUT);
126
+ handle = true;
127
+ }
128
+
129
+ break;
130
+ }
131
+ case MotionEvent.ACTION_CANCEL:
132
+ case MotionEvent.ACTION_OUTSIDE: {
133
+ if (mCallback.needHandle(NodeProps.ON_TOUCH_CANCEL)) {
134
+ mCallback.handle(NodeProps.ON_TOUCH_CANCEL, event.getX(), event.getY());
135
+ handle = true;
136
+ }
137
+
138
+ if (mNoPressIn && mCallback.needHandle(NodeProps.ON_PRESS_OUT)) {
139
+ mCallback.handle(NodeProps.ON_PRESS_OUT, event.getX(), event.getY());
140
+ handle = true;
141
+ } else if (!mNoPressIn && mCallback.needHandle(NodeProps.ON_PRESS_OUT)) {
142
+ if (getGestureHandler().hasMessages(PRESS_IN)) {
143
+ getGestureHandler().removeMessages(PRESS_IN);
144
+ break;
145
+ }
146
+ getGestureHandler().sendEmptyMessageDelayed(PRESS_OUT, TAP_TIMEOUT);
147
+ handle = true;
148
+ }
149
+ break;
150
+ }
151
+ }
152
+ return handle;
153
+ }
154
+
155
+ public interface Callback {
156
+
157
+ boolean needHandle(String type);
158
+
159
+ void handle(String type, float x, float y);
160
+ }
161
+
162
+ private static class GestureHandler extends android.os.Handler {
163
+
164
+ private final NativeGestureProcessor mDispatcher;
165
+ private final NativeGestureProcessor.Callback mCallback;
166
+
167
+ public GestureHandler(NativeGestureProcessor dispatcher) {
168
+ super(Looper.getMainLooper());
169
+ mDispatcher = dispatcher;
170
+ mCallback = mDispatcher.getCallback();
171
+ }
172
+
173
+ @Override
174
+ public void handleMessage(Message msg) {
175
+ switch (msg.what) {
176
+ case PRESS_IN: {
177
+ mCallback.handle(NodeProps.ON_PRESS_IN, -1, -1);
178
+ mDispatcher.mNoPressIn = true;
179
+ break;
180
+ }
181
+ case PRESS_OUT: {
182
+ mCallback.handle(NodeProps.ON_PRESS_OUT, -1, -1);
183
+ break;
184
+ }
185
+ }
186
+ }
187
+ }
188
+ }
@@ -0,0 +1,43 @@
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.uimanager;
18
+
19
+ import com.tencent.mtt.hippy.HippyRootView;
20
+ import com.tencent.mtt.hippy.common.HippyMap;
21
+
22
+ @SuppressWarnings({"deprecation", "unused"})
23
+ public class PullFooterRenderNode extends ListItemRenderNode {
24
+
25
+ public PullFooterRenderNode(int mId, HippyMap mPropsToUpdate, String className,
26
+ HippyRootView mRootView, ControllerManager componentManager,
27
+ boolean isLazyLoad) {
28
+ super(mId, mPropsToUpdate, className, mRootView, componentManager, isLazyLoad);
29
+ }
30
+
31
+ /**
32
+ * 通过类名的hashCode来定义type,计算出来是一个很大的值,几乎不会和前端类型重复
33
+ */
34
+ @Override
35
+ public int getItemViewType() {
36
+ return this.getClassName().hashCode();
37
+ }
38
+
39
+ @Override
40
+ public boolean isPullFooter() {
41
+ return true;
42
+ }
43
+ }
@@ -0,0 +1,43 @@
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.uimanager;
18
+
19
+ import com.tencent.mtt.hippy.HippyRootView;
20
+ import com.tencent.mtt.hippy.common.HippyMap;
21
+
22
+ @SuppressWarnings({"deprecation", "unused"})
23
+ public class PullHeaderRenderNode extends ListItemRenderNode {
24
+
25
+ public PullHeaderRenderNode(int mId, HippyMap mPropsToUpdate, String className,
26
+ HippyRootView mRootView, ControllerManager componentManager,
27
+ boolean isLazyLoad) {
28
+ super(mId, mPropsToUpdate, className, mRootView, componentManager, isLazyLoad);
29
+ }
30
+
31
+ /**
32
+ * 通过类名的hashCode来定义type,计算出来是一个很大的值,几乎不会和前端类型重复
33
+ */
34
+ @Override
35
+ public int getItemViewType() {
36
+ return this.getClassName().hashCode();
37
+ }
38
+
39
+ @Override
40
+ public boolean isPullHeader() {
41
+ return true;
42
+ }
43
+ }