@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,399 @@
|
|
|
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 static android.view.ViewGroup.LayoutParams.MATCH_PARENT;
|
|
20
|
+
|
|
21
|
+
import android.support.annotation.NonNull;
|
|
22
|
+
import android.support.v7.widget.HippyItemTypeHelper;
|
|
23
|
+
import android.support.v7.widget.IItemLayoutParams;
|
|
24
|
+
import android.support.v7.widget.RecyclerView.Adapter;
|
|
25
|
+
import android.support.v7.widget.RecyclerView.LayoutParams;
|
|
26
|
+
import android.view.View;
|
|
27
|
+
import android.view.ViewGroup;
|
|
28
|
+
import android.widget.FrameLayout;
|
|
29
|
+
import com.tencent.mtt.hippy.HippyEngineContext;
|
|
30
|
+
import com.tencent.mtt.hippy.uimanager.DiffUtils;
|
|
31
|
+
import com.tencent.mtt.hippy.uimanager.DiffUtils.PatchType;
|
|
32
|
+
import com.tencent.mtt.hippy.uimanager.ListItemRenderNode;
|
|
33
|
+
import com.tencent.mtt.hippy.uimanager.PullHeaderRenderNode;
|
|
34
|
+
import com.tencent.mtt.hippy.uimanager.RenderNode;
|
|
35
|
+
import com.tencent.mtt.hippy.views.list.IRecycleItemTypeChange;
|
|
36
|
+
import com.tencent.mtt.hippy.views.refresh.HippyPullHeaderView;
|
|
37
|
+
import com.tencent.mtt.nxeasy.recyclerview.helper.skikcy.IStickyItemsProvider;
|
|
38
|
+
import java.util.ArrayList;
|
|
39
|
+
|
|
40
|
+
public class HippyRecyclerListAdapter<HRCV extends HippyRecyclerView> extends
|
|
41
|
+
Adapter<HippyRecyclerViewHolder>
|
|
42
|
+
implements IRecycleItemTypeChange, IStickyItemsProvider, IItemLayoutParams {
|
|
43
|
+
|
|
44
|
+
protected final HippyEngineContext hpContext;
|
|
45
|
+
protected final HRCV hippyRecyclerView;
|
|
46
|
+
protected final HippyItemTypeHelper hippyItemTypeHelper;
|
|
47
|
+
protected int positionToCreateHolder;
|
|
48
|
+
protected PullFooterEventHelper footerEventHelper;
|
|
49
|
+
protected PullHeaderEventHelper headerEventHelper;
|
|
50
|
+
protected PreloadHelper preloadHelper;
|
|
51
|
+
|
|
52
|
+
public HippyRecyclerListAdapter(HRCV hippyRecyclerView, HippyEngineContext hpContext) {
|
|
53
|
+
this.hpContext = hpContext;
|
|
54
|
+
this.hippyRecyclerView = hippyRecyclerView;
|
|
55
|
+
hippyItemTypeHelper = new HippyItemTypeHelper(hippyRecyclerView);
|
|
56
|
+
preloadHelper = new PreloadHelper(hippyRecyclerView);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* 对于吸顶到RenderNode需要特殊处理 吸顶的View需要包一层ViewGroup,吸顶的时候,从ViewGroup把RenderNode的View取出来挂载到顶部
|
|
61
|
+
* 当RenderNode的View已经挂载到Header位置上面,如果重新触发创建ViewHolder,renderView会创建失败,
|
|
62
|
+
* 此时就只返回一个空到renderViewContainer上去,等viewHolder需要显示到时候,再把header上面的View还原到这个 ViewHolder上面。
|
|
63
|
+
*/
|
|
64
|
+
@NonNull
|
|
65
|
+
@Override
|
|
66
|
+
public HippyRecyclerViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
|
|
67
|
+
ListItemRenderNode renderNode = getChildNodeByAdapterPosition(positionToCreateHolder);
|
|
68
|
+
boolean isViewExist = renderNode.isViewExist();
|
|
69
|
+
boolean needsDelete = renderNode.needDeleteExistRenderView();
|
|
70
|
+
View renderView = createRenderView(renderNode);
|
|
71
|
+
if (isPullHeader(positionToCreateHolder)) {
|
|
72
|
+
((HippyPullHeaderView) renderView).setParentView(hippyRecyclerView);
|
|
73
|
+
initPullHeadEventHelper((PullHeaderRenderNode) renderNode, renderView);
|
|
74
|
+
return new HippyRecyclerViewHolder(headerEventHelper.getView(), renderNode);
|
|
75
|
+
} else if (isStickyPosition(positionToCreateHolder)) {
|
|
76
|
+
return new HippyRecyclerViewHolder(getStickyContainer(parent, renderView), renderNode);
|
|
77
|
+
} else {
|
|
78
|
+
if (renderView == null) {
|
|
79
|
+
throw new IllegalArgumentException("createRenderView error!"
|
|
80
|
+
+ ",isDelete:" + renderNode.isDelete()
|
|
81
|
+
+ ",isViewExist:" + isViewExist
|
|
82
|
+
+ ",needsDelete:" + needsDelete
|
|
83
|
+
+ ",className:" + renderNode.getClassName()
|
|
84
|
+
+ ",isLazy :" + renderNode.isIsLazyLoad()
|
|
85
|
+
+ ",itemCount :" + getItemCount()
|
|
86
|
+
+ ",getNodeCount:" + getRenderNodeCount()
|
|
87
|
+
+ ",notifyCount:" + hippyRecyclerView.renderNodeCount
|
|
88
|
+
+ "curPos:" + positionToCreateHolder
|
|
89
|
+
+ ",rootView:" + renderNode.hasRootView()
|
|
90
|
+
+ ",parentNode:" + (renderNode.getParent() != null)
|
|
91
|
+
+ ",offset:" + hippyRecyclerView.computeVerticalScrollOffset()
|
|
92
|
+
+ ",range:" + hippyRecyclerView.computeVerticalScrollRange()
|
|
93
|
+
+ ",extent:" + hippyRecyclerView.computeVerticalScrollExtent()
|
|
94
|
+
+ ",viewType:" + viewType
|
|
95
|
+
+ ",id:" + renderNode.getId()
|
|
96
|
+
+ ",attachedIds:" + getAttachedIds()
|
|
97
|
+
+ ",nodeOffset:" + hippyRecyclerView.getNodePositionHelper().getNodeOffset()
|
|
98
|
+
+ ",view:" + hippyRecyclerView
|
|
99
|
+
);
|
|
100
|
+
}
|
|
101
|
+
return new HippyRecyclerViewHolder(renderView, renderNode);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
String getAttachedIds() {
|
|
106
|
+
StringBuilder attachedIds = new StringBuilder();
|
|
107
|
+
int childCount = hippyRecyclerView.getChildCount();
|
|
108
|
+
for (int i = 0; i < childCount; ++i) {
|
|
109
|
+
View attachedView = hippyRecyclerView.getChildAt(i);
|
|
110
|
+
attachedIds.append("|p_" + hippyRecyclerView.getChildAdapterPosition(attachedView));
|
|
111
|
+
attachedIds.append("_i_" + attachedView.getId());
|
|
112
|
+
}
|
|
113
|
+
return attachedIds.toString();
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* deleteExistRenderView 是异常情况,正常情况应该不会走这个逻辑, 本来在{@link HippyRecyclerView#onViewAbound(HippyRecyclerViewHolder)}
|
|
119
|
+
* 的地方应该已经调用了deleteExistRenderView,deleteExistRenderView这里不应该可能走到 如果是吸顶的View,shouldSticky为true的情况下,是本身就存在的,不应该去调用deleteExistRenderView
|
|
120
|
+
*
|
|
121
|
+
* @param renderNode
|
|
122
|
+
* @return
|
|
123
|
+
*/
|
|
124
|
+
protected View createRenderView(ListItemRenderNode renderNode) {
|
|
125
|
+
if (renderNode.needDeleteExistRenderView() && !renderNode.shouldSticky()) {
|
|
126
|
+
deleteExistRenderView(renderNode);
|
|
127
|
+
}
|
|
128
|
+
renderNode.setLazy(false);
|
|
129
|
+
View view = renderNode.createViewRecursive();
|
|
130
|
+
renderNode.updateViewRecursive();
|
|
131
|
+
return view;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
public void deleteExistRenderView(ListItemRenderNode renderNode) {
|
|
135
|
+
renderNode.setLazy(true);
|
|
136
|
+
RenderNode parentNode = getParentNode();
|
|
137
|
+
if (parentNode != null) {
|
|
138
|
+
hpContext.getRenderManager().getControllerManager()
|
|
139
|
+
.deleteChild(parentNode.getId(), renderNode.getId());
|
|
140
|
+
}
|
|
141
|
+
renderNode.setRecycleItemTypeChangeListener(null);
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
private FrameLayout getStickyContainer(ViewGroup parent, View renderView) {
|
|
145
|
+
FrameLayout container = new FrameLayout(parent.getContext());
|
|
146
|
+
if (renderView != null) {
|
|
147
|
+
container.addView(renderView, new FrameLayout.LayoutParams(MATCH_PARENT, MATCH_PARENT));
|
|
148
|
+
}
|
|
149
|
+
return container;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
private void initPullHeadEventHelper(PullHeaderRenderNode renderNode, View renderView) {
|
|
153
|
+
if (headerEventHelper == null) {
|
|
154
|
+
headerEventHelper = new PullHeaderEventHelper(hippyRecyclerView, renderNode);
|
|
155
|
+
}
|
|
156
|
+
headerEventHelper.setRenderNodeView(renderView);
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
@Override
|
|
160
|
+
public String toString() {
|
|
161
|
+
return "HippyRecyclerAdapter: itemCount:" + getItemCount();
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
/**
|
|
165
|
+
* 绑定数据 对于全新的viewHolder,isCreated 为true,调用updateViewRecursive进行物理树的创建,以及数据的绑定
|
|
166
|
+
* 对于非全新创建的viewHolder,进行view树的diff,然后在把数据绑定到view树上面
|
|
167
|
+
*
|
|
168
|
+
* @param hippyRecyclerViewHolder position当前的viewHolder
|
|
169
|
+
* @param position 绑定数据的节点位置
|
|
170
|
+
*/
|
|
171
|
+
@Override
|
|
172
|
+
public void onBindViewHolder(HippyRecyclerViewHolder hippyRecyclerViewHolder, int position) {
|
|
173
|
+
setLayoutParams(hippyRecyclerViewHolder.itemView, position);
|
|
174
|
+
RenderNode oldNode = hippyRecyclerViewHolder.bindNode;
|
|
175
|
+
ListItemRenderNode newNode = getChildNodeByAdapterPosition(position);
|
|
176
|
+
oldNode.setLazy(true);
|
|
177
|
+
newNode.setLazy(false);
|
|
178
|
+
if (oldNode != newNode) {
|
|
179
|
+
//step 1: diff
|
|
180
|
+
ArrayList<PatchType> patchTypes = DiffUtils.diff(oldNode, newNode);
|
|
181
|
+
//step:2 delete unUseful views
|
|
182
|
+
DiffUtils.deleteViews(hpContext.getRenderManager().getControllerManager(), patchTypes);
|
|
183
|
+
//step:3 replace id
|
|
184
|
+
DiffUtils.replaceIds(hpContext.getRenderManager().getControllerManager(), patchTypes);
|
|
185
|
+
//step:4 create view is do not reUse
|
|
186
|
+
DiffUtils.createView(patchTypes);
|
|
187
|
+
//step:5 patch the dif result
|
|
188
|
+
DiffUtils.doPatch(hpContext.getRenderManager().getControllerManager(), patchTypes);
|
|
189
|
+
}
|
|
190
|
+
newNode.setRecycleItemTypeChangeListener(this);
|
|
191
|
+
hippyRecyclerViewHolder.bindNode = newNode;
|
|
192
|
+
enablePullFooter(position, hippyRecyclerViewHolder.itemView);
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
/**
|
|
196
|
+
* 检测最后一个item是否是footer,如果是,需要对这个itemView设置监控,footer显示就通知前端加载下一页
|
|
197
|
+
*/
|
|
198
|
+
private void enablePullFooter(int position, View itemView) {
|
|
199
|
+
if (position == getItemCount() - 1) {
|
|
200
|
+
ListItemRenderNode renderNode = getChildNodeByAdapterPosition(position);
|
|
201
|
+
if (renderNode.isPullFooter()) {
|
|
202
|
+
if (footerEventHelper == null) {
|
|
203
|
+
footerEventHelper = new PullFooterEventHelper(hippyRecyclerView);
|
|
204
|
+
}
|
|
205
|
+
footerEventHelper.enableFooter(itemView);
|
|
206
|
+
} else {
|
|
207
|
+
if (footerEventHelper != null) {
|
|
208
|
+
footerEventHelper.disableFooter();
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
/**
|
|
215
|
+
* 设置View的LayoutParams排版属性,宽高由render节点提供
|
|
216
|
+
*/
|
|
217
|
+
protected void setLayoutParams(View itemView, int position) {
|
|
218
|
+
LayoutParams childLp = getLayoutParams(itemView);
|
|
219
|
+
ListItemRenderNode childNode = getChildNodeByAdapterPosition(position);
|
|
220
|
+
childLp.height = getRenderNodeHeight(position);
|
|
221
|
+
childLp.width = childNode.getWidth();
|
|
222
|
+
itemView.setLayoutParams(childLp);
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
|
|
226
|
+
protected LayoutParams getLayoutParams(View itemView) {
|
|
227
|
+
ViewGroup.LayoutParams params = itemView.getLayoutParams();
|
|
228
|
+
LayoutParams childLp = null;
|
|
229
|
+
if (params instanceof LayoutParams) {
|
|
230
|
+
childLp = (LayoutParams) params;
|
|
231
|
+
}
|
|
232
|
+
if (childLp == null) {
|
|
233
|
+
childLp = new LayoutParams(MATCH_PARENT, 0);
|
|
234
|
+
}
|
|
235
|
+
return childLp;
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
@Override
|
|
239
|
+
public int getItemViewType(int position) {
|
|
240
|
+
//在调用onCreateViewHolder之前,必然会调用getItemViewType,所以这里把position记下来
|
|
241
|
+
//用在onCreateViewHolder的时候来创建View,不然onCreateViewHolder是无法创建RenderNode到View的
|
|
242
|
+
setPositionToCreate(position);
|
|
243
|
+
return getChildNodeByAdapterPosition(position).getItemViewType();
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
protected void setPositionToCreate(int position) {
|
|
247
|
+
positionToCreateHolder = position;
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
/**
|
|
251
|
+
* 获取子节点,理论上面是不会返回空的,否则就是某个流程出了问题
|
|
252
|
+
*
|
|
253
|
+
* @param position adapter实际的item位置
|
|
254
|
+
*/
|
|
255
|
+
public ListItemRenderNode getChildNodeByAdapterPosition(int position) {
|
|
256
|
+
return getChildNode(hippyRecyclerView.getNodePositionHelper().getRenderNodePosition(position));
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
/**
|
|
260
|
+
* 获取前端的renderNode的子节点
|
|
261
|
+
*
|
|
262
|
+
* @param position 前端的子节点的位置
|
|
263
|
+
*/
|
|
264
|
+
public ListItemRenderNode getChildNode(int position) {
|
|
265
|
+
RenderNode parentNode = getParentNode();
|
|
266
|
+
if (parentNode != null && position < parentNode.getChildCount() && position >= 0) {
|
|
267
|
+
return (ListItemRenderNode) parentNode.getChildAt(position);
|
|
268
|
+
}
|
|
269
|
+
return null;
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
/**
|
|
273
|
+
* listItemView的数量
|
|
274
|
+
*/
|
|
275
|
+
@Override
|
|
276
|
+
public int getItemCount() {
|
|
277
|
+
return getRenderNodeCount();
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
/**
|
|
281
|
+
* 返回前端的list的内容Item数目
|
|
282
|
+
*
|
|
283
|
+
* @return
|
|
284
|
+
*/
|
|
285
|
+
public int getRenderNodeCount() {
|
|
286
|
+
RenderNode listNode = getParentNode();
|
|
287
|
+
if (listNode != null) {
|
|
288
|
+
return listNode.getChildCount();
|
|
289
|
+
}
|
|
290
|
+
return 0;
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
/**
|
|
294
|
+
* 前端展示的内容的高度
|
|
295
|
+
*
|
|
296
|
+
* @return
|
|
297
|
+
*/
|
|
298
|
+
public int getRenderNodeTotalHeight() {
|
|
299
|
+
int renderCount = getRenderNodeCount();
|
|
300
|
+
int renderNodeTotalHeight = 0;
|
|
301
|
+
for (int i = 0; i < renderCount; i++) {
|
|
302
|
+
renderNodeTotalHeight += getRenderNodeHeight(i);
|
|
303
|
+
}
|
|
304
|
+
return renderNodeTotalHeight;
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
public int getItemHeight(int position) {
|
|
308
|
+
return getRenderNodeHeight(position);
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
public int getRenderNodeHeight(int position) {
|
|
312
|
+
ListItemRenderNode childNode = getChildNode(position);
|
|
313
|
+
if (childNode != null) {
|
|
314
|
+
if (childNode.isPullHeader()) {
|
|
315
|
+
return 0;
|
|
316
|
+
}
|
|
317
|
+
return childNode.getHeight();
|
|
318
|
+
}
|
|
319
|
+
return 0;
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
public int getItemWidth(int position) {
|
|
323
|
+
Integer renderNodeWidth = getRenderNodeWidth(position);
|
|
324
|
+
if (renderNodeWidth != null) {
|
|
325
|
+
return renderNodeWidth;
|
|
326
|
+
}
|
|
327
|
+
return 0;
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
public int getRenderNodeWidth(int position) {
|
|
331
|
+
ListItemRenderNode childNode = getChildNode(position);
|
|
332
|
+
if (childNode != null) {
|
|
333
|
+
return childNode.getWidth();
|
|
334
|
+
}
|
|
335
|
+
return 0;
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
protected RenderNode getParentNode() {
|
|
339
|
+
return hpContext.getRenderManager().getRenderNode(getHippyListViewId());
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
private int getHippyListViewId() {
|
|
343
|
+
return ((View) hippyRecyclerView.getParent()).getId();
|
|
344
|
+
}
|
|
345
|
+
|
|
346
|
+
@Override
|
|
347
|
+
public void onRecycleItemTypeChanged(int oldType, int newType, ListItemRenderNode listItemNode) {
|
|
348
|
+
hippyItemTypeHelper.updateItemType(oldType, newType, listItemNode);
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
@Override
|
|
352
|
+
public long getItemId(int position) {
|
|
353
|
+
return getChildNodeByAdapterPosition(position).getId();
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
/**
|
|
357
|
+
* 该position对于的renderNode是否是吸顶的属性
|
|
358
|
+
*/
|
|
359
|
+
@Override
|
|
360
|
+
public boolean isStickyPosition(int position) {
|
|
361
|
+
if (position >= 0 && position < getItemCount()) {
|
|
362
|
+
return getChildNodeByAdapterPosition(position).shouldSticky();
|
|
363
|
+
}
|
|
364
|
+
return false;
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
/**
|
|
368
|
+
* 该position对于的renderNode是否是Header属性,值判断第一个节点
|
|
369
|
+
*/
|
|
370
|
+
private boolean isPullHeader(int position) {
|
|
371
|
+
if (position == 0) {
|
|
372
|
+
return getChildNodeByAdapterPosition(0).isPullHeader();
|
|
373
|
+
}
|
|
374
|
+
return false;
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
/**
|
|
378
|
+
* 获取下拉刷新的事件辅助器
|
|
379
|
+
*/
|
|
380
|
+
public PullHeaderEventHelper getHeaderEventHelper() {
|
|
381
|
+
return headerEventHelper;
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
public PreloadHelper getPreloadHelper() {
|
|
385
|
+
return preloadHelper;
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
public void setPreloadItemNumber(int preloadItemNumber) {
|
|
389
|
+
preloadHelper.setPreloadItemNumber(preloadItemNumber);
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
@Override
|
|
393
|
+
public void getItemLayoutParams(int position, LayoutParams lp) {
|
|
394
|
+
if (lp == null) {
|
|
395
|
+
return;
|
|
396
|
+
}
|
|
397
|
+
lp.height = getRenderNodeHeight(position);
|
|
398
|
+
}
|
|
399
|
+
}
|