@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.
- package/package.json +1 -1
- package/rules/.clinerules +27 -4
- package/rules/.cursorrules +27 -4
- package/rules/.github/copilot-instructions.md +27 -4
- package/rules/.source/hippy/extend_views/CoverFlowHorizontalView.java +203 -0
- package/rules/.source/hippy/extend_views/CoverFlowVerticalView.java +203 -0
- package/rules/.source/hippy/extend_views/CoverFlowViewController.java +195 -0
- package/rules/.source/hippy/extend_views/EngineRootView.java +125 -0
- package/rules/.source/hippy/extend_views/ExtendTag.java +83 -0
- package/rules/.source/hippy/extend_views/FocusSearchHelper.java +124 -0
- package/rules/.source/hippy/extend_views/IRecyclerItemView.java +12 -0
- package/rules/.source/hippy/extend_views/JSEventHandleView.java +5 -0
- package/rules/.source/hippy/extend_views/MarqueeRelayManager.java +133 -0
- package/rules/.source/hippy/extend_views/MarqueeRelayTextView.java +211 -0
- package/rules/.source/hippy/extend_views/ProgressBarView.java +83 -0
- package/rules/.source/hippy/extend_views/ProgressBarViewController.java +145 -0
- package/rules/.source/hippy/extend_views/SeekBarView.java +104 -0
- package/rules/.source/hippy/extend_views/SeekBarViewController.java +218 -0
- package/rules/.source/hippy/extend_views/StateImageView.java +149 -0
- package/rules/.source/hippy/extend_views/StateImageViewController.java +34 -0
- package/rules/.source/hippy/extend_views/TVButtonView.java +314 -0
- package/rules/.source/hippy/extend_views/TVButtonViewController.java +89 -0
- package/rules/.source/hippy/extend_views/TVTextView.java +684 -0
- package/rules/.source/hippy/extend_views/TVViewActor.java +811 -0
- package/rules/.source/hippy/extend_views/TVViewActorHost.java +6 -0
- package/rules/.source/hippy/extend_views/TVViewActor/346/216/245/345/205/245.md +66 -0
- package/rules/.source/hippy/extend_views/TemplateUtil.java +336 -0
- package/rules/.source/hippy/extend_views/TextButtonNode.java +47 -0
- package/rules/.source/hippy/extend_views/TextViewController.java +377 -0
- package/rules/.source/hippy/extend_views/fastlist/CenterFlyInAnimator.java +96 -0
- package/rules/.source/hippy/extend_views/fastlist/ChildOnScreenScroller.java +548 -0
- package/rules/.source/hippy/extend_views/fastlist/ClonedViewTag.java +17 -0
- package/rules/.source/hippy/extend_views/fastlist/EventDeliverer.java +55 -0
- package/rules/.source/hippy/extend_views/fastlist/FastAdapter.java +4683 -0
- package/rules/.source/hippy/extend_views/fastlist/FastAdapterUtil.java +982 -0
- package/rules/.source/hippy/extend_views/fastlist/FastFlexNode.java +48 -0
- package/rules/.source/hippy/extend_views/fastlist/FastFlexView.java +873 -0
- package/rules/.source/hippy/extend_views/fastlist/FastFlexViewController.java +130 -0
- package/rules/.source/hippy/extend_views/fastlist/FastItemNode.java +67 -0
- package/rules/.source/hippy/extend_views/fastlist/FastItemView.java +306 -0
- package/rules/.source/hippy/extend_views/fastlist/FastItemViewController.java +106 -0
- package/rules/.source/hippy/extend_views/fastlist/FastListModule.java +95 -0
- package/rules/.source/hippy/extend_views/fastlist/FastListNode.java +90 -0
- package/rules/.source/hippy/extend_views/fastlist/FastListView.java +2466 -0
- package/rules/.source/hippy/extend_views/fastlist/FastListViewController.java +1038 -0
- 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
- package/rules/.source/hippy/extend_views/fastlist/FastPendingView.java +47 -0
- package/rules/.source/hippy/extend_views/fastlist/ItemDecorations.java +71 -0
- package/rules/.source/hippy/extend_views/fastlist/ItemStoreNode.java +64 -0
- package/rules/.source/hippy/extend_views/fastlist/ItemStoreView.java +13 -0
- package/rules/.source/hippy/extend_views/fastlist/ItemStoreViewController.java +45 -0
- package/rules/.source/hippy/extend_views/fastlist/ListItemHolder.java +7 -0
- package/rules/.source/hippy/extend_views/fastlist/ListViewControlProp.java +41 -0
- package/rules/.source/hippy/extend_views/fastlist/MouseRecycleView.java +509 -0
- package/rules/.source/hippy/extend_views/fastlist/OnFastItemClickListener.java +12 -0
- package/rules/.source/hippy/extend_views/fastlist/OnFastItemFocusChangeListener.java +9 -0
- package/rules/.source/hippy/extend_views/fastlist/OnFastScrollStateChangedListener.java +7 -0
- package/rules/.source/hippy/extend_views/fastlist/PendingListNode.java +18 -0
- package/rules/.source/hippy/extend_views/fastlist/PendingViewController.java +13 -0
- package/rules/.source/hippy/extend_views/fastlist/PostHandlerView.java +6 -0
- package/rules/.source/hippy/extend_views/fastlist/PostTaskHolder.java +20 -0
- package/rules/.source/hippy/extend_views/fastlist/ReplaceChildController.java +105 -0
- package/rules/.source/hippy/extend_views/fastlist/ReplaceChildView.java +312 -0
- package/rules/.source/hippy/extend_views/fastlist/TVListView.java +3692 -0
- package/rules/.source/hippy/extend_views/fastlist/TemplateCodeParser.java +247 -0
- package/rules/.source/hippy/extend_views/fastlist/Utils.java +572 -0
- package/rules/.source/hippy/extend_views/fastlist/ViewTag.java +317 -0
- package/rules/.source/hippy/extend_views/fastlist/VirtualListView.java +8 -0
- package/rules/.source/hippy/extend_views/fastlist/diff/FastListDataBindingHelper.java +320 -0
- package/rules/.source/hippy/extend_views/fastlist/diff/KeyDiffHelper.java +289 -0
- package/rules/.source/hippy/extend_views/fastlist/diff/NoKeyDiffHelper.java +278 -0
- package/rules/.source/hippy/extend_views/tag/FontTag.java +53 -0
- package/rules/.source/hippy/extend_views/tag/HtmlTag.java +191 -0
- package/rules/.source/hippy/extend_views/tag/HtmlTagHandler.java +185 -0
- package/rules/.source/hippy/extend_views/tag/SpanTag.java +160 -0
- package/rules/.source/hippy/extend_views/tag/TextFontSpan.java +102 -0
- package/rules/.source/hippy/extend_views/waterfall/Chunk.java +10 -0
- package/rules/.source/hippy/extend_views/waterfall/ChunkGroup.java +5 -0
- package/rules/.source/hippy/extend_views/waterfall/Section.java +4 -0
- package/rules/.source/hippy/extend_views/waterfall/Tabs.java +5 -0
- package/rules/.source/hippy/extend_views/waterfall/WaterfallUtils.java +26 -0
- package/rules/.source/hippy/hippy_uimanager/ControllerHolder.java +30 -0
- package/rules/.source/hippy/hippy_uimanager/ControllerManager.java +651 -0
- package/rules/.source/hippy/hippy_uimanager/ControllerRegistry.java +102 -0
- package/rules/.source/hippy/hippy_uimanager/ControllerUpdateManger.java +252 -0
- package/rules/.source/hippy/hippy_uimanager/CustomControllerHelper.java +425 -0
- package/rules/.source/hippy/hippy_uimanager/DiffUtils.java +526 -0
- package/rules/.source/hippy/hippy_uimanager/ExtendViewGroup.java +36 -0
- package/rules/.source/hippy/hippy_uimanager/HippyCustomViewCreator.java +29 -0
- package/rules/.source/hippy/hippy_uimanager/HippyGroupController.java +83 -0
- package/rules/.source/hippy/hippy_uimanager/HippyViewBase.java +27 -0
- package/rules/.source/hippy/hippy_uimanager/HippyViewController.java +2189 -0
- package/rules/.source/hippy/hippy_uimanager/HippyViewEvent.java +52 -0
- package/rules/.source/hippy/hippy_uimanager/IHippyZIndexViewGroup.java +24 -0
- package/rules/.source/hippy/hippy_uimanager/InternalExtendViewUtil.java +395 -0
- package/rules/.source/hippy/hippy_uimanager/ListItemRenderNode.java +143 -0
- package/rules/.source/hippy/hippy_uimanager/ListViewRenderNode.java +44 -0
- package/rules/.source/hippy/hippy_uimanager/MatrixUtil.java +470 -0
- package/rules/.source/hippy/hippy_uimanager/NativeGestureDispatcher.java +349 -0
- package/rules/.source/hippy/hippy_uimanager/NativeGestureProcessor.java +188 -0
- package/rules/.source/hippy/hippy_uimanager/PullFooterRenderNode.java +43 -0
- package/rules/.source/hippy/hippy_uimanager/PullHeaderRenderNode.java +43 -0
- package/rules/.source/hippy/hippy_uimanager/RenderManager.java +304 -0
- package/rules/.source/hippy/hippy_uimanager/RenderNode.java +533 -0
- package/rules/.source/hippy/hippy_uimanager/StateView.java +17 -0
- package/rules/.source/hippy/hippy_uimanager/TransformUtil.java +125 -0
- package/rules/.source/hippy/hippy_uimanager/ViewGroupDrawingOrderHelper.java +108 -0
- package/rules/.source/hippy/hippy_uimanager/ViewStateProvider.java +10 -0
- package/rules/.source/hippy/hippy_views/audioview/AudioPlayManager.java +457 -0
- package/rules/.source/hippy/hippy_views/audioview/AudioView.java +225 -0
- package/rules/.source/hippy/hippy_views/audioview/AudioViewController.java +135 -0
- package/rules/.source/hippy/hippy_views/common/CommonBackgroundDrawable.java +58 -0
- package/rules/.source/hippy/hippy_views/common/CommonBorder.java +37 -0
- package/rules/.source/hippy/hippy_views/custom/HippyCustomPropsController.java +61 -0
- package/rules/.source/hippy/hippy_views/hippylist/HippyRecyclerListAdapter.java +399 -0
- package/rules/.source/hippy/hippy_views/hippylist/HippyRecyclerView.java +378 -0
- package/rules/.source/hippy/hippy_views/hippylist/HippyRecyclerViewController.java +187 -0
- package/rules/.source/hippy/hippy_views/hippylist/HippyRecyclerViewHolder.java +39 -0
- package/rules/.source/hippy/hippy_views/hippylist/HippyRecyclerViewWrapper.java +134 -0
- package/rules/.source/hippy/hippy_views/hippylist/NodePositionHelper.java +55 -0
- package/rules/.source/hippy/hippy_views/hippylist/PreloadHelper.java +54 -0
- package/rules/.source/hippy/hippy_views/hippylist/PullFooterEventHelper.java +61 -0
- package/rules/.source/hippy/hippy_views/hippylist/PullHeaderEventHelper.java +127 -0
- package/rules/.source/hippy/hippy_views/hippylist/RecyclerViewEventHelper.java +394 -0
- package/rules/.source/hippy/hippy_views/image/HippyContentDrawable.java +113 -0
- package/rules/.source/hippy/hippy_views/image/HippyImageView.java +1608 -0
- package/rules/.source/hippy/hippy_views/image/HippyImageViewController.java +382 -0
- package/rules/.source/hippy/hippy_views/image/IImageStateListener.java +7 -0
- package/rules/.source/hippy/hippy_views/list/ChildOnScreenScroller.java +255 -0
- package/rules/.source/hippy/hippy_views/list/HippyListAdapter.java +647 -0
- package/rules/.source/hippy/hippy_views/list/HippyListItemView.java +162 -0
- package/rules/.source/hippy/hippy_views/list/HippyListItemViewController.java +45 -0
- package/rules/.source/hippy/hippy_views/list/HippyListView.java +915 -0
- package/rules/.source/hippy/hippy_views/list/HippyListViewController.java +622 -0
- package/rules/.source/hippy/hippy_views/list/HippyRecycler.java +31 -0
- package/rules/.source/hippy/hippy_views/list/IRecycleItemTypeChange.java +23 -0
- package/rules/.source/hippy/hippy_views/list/ItemDecorations.java +70 -0
- package/rules/.source/hippy/hippy_views/list/NegativeLongKeyFlinger.java +156 -0
- package/rules/.source/hippy/hippy_views/list/NodeHolder.java +34 -0
- package/rules/.source/hippy/hippy_views/list/RecycleViewFlinger.java +126 -0
- package/rules/.source/hippy/hippy_views/list/TVRecyclerView.java +2070 -0
- package/rules/.source/hippy/hippy_views/list/TVSingleLineListView.java +15 -0
- package/rules/.source/hippy/hippy_views/modal/HippyModalHostManager.java +102 -0
- package/rules/.source/hippy/hippy_views/modal/HippyModalHostView.java +597 -0
- package/rules/.source/hippy/hippy_views/modal/ModalHostHelper.java +46 -0
- package/rules/.source/hippy/hippy_views/modal/ModalStyleNode.java +34 -0
- package/rules/.source/hippy/hippy_views/modal/RequestCloseEvent.java +32 -0
- package/rules/.source/hippy/hippy_views/modal/ShowEvent.java +31 -0
- package/rules/.source/hippy/hippy_views/navigator/Navigator.java +126 -0
- package/rules/.source/hippy/hippy_views/navigator/NavigatorController.java +120 -0
- package/rules/.source/hippy/hippy_views/refresh/HippyPullFooterView.java +47 -0
- package/rules/.source/hippy/hippy_views/refresh/HippyPullFooterViewController.java +65 -0
- package/rules/.source/hippy/hippy_views/refresh/HippyPullHeaderView.java +39 -0
- package/rules/.source/hippy/hippy_views/refresh/HippyPullHeaderViewController.java +104 -0
- package/rules/.source/hippy/hippy_views/refresh/RefreshWrapper.java +237 -0
- package/rules/.source/hippy/hippy_views/refresh/RefreshWrapperController.java +62 -0
- package/rules/.source/hippy/hippy_views/refresh/RefreshWrapperItemController.java +39 -0
- package/rules/.source/hippy/hippy_views/refresh/RefreshWrapperItemView.java +26 -0
- package/rules/.source/hippy/hippy_views/scroll/HippyHorizontalScrollView.java +500 -0
- package/rules/.source/hippy/hippy_views/scroll/HippyOnScrollHelper.java +39 -0
- package/rules/.source/hippy/hippy_views/scroll/HippyScrollView.java +46 -0
- package/rules/.source/hippy/hippy_views/scroll/HippyScrollViewController.java +178 -0
- package/rules/.source/hippy/hippy_views/scroll/HippyScrollViewEventHelper.java +92 -0
- package/rules/.source/hippy/hippy_views/scroll/HippyVerticalScrollView.java +522 -0
- package/rules/.source/hippy/hippy_views/text/HippyTextView.java +512 -0
- package/rules/.source/hippy/hippy_views/text/HippyTextViewController.java +77 -0
- package/rules/.source/hippy/hippy_views/textinput/HippyTextInput.java +668 -0
- package/rules/.source/hippy/hippy_views/textinput/HippyTextInputController.java +528 -0
- package/rules/.source/hippy/hippy_views/textinput/TextInputNode.java +115 -0
- package/rules/.source/hippy/hippy_views/videoview/APEZProvider.java +287 -0
- package/rules/.source/hippy/hippy_views/videoview/APKExpansionSupport.java +82 -0
- package/rules/.source/hippy/hippy_views/videoview/PivotPoint.java +13 -0
- package/rules/.source/hippy/hippy_views/videoview/ScalableType.java +34 -0
- package/rules/.source/hippy/hippy_views/videoview/ScalableVideoView.java +265 -0
- package/rules/.source/hippy/hippy_views/videoview/ScaleManager.java +191 -0
- package/rules/.source/hippy/hippy_views/videoview/Size.java +19 -0
- package/rules/.source/hippy/hippy_views/videoview/VideoHippyView.java +917 -0
- package/rules/.source/hippy/hippy_views/videoview/VideoHippyViewController.java +236 -0
- package/rules/.source/hippy/hippy_views/videoview/ZipResourceFile.java +427 -0
- package/rules/.source/hippy/hippy_views/view/CardRootView.java +28 -0
- package/rules/.source/hippy/hippy_views/view/CustomLayoutView.java +10 -0
- package/rules/.source/hippy/hippy_views/view/CustomNodeView.java +5 -0
- package/rules/.source/hippy/hippy_views/view/DialogViewGroup.java +113 -0
- package/rules/.source/hippy/hippy_views/view/HippyViewGroup.java +2042 -0
- package/rules/.source/hippy/hippy_views/view/HippyViewGroupController.java +583 -0
- package/rules/.source/hippy/hippy_views/view/WindowRoot.java +5 -0
- package/rules/.source/hippy/hippy_views/viewpager/HippyViewPager.java +308 -0
- package/rules/.source/hippy/hippy_views/viewpager/HippyViewPagerAdapter.java +148 -0
- package/rules/.source/hippy/hippy_views/viewpager/HippyViewPagerController.java +246 -0
- package/rules/.source/hippy/hippy_views/viewpager/HippyViewPagerItem.java +27 -0
- package/rules/.source/hippy/hippy_views/viewpager/HippyViewPagerItemController.java +42 -0
- package/rules/.source/hippy/hippy_views/viewpager/ViewPagerPageChangeListener.java +114 -0
- package/rules/.source/hippy/hippy_views/viewpager/event/HippyPageItemExposureEvent.java +40 -0
- package/rules/.source/hippy/hippy_views/viewpager/event/HippyPageScrollEvent.java +43 -0
- package/rules/.source/hippy/hippy_views/viewpager/event/HippyPageScrollStateChangedEvent.java +42 -0
- package/rules/.source/hippy/hippy_views/viewpager/event/HippyPageSelectedEvent.java +42 -0
- package/rules/.source/hippy/hippy_views/webview/HippyWebView.java +160 -0
- package/rules/.source/hippy/hippy_views/webview/HippyWebViewBridge.java +20 -0
- package/rules/.source/hippy/hippy_views/webview/HippyWebViewController.java +103 -0
- package/rules/.source/hippy/hippy_views/webview/HippyWebViewInner.java +77 -0
- package/rules/.windsurfrules +27 -4
- package/rules/AGENTS.md +27 -4
- package/rules/CLAUDE.md +27 -3
- package/rules/GEMINI.md +25 -3
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
/* Tencent is pleased to support the open source community by making Hippy available.
|
|
2
|
+
* Copyright (C) 2018 THL A29 Limited, a Tencent company. All rights reserved.
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
package com.tencent.mtt.hippy.views.hippylist;
|
|
18
|
+
|
|
19
|
+
import android.content.Context;
|
|
20
|
+
import android.os.Build.VERSION_CODES;
|
|
21
|
+
import android.support.annotation.NonNull;
|
|
22
|
+
import android.support.annotation.RequiresApi;
|
|
23
|
+
import android.support.v7.widget.HippyRecyclerExtension;
|
|
24
|
+
import android.support.v7.widget.HippyRecyclerPool;
|
|
25
|
+
import android.view.View;
|
|
26
|
+
import android.view.ViewTreeObserver.OnGlobalLayoutListener;
|
|
27
|
+
import android.widget.FrameLayout;
|
|
28
|
+
import com.tencent.mtt.hippy.HippyEngineContext;
|
|
29
|
+
import com.tencent.mtt.hippy.HippyInstanceContext;
|
|
30
|
+
import com.tencent.mtt.hippy.uimanager.HippyViewBase;
|
|
31
|
+
import com.tencent.mtt.hippy.uimanager.NativeGestureDispatcher;
|
|
32
|
+
import com.tencent.mtt.nxeasy.recyclerview.helper.skikcy.IHeaderHost;
|
|
33
|
+
|
|
34
|
+
public class HippyRecyclerViewWrapper<HRCV extends HippyRecyclerView> extends FrameLayout implements
|
|
35
|
+
HippyViewBase,
|
|
36
|
+
IHeaderHost {
|
|
37
|
+
|
|
38
|
+
protected final HippyEngineContext hpContext;
|
|
39
|
+
protected HRCV recyclerView;
|
|
40
|
+
private NativeGestureDispatcher nativeGestureDispatcher;
|
|
41
|
+
|
|
42
|
+
public HippyRecyclerViewWrapper(@NonNull Context context, HRCV recyclerView) {
|
|
43
|
+
super(context);
|
|
44
|
+
this.recyclerView = recyclerView;
|
|
45
|
+
addView(recyclerView, new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
|
|
46
|
+
hpContext = ((HippyInstanceContext) context).getEngineContext();
|
|
47
|
+
HippyRecyclerExtension cacheExtension = new HippyRecyclerExtension(recyclerView, hpContext,
|
|
48
|
+
recyclerView.getNodePositionHelper());
|
|
49
|
+
recyclerView.setViewCacheExtension(cacheExtension);
|
|
50
|
+
recyclerView.setHeaderHost(this);
|
|
51
|
+
HippyRecyclerPool pool = new HippyRecyclerPool(hpContext, this, cacheExtension,
|
|
52
|
+
recyclerView.getNodePositionHelper());
|
|
53
|
+
pool.setViewAboundListener(recyclerView);
|
|
54
|
+
recyclerView.setRecycledViewPool(pool);
|
|
55
|
+
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
@Override
|
|
59
|
+
public int computeVerticalScrollOffset() {
|
|
60
|
+
return recyclerView.computeVerticalScrollOffset();
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
@Override
|
|
64
|
+
public NativeGestureDispatcher getGestureDispatcher() {
|
|
65
|
+
return nativeGestureDispatcher;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
@Override
|
|
69
|
+
public void setGestureDispatcher(NativeGestureDispatcher dispatcher) {
|
|
70
|
+
nativeGestureDispatcher = dispatcher;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
public int getChildCountWithCaches() {
|
|
74
|
+
return recyclerView.getChildCountWithCaches();
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
public View getChildAtWithCaches(int index) {
|
|
78
|
+
return recyclerView.getChildAtWithCaches(index);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
public void setListData() {
|
|
82
|
+
recyclerView.setListData();
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
public RecyclerViewEventHelper getRecyclerViewEventHelper() {
|
|
86
|
+
return recyclerView.getRecyclerViewEventHelper();
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
public void setScrollEnable(boolean flag) {
|
|
90
|
+
recyclerView.setScrollEnable(flag);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
public void scrollToIndex(int xIndex, int yIndex, boolean animated, int duration) {
|
|
94
|
+
recyclerView.scrollToIndex(xIndex, yIndex, animated, duration);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
public void scrollToContentOffset(double xOffset, double yOffset, boolean animated,
|
|
98
|
+
int duration) {
|
|
99
|
+
recyclerView.scrollToContentOffset(xOffset, yOffset, animated, duration);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
public void scrollToTop() {
|
|
103
|
+
recyclerView.scrollToTop();
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
public void setRowShouldSticky(boolean enable) {
|
|
107
|
+
recyclerView.setRowShouldSticky(enable);
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
public HRCV getRecyclerView() {
|
|
111
|
+
return recyclerView;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* 将HeaderView放到RecyclerView到父亲View上面
|
|
116
|
+
*/
|
|
117
|
+
@Override
|
|
118
|
+
public void attachHeader(View headerView, LayoutParams layoutParams) {
|
|
119
|
+
addView(headerView, layoutParams);
|
|
120
|
+
layout(getLeft(), getTop(), getRight(), getBottom());
|
|
121
|
+
getViewTreeObserver().dispatchOnGlobalLayout();
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
@Override
|
|
125
|
+
public void addOnLayoutListener(OnGlobalLayoutListener listener) {
|
|
126
|
+
getViewTreeObserver().addOnGlobalLayoutListener(listener);
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
@RequiresApi(api = VERSION_CODES.JELLY_BEAN)
|
|
130
|
+
@Override
|
|
131
|
+
public void removeOnLayoutListener(OnGlobalLayoutListener listener) {
|
|
132
|
+
getViewTreeObserver().removeOnGlobalLayoutListener(listener);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/* Tencent is pleased to support the open source community by making Hippy available.
|
|
2
|
+
* Copyright (C) 2018 THL A29 Limited, a Tencent company. All rights reserved.
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
package com.tencent.mtt.hippy.views.hippylist;
|
|
18
|
+
|
|
19
|
+
public class NodePositionHelper {
|
|
20
|
+
|
|
21
|
+
private int nodeOffset = 0;
|
|
22
|
+
|
|
23
|
+
public NodePositionHelper() {
|
|
24
|
+
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* 如果前面加了NativeHeader,nodeOffset就加1
|
|
29
|
+
*/
|
|
30
|
+
public void increaseOffset() {
|
|
31
|
+
this.nodeOffset++;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* @return 当前render节点的偏移
|
|
36
|
+
*/
|
|
37
|
+
public int getNodeOffset() {
|
|
38
|
+
return nodeOffset;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* @param adapterPosition 是节点在adapter的位置,adapter上面可能不都是renderNode
|
|
43
|
+
* @return 返回adapterPosition对应前端的列表的node节点位置,减去前面的NativeHeader的位置
|
|
44
|
+
*/
|
|
45
|
+
public int getRenderNodePosition(int adapterPosition) {
|
|
46
|
+
return adapterPosition - nodeOffset;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* 如果去掉nativeHeader,就减1
|
|
51
|
+
*/
|
|
52
|
+
public void decreaseOffset() {
|
|
53
|
+
nodeOffset--;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
package com.tencent.mtt.hippy.views.hippylist;
|
|
2
|
+
|
|
3
|
+
import static com.tencent.mtt.hippy.views.hippylist.PullFooterEventHelper.EVENT_ON_END_REACHED;
|
|
4
|
+
|
|
5
|
+
import android.support.v7.widget.RecyclerView;
|
|
6
|
+
import android.view.View;
|
|
7
|
+
import com.tencent.mtt.hippy.uimanager.HippyViewEvent;
|
|
8
|
+
|
|
9
|
+
public class PreloadHelper extends RecyclerView.OnScrollListener {
|
|
10
|
+
|
|
11
|
+
protected HippyRecyclerView hippyRecyclerView;
|
|
12
|
+
protected int preloadItemNumber;
|
|
13
|
+
protected boolean isPreloading;
|
|
14
|
+
|
|
15
|
+
public PreloadHelper(HippyRecyclerView hippyRecyclerView) {
|
|
16
|
+
this.hippyRecyclerView = hippyRecyclerView;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
@Override
|
|
20
|
+
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
|
|
21
|
+
int itemCount = recyclerView.getAdapter().getItemCount();
|
|
22
|
+
//频控,记录上次预加载的总条目数,相同就不再次触发预加载
|
|
23
|
+
if (isPreloading) {
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
if (hippyRecyclerView.getAdapter().getRenderNodeCount() > 0) {
|
|
27
|
+
View lastChild = recyclerView.getChildAt(recyclerView.getChildCount() - 1);
|
|
28
|
+
int lastPosition = recyclerView.getChildAdapterPosition(lastChild);
|
|
29
|
+
if (lastPosition + preloadItemNumber >= itemCount) {
|
|
30
|
+
isPreloading = true;
|
|
31
|
+
sendReachEndEvent(recyclerView);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
public void sendReachEndEvent(RecyclerView recyclerView) {
|
|
37
|
+
new HippyViewEvent(EVENT_ON_END_REACHED).send((View) recyclerView.getParent(), null);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* @param preloadItemNumber 提前多少条Item,通知前端加载下一页数据
|
|
42
|
+
*/
|
|
43
|
+
public void setPreloadItemNumber(int preloadItemNumber) {
|
|
44
|
+
this.preloadItemNumber = preloadItemNumber;
|
|
45
|
+
hippyRecyclerView.removeOnScrollListener(this);
|
|
46
|
+
if (preloadItemNumber > 0) {
|
|
47
|
+
hippyRecyclerView.addOnScrollListener(this);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
public void reset() {
|
|
52
|
+
isPreloading = false;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/* Tencent is pleased to support the open source community by making Hippy available.
|
|
2
|
+
* Copyright (C) 2018 THL A29 Limited, a Tencent company. All rights reserved.
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
package com.tencent.mtt.hippy.views.hippylist;
|
|
18
|
+
|
|
19
|
+
import android.view.View;
|
|
20
|
+
import com.tencent.mtt.hippy.uimanager.HippyViewEvent;
|
|
21
|
+
import com.tencent.mtt.nxeasy.recyclerview.helper.footer.FooterExposureHelper;
|
|
22
|
+
import com.tencent.mtt.nxeasy.recyclerview.helper.footer.IFooterLoadMoreListener;
|
|
23
|
+
|
|
24
|
+
class PullFooterEventHelper implements IFooterLoadMoreListener {
|
|
25
|
+
|
|
26
|
+
public static final String EVENT_ON_END_REACHED = "onLoadMore";
|
|
27
|
+
private final HippyRecyclerView recyclerView;
|
|
28
|
+
private FooterExposureHelper footerExposureHelper;
|
|
29
|
+
private HippyViewEvent onEndReachedEvent;
|
|
30
|
+
|
|
31
|
+
PullFooterEventHelper(HippyRecyclerView recyclerView) {
|
|
32
|
+
this.recyclerView = recyclerView;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
public void enableFooter(View itemView) {
|
|
36
|
+
disableFooter();
|
|
37
|
+
footerExposureHelper = new FooterExposureHelper();
|
|
38
|
+
footerExposureHelper.setFooterListener(this);
|
|
39
|
+
footerExposureHelper.setExposureView(itemView);
|
|
40
|
+
recyclerView.addOnScrollListener(footerExposureHelper);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
public void disableFooter() {
|
|
44
|
+
if (footerExposureHelper != null) {
|
|
45
|
+
recyclerView.removeOnScrollListener(footerExposureHelper);
|
|
46
|
+
footerExposureHelper = null;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
protected HippyViewEvent getOnEndReachedEvent() {
|
|
51
|
+
if (onEndReachedEvent == null) {
|
|
52
|
+
onEndReachedEvent = new HippyViewEvent(EVENT_ON_END_REACHED);
|
|
53
|
+
}
|
|
54
|
+
return onEndReachedEvent;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
@Override
|
|
58
|
+
public void onFooterLoadMore() {
|
|
59
|
+
getOnEndReachedEvent().send((View) recyclerView.getParent(), null);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
/* Tencent is pleased to support the open source community by making Hippy available.
|
|
2
|
+
* Copyright (C) 2018 THL A29 Limited, a Tencent company. All rights reserved.
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
package com.tencent.mtt.hippy.views.hippylist;
|
|
18
|
+
|
|
19
|
+
import android.view.Gravity;
|
|
20
|
+
import android.view.View;
|
|
21
|
+
import android.widget.LinearLayout;
|
|
22
|
+
import android.widget.LinearLayout.LayoutParams;
|
|
23
|
+
import com.tencent.mtt.hippy.common.HippyMap;
|
|
24
|
+
import com.tencent.mtt.hippy.uimanager.HippyViewEvent;
|
|
25
|
+
import com.tencent.mtt.hippy.uimanager.PullHeaderRenderNode;
|
|
26
|
+
import com.tencent.mtt.hippy.utils.PixelUtil;
|
|
27
|
+
import com.tencent.mtt.nxeasy.recyclerview.helper.header.HeaderRefreshHelper;
|
|
28
|
+
import com.tencent.mtt.nxeasy.recyclerview.helper.header.IHeaderRefreshListener;
|
|
29
|
+
import com.tencent.mtt.nxeasy.recyclerview.helper.header.IHeaderRefreshView;
|
|
30
|
+
import com.tencent.mtt.nxeasy.recyclerview.helper.header.ILayoutRequester;
|
|
31
|
+
|
|
32
|
+
public class PullHeaderEventHelper implements IHeaderRefreshListener, IHeaderRefreshView,
|
|
33
|
+
ILayoutRequester {
|
|
34
|
+
|
|
35
|
+
public static final String EVENT_TYPE_HEADER_PULLING = "onHeaderPulling";
|
|
36
|
+
public static final String EVENT_TYPE_HEADER_RELEASED = "onHeaderReleased";
|
|
37
|
+
private final PullHeaderRenderNode renderNode;
|
|
38
|
+
private HippyRecyclerView recyclerView;
|
|
39
|
+
private View renderNodeView;
|
|
40
|
+
private LinearLayout headerContainer;
|
|
41
|
+
private LayoutParams contentLayoutParams;
|
|
42
|
+
private HeaderRefreshHelper headerRefreshHelper;
|
|
43
|
+
|
|
44
|
+
PullHeaderEventHelper(HippyRecyclerView recyclerView, PullHeaderRenderNode renderNode) {
|
|
45
|
+
this.recyclerView = recyclerView;
|
|
46
|
+
this.renderNode = renderNode;
|
|
47
|
+
headerContainer = new LinearLayout(recyclerView.getContext());
|
|
48
|
+
headerRefreshHelper = new HeaderRefreshHelper();
|
|
49
|
+
headerRefreshHelper.setHeaderRefreshView(this);
|
|
50
|
+
headerRefreshHelper.setHeaderRefreshListener(this);
|
|
51
|
+
headerRefreshHelper.setLayoutRequester(this);
|
|
52
|
+
recyclerView.setOnTouchListener(headerRefreshHelper);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
public void setRenderNodeView(View renderNodeView) {
|
|
56
|
+
if (this.renderNodeView != renderNodeView) {
|
|
57
|
+
this.renderNodeView = renderNodeView;
|
|
58
|
+
headerContainer.removeAllViews();
|
|
59
|
+
contentLayoutParams = new LayoutParams(LayoutParams.MATCH_PARENT, renderNode.getHeight());
|
|
60
|
+
contentLayoutParams.gravity = Gravity.BOTTOM;
|
|
61
|
+
headerContainer.addView(renderNodeView, contentLayoutParams);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
public View getView() {
|
|
67
|
+
return headerContainer;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
@Override
|
|
71
|
+
public void onStartDrag() {
|
|
72
|
+
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
@Override
|
|
76
|
+
public void onHeaderHeightChanged(int sumOffset) {
|
|
77
|
+
HippyMap params = new HippyMap();
|
|
78
|
+
params.pushDouble("contentOffset", PixelUtil.px2dp(sumOffset));
|
|
79
|
+
sendPullHeaderEvent(EVENT_TYPE_HEADER_PULLING, params);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
@Override
|
|
83
|
+
public void onRefreshing() {
|
|
84
|
+
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
@Override
|
|
88
|
+
public void onFolded() {
|
|
89
|
+
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* 松手后,触发的刷新回调,需要通知Hippy前端业务进行数据的刷新操作
|
|
94
|
+
*/
|
|
95
|
+
@Override
|
|
96
|
+
public void onHeaderRefreshing(int refreshWay) {
|
|
97
|
+
sendPullHeaderEvent(EVENT_TYPE_HEADER_RELEASED, new HippyMap());
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
@Override
|
|
101
|
+
public int getContentHeight() {
|
|
102
|
+
return renderNode.getHeight();
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
protected void sendPullHeaderEvent(String eventName, HippyMap param) {
|
|
106
|
+
new HippyViewEvent(eventName).send(renderNodeView, param);
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* Hippy前端业务通知数据已经刷新完毕,这里通知给headerRefreshHelper,进行header的收起功能
|
|
111
|
+
*/
|
|
112
|
+
public void onHeaderRefreshFinish() {
|
|
113
|
+
headerRefreshHelper.onRefreshDone();
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* Hippy前端业务调用主动刷新功能,这款需要通知headerRefreshHelper进行自动下拉刷新
|
|
118
|
+
*/
|
|
119
|
+
public void onHeaderRefresh() {
|
|
120
|
+
headerRefreshHelper.triggerRefresh();
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
@Override
|
|
124
|
+
public void requestLayout() {
|
|
125
|
+
recyclerView.dispatchLayout();
|
|
126
|
+
}
|
|
127
|
+
}
|