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