@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,308 @@
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.views.viewpager;
17
+
18
+ import com.tencent.mtt.hippy.HippyInstanceContext;
19
+ import com.tencent.mtt.hippy.modules.Promise;
20
+ import com.tencent.mtt.hippy.uimanager.HippyViewBase;
21
+ import com.tencent.mtt.hippy.uimanager.NativeGestureDispatcher;
22
+ import com.tencent.mtt.hippy.utils.I18nUtil;
23
+ import com.tencent.mtt.hippy.utils.LogUtils;
24
+ import com.tencent.mtt.supportui.views.viewpager.ViewPager;
25
+
26
+ import android.content.Context;
27
+ import android.os.Handler;
28
+ import android.os.Looper;
29
+ import android.text.TextUtils;
30
+ import android.view.MotionEvent;
31
+ import android.view.View;
32
+
33
+ @SuppressWarnings({"unused"})
34
+ public class HippyViewPager extends ViewPager implements HippyViewBase {
35
+
36
+ private static final String TAG = "HippyViewPager";
37
+
38
+ private final Runnable mMeasureAndLayout = new Runnable() {
39
+ @Override
40
+ public void run() {
41
+ measure(View.MeasureSpec.makeMeasureSpec(getWidth(), View.MeasureSpec.EXACTLY),
42
+ View.MeasureSpec.makeMeasureSpec(getHeight(), View.MeasureSpec.EXACTLY));
43
+ layout(getLeft(), getTop(), getRight(), getBottom());
44
+ }
45
+ };
46
+
47
+
48
+ private NativeGestureDispatcher mGestureDispatcher;
49
+ private boolean mFirstUpdateChild = true;
50
+ private final boolean mReNotifyOnAttach = false;
51
+ private ViewPagerPageChangeListener mPageListener;
52
+ private final Handler mHandler = new Handler(Looper.getMainLooper());
53
+ private Promise mCallBackPromise;
54
+
55
+ private void init(Context context,boolean enableTransformer) {
56
+ setCallPageChangedOnFirstLayout(true);
57
+ setEnableReLayoutOnAttachToWindow(false);
58
+
59
+ mPageListener = new ViewPagerPageChangeListener(this);
60
+ setOnPageChangeListener(mPageListener);
61
+ setAdapter(createAdapter(context));
62
+ setLeftDragOutSizeEnabled(false);
63
+ setRightDragOutSizeEnabled(false);
64
+
65
+ if (I18nUtil.isRTL()) {
66
+ setRotationY(180f);
67
+ }
68
+
69
+ //zhaopeng add
70
+ if(enableTransformer) {
71
+ setPageTransformer(new FadePageTransform());
72
+ setAutoScrollCustomDuration(300);
73
+ }
74
+
75
+ }
76
+
77
+ @Override
78
+ public void setAutoScrollCustomDuration(int duration) {
79
+ super.setAutoScrollCustomDuration(duration);
80
+ if(duration < 1){
81
+ setPageTransformer(null);
82
+ }
83
+ }
84
+
85
+ //zhaopeng add
86
+ public static final class FadePageTransform implements PageTransformer {
87
+
88
+ private static final float MIN_ALPHA = 0;
89
+
90
+ @Override
91
+ public void transformPage(View page, float position) {
92
+ LogUtils.v(TAG,"transformPage page:"+page+",position:"+position);
93
+ if (position < -1 || position > 1) {
94
+ page.setAlpha(0);
95
+ } else {
96
+ if (-1 <= position && position < 0) {
97
+ page.setAlpha(1 + position - MIN_ALPHA * position);
98
+ } else if (0 < position && position <= 1) {
99
+ page.setAlpha(1 - position + MIN_ALPHA * position);
100
+ } else {
101
+ page.setAlpha(1);
102
+ }
103
+ }
104
+ }
105
+ }
106
+
107
+ @Override
108
+ public void onViewAdded(View child) {
109
+ if (I18nUtil.isRTL()) {
110
+ child.setRotationY(180f);
111
+ }
112
+ super.onViewAdded(child);
113
+ }
114
+
115
+ public HippyViewPager(Context context, boolean isVertical,boolean enableTransform)
116
+ {
117
+ super(context, isVertical);
118
+ init(context,enableTransform);
119
+ }
120
+
121
+ public HippyViewPager(Context context)
122
+ {
123
+ super(context);
124
+ init(context,true);
125
+ }
126
+
127
+ public void setCallBackPromise(Promise promise) {
128
+ mCallBackPromise = promise;
129
+ }
130
+
131
+ public Promise getCallBackPromise() {
132
+ return mCallBackPromise;
133
+ }
134
+
135
+ protected HippyViewPagerAdapter createAdapter(Context context) {
136
+ return new HippyViewPagerAdapter((HippyInstanceContext) context, this);
137
+ }
138
+
139
+ public void setInitialPageIndex(int index) {
140
+ getAdapter().setInitPageIndex(index);
141
+ }
142
+
143
+
144
+ public void setChildCountAndUpdate(final int childCount) {
145
+ LogUtils.d(TAG, "doUpdateInternal: " + hashCode() + ", childCount=" + childCount);
146
+ if (mFirstUpdateChild) {
147
+ setFirstLayoutParameter(true);
148
+ mFirstUpdateChild = false;
149
+ }
150
+ getAdapter().setChildSize(childCount);
151
+ //getWindowToken() == null执行这个操作,onAttachToWindow就不需要了。
152
+ getAdapter().notifyDataSetChanged();
153
+ triggerRequestLayout();
154
+ }
155
+
156
+ protected void addViewToAdapter(HippyViewPagerItem view, int postion) {
157
+ HippyViewPagerAdapter adapter = getAdapter();
158
+ if (adapter != null) {
159
+ adapter.addView(view, postion);
160
+ }
161
+ }
162
+
163
+ protected int getAdapterViewSize() {
164
+ HippyViewPagerAdapter adapter = getAdapter();
165
+ if (adapter != null) {
166
+ return adapter.getItemViewSize();
167
+ }
168
+ return 0;
169
+ }
170
+
171
+ protected void removeViewFromAdapter(HippyViewPagerItem view) {
172
+ HippyViewPagerAdapter adapter = getAdapter();
173
+ if (adapter != null) {
174
+ adapter.removeView(view);
175
+ }
176
+ }
177
+
178
+ public View getViewFromAdapter(int currentItem) {
179
+ HippyViewPagerAdapter adapter = getAdapter();
180
+ if (adapter != null) {
181
+ return adapter.getViewAt(currentItem);
182
+ }
183
+ return null;
184
+ }
185
+
186
+ @Override
187
+ public HippyViewPagerAdapter getAdapter() {
188
+ return (HippyViewPagerAdapter) super.getAdapter();
189
+ }
190
+
191
+ @Override
192
+ public boolean onInterceptTouchEvent(MotionEvent ev) {
193
+ if (!isScrollEnabled()) {
194
+ return false;
195
+ }
196
+
197
+ return super.onInterceptTouchEvent(ev);
198
+ }
199
+
200
+ @Override
201
+ public boolean onTouchEvent(MotionEvent ev) {
202
+ if (!isScrollEnabled()) {
203
+ return false;
204
+ }
205
+
206
+ return super.onTouchEvent(ev);
207
+ }
208
+
209
+ @Override
210
+ protected void onAttachedToWindow() {
211
+ super.onAttachedToWindow();
212
+ LogUtils.d(TAG, "onAttachedToWindow: " + hashCode() + ", childCount=" + getChildCount()
213
+ + ", repopulate=" + mNeedRepopulate
214
+ + ", renotifyOnAttach=" + mReNotifyOnAttach);
215
+
216
+ /*
217
+ * hippy 在setChildCountAndUpdate打开,执行了
218
+ * if (mReNotifyOnAttach)
219
+ * {
220
+ * getAdapter().notifyDataSetChanged();
221
+ * mReNotifyOnAttach = false;
222
+ * }
223
+ */
224
+ // 9.6在supportui已经把windowToken的检查过滤去掉了,所以这里应该关掉
225
+ /*
226
+ * if (mNeedRepopulate) //这个是是在supportUI工程里面poplate的时候设置的。再没有上树的情况下
227
+ * {
228
+ * mNeedRepopulate = false;
229
+ * triggerRequestLayout();
230
+ * postInvalidate();
231
+ * }
232
+ */
233
+ }
234
+
235
+ @Override
236
+ protected void onDetachedFromWindow() {
237
+ super.onDetachedFromWindow();
238
+ LogUtils.d(TAG, "onDetachedFromWindow: " + hashCode() + ", childCount=" + getChildCount()
239
+ + ", repopulate=" + mNeedRepopulate
240
+ + ", renotifyOnAttach=" + mReNotifyOnAttach);
241
+ }
242
+
243
+ public void switchToPage(int item, boolean animated) {
244
+ LogUtils.d(TAG,
245
+ "switchToPage: " + hashCode() + ", item=" + item + ", animated=" + animated);
246
+ if (getAdapter().getCount() == 0) // viewpager的children没有初始化好的时候,直接设置mInitialPageIndex
247
+ {
248
+ LogUtils.d(TAG, "switchToPage: getAdapter().getCount() == 0");
249
+ } else {
250
+ if (getCurrentItem() != item) // 如果和当前位置一样,就不进行switch
251
+ {
252
+ if (isSettling()) {
253
+ // 如果仍然在滑动中,重置一下状态
254
+ setScrollingCacheEnabled(false);
255
+ mScroller.abortAnimation();
256
+ int oldX = getScrollX();
257
+ int oldY = getScrollY();
258
+ int x = mScroller.getCurrX();
259
+ int y = mScroller.getCurrY();
260
+ if (oldX != x || oldY != y) {
261
+ scrollTo(x, y);
262
+ }
263
+ setScrollState(SCROLL_STATE_IDLE);
264
+ }
265
+ setCurrentItem(item, animated);
266
+ } else if (!isFirstLayout()) {
267
+ mPageListener.onPageSelected(item);
268
+ }
269
+ }
270
+ }
271
+
272
+
273
+ @Override
274
+ public NativeGestureDispatcher getGestureDispatcher()
275
+ {
276
+ return mGestureDispatcher;
277
+ }
278
+
279
+ @Override
280
+ public void setGestureDispatcher(NativeGestureDispatcher nativeGestureDispatcher)
281
+ {
282
+ mGestureDispatcher = nativeGestureDispatcher;
283
+ }
284
+
285
+ public void triggerRequestLayout()
286
+ {
287
+ mHandler.post(mMeasureAndLayout);
288
+ }
289
+ public void setOverflow(String overflow)
290
+ {
291
+ //robinsli Android 支持 overflow: visible,超出容器之外的属性节点也可以正常显示
292
+ if(!TextUtils.isEmpty(overflow))
293
+ {
294
+ switch (overflow)
295
+ {
296
+ case "visible":
297
+ setClipChildren(false); //可以超出父亲区域
298
+ break;
299
+ case "hidden":
300
+ {
301
+ setClipChildren(true); //默认值是false
302
+ break;
303
+ }
304
+ }
305
+ }
306
+ invalidate();
307
+ }
308
+ }
@@ -0,0 +1,148 @@
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.views.viewpager;
17
+
18
+ import android.view.View;
19
+ import android.view.ViewGroup;
20
+ import com.tencent.mtt.hippy.HippyInstanceContext;
21
+ import com.tencent.mtt.supportui.views.viewpager.ViewPager;
22
+ import com.tencent.mtt.supportui.views.viewpager.ViewPagerAdapter;
23
+
24
+ import java.util.ArrayList;
25
+ import java.util.List;
26
+
27
+ @SuppressWarnings({"unused"})
28
+ public class HippyViewPagerAdapter extends ViewPagerAdapter {
29
+
30
+ private static final String TAG = "HippyViewPagerAdapter";
31
+
32
+ protected final List<View> mViews = new ArrayList<>();
33
+
34
+ private int mChildSize = 0;
35
+
36
+ private int mInitPageIndex = 0;
37
+
38
+ protected final HippyViewPager mViewPager;
39
+
40
+ public HippyViewPagerAdapter(HippyInstanceContext context, HippyViewPager viewPager) {
41
+ mViewPager = viewPager;
42
+ }
43
+
44
+ public void setChildSize(int size) {
45
+ mChildSize = size;
46
+ }
47
+
48
+ public void setInitPageIndex(int index) {
49
+ mInitPageIndex = index;
50
+ }
51
+
52
+ protected void addView(HippyViewPagerItem view, int position) {
53
+ if (view != null && position >= 0) {
54
+ if (position >= mViews.size()) {
55
+ mViews.add(view);
56
+ } else {
57
+ mViews.add(position, view);
58
+ }
59
+ }
60
+ }
61
+
62
+ protected void removeViewAtIndex(int postion) {
63
+ if (postion >= 0 && postion < mViews.size()) {
64
+ mViews.remove(postion);
65
+ }
66
+ }
67
+
68
+ protected void removeView(View view) {
69
+ int size = mViews.size();
70
+ int index = -1;
71
+ for (int i = 0; i < size; i++) {
72
+ View curr = getViewAt(i);
73
+ if (curr == view) {
74
+ index = i;
75
+ break;
76
+ }
77
+ }
78
+
79
+ if (index >= 0) {
80
+ mViews.remove(index);
81
+ }
82
+ }
83
+
84
+ protected View getViewAt(int index) {
85
+ if (index < 0 || index >= mViews.size()) {
86
+ return null;
87
+ }
88
+ return mViews.get(index);
89
+ }
90
+
91
+ protected int getItemViewSize() {
92
+ return mViews.size();
93
+ }
94
+
95
+ @Override
96
+ public int getCount() {
97
+ return mChildSize;
98
+ }
99
+
100
+ @Override
101
+ public int getItemPosition(Object object) {
102
+ if (mViews.isEmpty()) {
103
+ return POSITION_NONE;
104
+ }
105
+ @SuppressWarnings("SuspiciousMethodCalls") int index = mViews.indexOf(object);
106
+ if (index < 0) {
107
+ return POSITION_NONE;
108
+ }
109
+ return index;
110
+ }
111
+
112
+ @Override
113
+ public Object instantiateItem(ViewGroup container, int position) {
114
+ View viewWrapper = null;
115
+ if (position < mViews.size()) {
116
+ viewWrapper = mViews.get(position);
117
+ }
118
+
119
+ if (viewWrapper != null && viewWrapper.getParent() == null) {
120
+ container.addView(viewWrapper, new ViewPager.LayoutParams());
121
+ mViewPager.triggerRequestLayout();
122
+ } else {
123
+ viewWrapper = null;
124
+ }
125
+
126
+ return viewWrapper;
127
+ }
128
+
129
+ @Override
130
+ public int getInitialItemIndex() {
131
+ return mInitPageIndex;
132
+ }
133
+
134
+ @Override
135
+ public void destroyItem(ViewGroup container, int position, Object object) {
136
+ if (object instanceof View) {
137
+ View view = (View) object;
138
+ view.layout(0, 0, 0, 0);
139
+ container.removeView(view);
140
+ }
141
+
142
+ }
143
+
144
+ @Override
145
+ public boolean isViewFromObject(View view, Object object) {
146
+ return view == object;
147
+ }
148
+ }
@@ -0,0 +1,246 @@
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.views.viewpager;
17
+
18
+ import com.tencent.mtt.hippy.annotation.HippyController;
19
+ import com.tencent.mtt.hippy.annotation.HippyControllerProps;
20
+ import com.tencent.mtt.hippy.common.HippyArray;
21
+ import com.tencent.mtt.hippy.common.HippyMap;
22
+ import com.tencent.mtt.hippy.dom.node.NodeProps;
23
+ import com.tencent.mtt.hippy.modules.Promise;
24
+ import com.tencent.mtt.hippy.uimanager.HippyViewController;
25
+ import com.tencent.mtt.hippy.utils.LogUtils;
26
+ import com.tencent.mtt.hippy.utils.PixelUtil;
27
+
28
+ import android.content.Context;
29
+ import android.util.Log;
30
+ import android.view.View;
31
+ import android.view.ViewGroup;
32
+
33
+
34
+ @SuppressWarnings({"deprecation", "unused"})
35
+ @HippyController(name = HippyViewPagerController.CLASS_NAME)
36
+ public class HippyViewPagerController extends HippyViewController<HippyViewPager> {
37
+
38
+ public static final String CLASS_NAME = "ViewPager";
39
+
40
+ private static final String TAG = "HippyViewPagerController";
41
+
42
+ private static final String FUNC_SET_PAGE = "setPage";
43
+ private static final String FUNC_SET_PAGE_WITHOUT_ANIM = "setPageWithoutAnimation";
44
+
45
+ private static final String FUNC_SET_INDEX = "setIndex";
46
+ private static final String FUNC_NEXT_PAGE = "next";
47
+ private static final String FUNC_PREV_PAGE = "prev";
48
+
49
+ @Override
50
+ protected View createViewImpl(Context context) {
51
+ return null;
52
+ }
53
+
54
+ @Override
55
+ protected View createViewImpl(Context context, HippyMap iniProps)
56
+ {
57
+ boolean isVertical = false;
58
+ boolean enableTransform = true;
59
+ if (iniProps != null) {
60
+ if ((iniProps.containsKey("direction") && iniProps.getString("direction").equals("vertical"))
61
+ || iniProps.containsKey("vertical")) {
62
+ isVertical = true;
63
+ }
64
+ if(iniProps.containsKey("disableTransform")){
65
+ enableTransform = false;
66
+ }
67
+ }
68
+
69
+ return new HippyViewPager(context, isVertical,enableTransform);
70
+ }
71
+
72
+ @Override
73
+ protected void onCreateViewByCache(View view, String type, HippyMap iniProps) {
74
+ super.onCreateViewByCache(view, type, iniProps);
75
+
76
+ }
77
+
78
+ @Override
79
+ public View getChildAt(HippyViewPager hippyViewPager, int i) {
80
+ return hippyViewPager.getViewFromAdapter(i);
81
+ }
82
+
83
+ @Override
84
+ public int getChildCount(HippyViewPager hippyViewPager) {
85
+ return hippyViewPager.getAdapter().getCount();
86
+ }
87
+
88
+ @Override
89
+ protected void addView(ViewGroup parentView, View view, int index) {
90
+ LogUtils.d(TAG, "addView: " + parentView.hashCode() + ", index=" + index);
91
+ if (parentView instanceof HippyViewPager && view instanceof HippyViewPagerItem) {
92
+ HippyViewPager hippyViewPager = (HippyViewPager) parentView;
93
+ hippyViewPager.addViewToAdapter((HippyViewPagerItem) view, index);
94
+ } else {
95
+ LogUtils.e(TAG, "add view got invalid params");
96
+ }
97
+ }
98
+
99
+ @Override
100
+ protected void deleteChild(ViewGroup parentView, View childView) {
101
+ LogUtils.d(TAG, "deleteChild: " + parentView.hashCode());
102
+ if (parentView instanceof HippyViewPager && childView instanceof HippyViewPagerItem) {
103
+ ((HippyViewPager) parentView).removeViewFromAdapter((HippyViewPagerItem) childView);
104
+ } else {
105
+ LogUtils.e(TAG, "delete view got invalid params");
106
+ }
107
+ }
108
+
109
+ @Override
110
+ protected void onManageChildComplete(HippyViewPager viewPager) {
111
+ viewPager.setChildCountAndUpdate(viewPager.getAdapter().getItemViewSize());
112
+ }
113
+
114
+ @HippyControllerProps(name = "initialPage", defaultNumber = 0, defaultType = HippyControllerProps.NUMBER)
115
+ public void setInitialPage(HippyViewPager parent, int initialPage) {
116
+ parent.setInitialPageIndex(initialPage);
117
+ }
118
+
119
+ @HippyControllerProps(name = "scrollEnabled", defaultBoolean = true, defaultType = HippyControllerProps.BOOLEAN)
120
+ public void setScrollEnabled(HippyViewPager viewPager, boolean value) {
121
+ viewPager.setScrollEnabled(value);
122
+ }
123
+
124
+ @HippyControllerProps(name = "pageMargin", defaultNumber = 0, defaultType = HippyControllerProps.NUMBER)
125
+ public void setPageMargin(HippyViewPager pager, float margin) {
126
+ pager.setPageMargin((int) PixelUtil.dp2px(margin));
127
+ }
128
+
129
+ @HippyControllerProps(name = NodeProps.OVERFLOW, defaultType = HippyControllerProps.STRING, defaultString = "visible")
130
+ public void setOverflow(HippyViewPager pager, String overflow) {
131
+ pager.setOverflow(overflow);
132
+ }
133
+
134
+ //zhaopeng add
135
+ @HippyControllerProps(name = "focusSearchEnabled", defaultBoolean = false, defaultType = HippyControllerProps.BOOLEAN )
136
+ public void setFocusSearchEnabled(HippyViewPager viewPager, boolean value)
137
+ {
138
+ viewPager.setFocusSearchEnabled(value);
139
+ }
140
+
141
+ //zhaopeng add
142
+ @HippyControllerProps(name = "listenFocusSearchOnFail", defaultType = HippyControllerProps.BOOLEAN ,defaultBoolean = false)
143
+ public void setListenFocusSearchOnFail(HippyViewPager view, boolean listen){
144
+ view.setListenFocusSearchOnFail(listen);
145
+ }
146
+
147
+ //zhaopeng add
148
+ @HippyControllerProps(name = "scrollDuration", defaultNumber = 300, defaultType = HippyControllerProps.NUMBER)
149
+ public void setAutoScrollCustomDuration(HippyViewPager pager, int duration)
150
+ {
151
+ Log.d("swiper","swiper set scrollDuration "+duration);
152
+ pager.setAutoScrollCustomDuration(duration);
153
+ }
154
+
155
+ @Override
156
+ public void dispatchFunction(HippyViewPager view, String functionName, HippyArray var) {
157
+ if (view == null) {
158
+ return;
159
+ }
160
+ if(LogUtils.isDebug() ){
161
+ Log.i("ViewPagerLog","dispatchFunction functionName "+functionName+",var:"+var);
162
+ }
163
+ int curr = view.getCurrentItem();
164
+
165
+ switch (functionName) {
166
+ case FUNC_SET_PAGE:
167
+ if (var != null) {
168
+ Object selected = var.get(0);
169
+ if (selected instanceof Integer) {
170
+ view.switchToPage((int) selected, true);
171
+ }
172
+ }
173
+ break;
174
+ case FUNC_SET_PAGE_WITHOUT_ANIM:
175
+ if (var != null) {
176
+ Object selected = var.get(0);
177
+ if (selected instanceof Integer) {
178
+ view.switchToPage((int) selected, false);
179
+ }
180
+ }
181
+ break;
182
+ case FUNC_SET_INDEX:
183
+ if (var != null && var.size() > 0) {
184
+ HippyMap paramsMap = var.getMap(0);
185
+ if (paramsMap != null && paramsMap.size() > 0 && paramsMap
186
+ .containsKey("index")) {
187
+ int index = paramsMap.getInt("index");
188
+ boolean animated = !paramsMap.containsKey("animated") || paramsMap
189
+ .getBoolean("animated");
190
+ view.switchToPage(index, animated);
191
+ }
192
+ }
193
+ break;
194
+ case FUNC_NEXT_PAGE:
195
+ int total = view.getAdapter().getCount();
196
+ if (curr < total - 1) {
197
+ view.switchToPage(curr + 1, true);
198
+ }
199
+ break;
200
+ case FUNC_PREV_PAGE:
201
+ if (curr > 0) {
202
+ view.switchToPage(curr - 1, true);
203
+ }
204
+ break;
205
+ default:
206
+ break;
207
+ }
208
+ }
209
+
210
+ @SuppressWarnings("SwitchStatementWithTooFewBranches")
211
+ @Override
212
+ public void dispatchFunction(HippyViewPager view, String functionName, HippyArray params,
213
+ Promise promise) {
214
+ if (view == null) {
215
+ return;
216
+ }
217
+ if(LogUtils.isDebug() ){
218
+ Log.i("ViewPagerLog","dispatchFunction functionName "+functionName+",var:"+params);
219
+ }
220
+ switch (functionName) {
221
+ case FUNC_SET_INDEX:
222
+ if (params != null && params.size() > 0) {
223
+ HippyMap paramsMap = params.getMap(0);
224
+ if (paramsMap != null && paramsMap.size() > 0 && paramsMap
225
+ .containsKey("index")) {
226
+ int index = paramsMap.getInt("index");
227
+ boolean animated = !paramsMap.containsKey("animated") || paramsMap
228
+ .getBoolean("animated");
229
+ view.setCallBackPromise(promise);
230
+ view.switchToPage(index, animated);
231
+ return;
232
+ }
233
+ }
234
+
235
+ if (promise != null) {
236
+ String msg = "invalid parameter!";
237
+ HippyMap resultMap = new HippyMap();
238
+ resultMap.pushString("msg", msg);
239
+ promise.resolve(resultMap);
240
+ }
241
+ break;
242
+ default:
243
+ break;
244
+ }
245
+ }
246
+ }