@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,528 @@
|
|
|
1
|
+
/* Tencent is pleased to support the open source community by making Hippy available.
|
|
2
|
+
* Copyright (C) 2018 THL A29 Limited, a Tencent company. All rights reserved.
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
package com.tencent.mtt.hippy.views.textinput;
|
|
17
|
+
|
|
18
|
+
import android.content.Context;
|
|
19
|
+
import android.graphics.Color;
|
|
20
|
+
import android.graphics.PorterDuff;
|
|
21
|
+
import android.graphics.Typeface;
|
|
22
|
+
import android.os.Build;
|
|
23
|
+
import android.os.Looper;
|
|
24
|
+
import android.os.MessageQueue;
|
|
25
|
+
import android.text.Editable;
|
|
26
|
+
import android.text.InputFilter;
|
|
27
|
+
import android.text.InputType;
|
|
28
|
+
import android.text.TextUtils;
|
|
29
|
+
import android.text.method.PasswordTransformationMethod;
|
|
30
|
+
import android.util.TypedValue;
|
|
31
|
+
import android.view.Gravity;
|
|
32
|
+
import android.view.View;
|
|
33
|
+
import android.view.ViewGroup;
|
|
34
|
+
import android.view.ViewParent;
|
|
35
|
+
import android.view.inputmethod.EditorInfo;
|
|
36
|
+
import com.tencent.mtt.hippy.HippyRootView;
|
|
37
|
+
import com.tencent.mtt.hippy.annotation.HippyController;
|
|
38
|
+
import com.tencent.mtt.hippy.annotation.HippyControllerProps;
|
|
39
|
+
import com.tencent.mtt.hippy.common.HippyArray;
|
|
40
|
+
import com.tencent.mtt.hippy.common.HippyMap;
|
|
41
|
+
import com.tencent.mtt.hippy.dom.node.NodeProps;
|
|
42
|
+
import com.tencent.mtt.hippy.dom.node.StyleNode;
|
|
43
|
+
import com.tencent.mtt.hippy.dom.node.TextExtra;
|
|
44
|
+
import com.tencent.mtt.hippy.modules.Promise;
|
|
45
|
+
import com.tencent.mtt.hippy.uimanager.HippyViewController;
|
|
46
|
+
import com.tencent.mtt.hippy.utils.LogUtils;
|
|
47
|
+
import com.tencent.mtt.hippy.utils.PixelUtil;
|
|
48
|
+
|
|
49
|
+
import java.util.LinkedList;
|
|
50
|
+
|
|
51
|
+
@SuppressWarnings({"deprecation", "unused"})
|
|
52
|
+
@HippyController(name = HippyTextInputController.CLASS_NAME)
|
|
53
|
+
public class HippyTextInputController extends HippyViewController<HippyTextInput> {
|
|
54
|
+
|
|
55
|
+
public static final String CLASS_NAME = "TextInput";
|
|
56
|
+
private static final String TAG = "HippyTextInputControlle";
|
|
57
|
+
|
|
58
|
+
private static final int INPUT_TYPE_KEYBOARD_NUMBERED =
|
|
59
|
+
InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL
|
|
60
|
+
| InputType.TYPE_NUMBER_FLAG_SIGNED;
|
|
61
|
+
|
|
62
|
+
private static final String KEYBOARD_TYPE_EMAIL_ADDRESS = "email";
|
|
63
|
+
private static final String KEYBOARD_TYPE_NUMERIC = "numeric";
|
|
64
|
+
private static final String KEYBOARD_TYPE_PHONE_PAD = "phone-pad";
|
|
65
|
+
private static final String KEYBOARD_TYPE_PASS_WORD = "password";
|
|
66
|
+
|
|
67
|
+
private static final String CLEAR_FUNCTION = "clear";
|
|
68
|
+
public static final String COMMAND_FOCUS = "focusTextInput";
|
|
69
|
+
public static final String COMMAND_BLUR = "blurTextInput";
|
|
70
|
+
public static final String COMMAND_getValue = "getValue";
|
|
71
|
+
public static final String COMMAND_setValue = "setValue";
|
|
72
|
+
public static final String COMMAND_KEYBOARD_DISMISS = "dissmiss";
|
|
73
|
+
|
|
74
|
+
@Override
|
|
75
|
+
protected View createViewImpl(Context context) {
|
|
76
|
+
return new HippyTextInput(context);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
@Override
|
|
80
|
+
protected StyleNode createNode(boolean isVirtual) {
|
|
81
|
+
return new TextInputNode(isVirtual);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
@Override
|
|
85
|
+
protected void updateExtra(View view, Object object) {
|
|
86
|
+
super.updateExtra(view, object);
|
|
87
|
+
|
|
88
|
+
if (object instanceof TextExtra) {
|
|
89
|
+
TextExtra textExtra = (TextExtra) object;
|
|
90
|
+
HippyTextInput hippyTextInput = (HippyTextInput) view;
|
|
91
|
+
hippyTextInput.setPadding((int) Math.ceil(textExtra.mLeftPadding),
|
|
92
|
+
(int) Math.ceil(textExtra.mTopPadding),
|
|
93
|
+
(int) Math.ceil(textExtra.mRightPadding), (int) Math.ceil(textExtra.mBottomPadding));
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
@HippyControllerProps(name = NodeProps.FONT_SIZE, defaultType = HippyControllerProps.NUMBER, defaultNumber = 14)
|
|
98
|
+
public void setFontSize(HippyTextInput hippyTextInput, float fontSize) {
|
|
99
|
+
hippyTextInput
|
|
100
|
+
.setTextSize(TypedValue.COMPLEX_UNIT_PX, (int) Math.ceil(PixelUtil.dp2px(fontSize)));
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
@HippyControllerProps(name = "defaultValue", defaultType = HippyControllerProps.STRING)
|
|
104
|
+
public void setDefaultValue(HippyTextInput hippyTextInput, String defaultValue) {
|
|
105
|
+
String strOld = hippyTextInput.getText().toString();
|
|
106
|
+
if (!TextUtils.equals(strOld, defaultValue)) {
|
|
107
|
+
hippyTextInput.setText(defaultValue);
|
|
108
|
+
if (!TextUtils.isEmpty(defaultValue)) {
|
|
109
|
+
hippyTextInput.setSelection(defaultValue.length());
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
@HippyControllerProps(name = "validator", defaultType = HippyControllerProps.STRING)
|
|
115
|
+
public void setValidator(HippyTextInput hippyTextInput, String strValidator) {
|
|
116
|
+
hippyTextInput.setValidator(strValidator);
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
@HippyControllerProps(name = "editable", defaultType = HippyControllerProps.BOOLEAN, defaultBoolean = true)
|
|
120
|
+
public void setEditable(HippyTextInput hippyTextInput, boolean editable) {
|
|
121
|
+
hippyTextInput.setEnabled(editable);
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* 设置输入光标颜色
|
|
126
|
+
**///RN 语法 caret-color
|
|
127
|
+
@HippyControllerProps(name = "caret-color", defaultType = HippyControllerProps.NUMBER, defaultNumber = Color.TRANSPARENT)
|
|
128
|
+
public void setCaretColor(HippyTextInput hippyTextInput, int cursorColor) {
|
|
129
|
+
hippyTextInput.setCursorColor(cursorColor);
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
* 设置输入光标颜色
|
|
134
|
+
**/
|
|
135
|
+
//For Vue.vue的前端语法,会把caret-color转化成caretColor
|
|
136
|
+
@HippyControllerProps(name = "caretColor", defaultType = HippyControllerProps.NUMBER, defaultNumber = Color.TRANSPARENT)
|
|
137
|
+
public void setCaretColorAlias(HippyTextInput hippyTextInput, int cursorColor) {
|
|
138
|
+
hippyTextInput.setCursorColor(cursorColor);
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
@HippyControllerProps(name = "multiline", defaultType = HippyControllerProps.BOOLEAN, defaultBoolean = true)
|
|
142
|
+
public void multiLine(HippyTextInput hippyTextInput, boolean multiline) {
|
|
143
|
+
int inputType = hippyTextInput.getInputType();
|
|
144
|
+
if (multiline) {
|
|
145
|
+
inputType = inputType | InputType.TYPE_TEXT_FLAG_MULTI_LINE;
|
|
146
|
+
} else {
|
|
147
|
+
inputType &= ~InputType.TYPE_TEXT_FLAG_MULTI_LINE;
|
|
148
|
+
}
|
|
149
|
+
hippyTextInput.setInputType(inputType);
|
|
150
|
+
if (multiline) {
|
|
151
|
+
hippyTextInput.setGravityVertical(Gravity.TOP);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
@HippyControllerProps(name = "returnKeyType")
|
|
156
|
+
public void setReturnKeyType(HippyTextInput view, String returnKeyType) {
|
|
157
|
+
|
|
158
|
+
int returnKeyFlag = EditorInfo.IME_ACTION_DONE;
|
|
159
|
+
if (returnKeyType != null) {
|
|
160
|
+
switch (returnKeyType) {
|
|
161
|
+
case "go":
|
|
162
|
+
returnKeyFlag = EditorInfo.IME_ACTION_GO;
|
|
163
|
+
break;
|
|
164
|
+
case "next":
|
|
165
|
+
returnKeyFlag = EditorInfo.IME_ACTION_NEXT;
|
|
166
|
+
view.setSingleLine(true);
|
|
167
|
+
break;
|
|
168
|
+
case "none":
|
|
169
|
+
returnKeyFlag = EditorInfo.IME_ACTION_NONE;
|
|
170
|
+
break;
|
|
171
|
+
case "previous":
|
|
172
|
+
returnKeyFlag = EditorInfo.IME_ACTION_PREVIOUS;
|
|
173
|
+
view.setSingleLine(true);
|
|
174
|
+
break;
|
|
175
|
+
case "search":
|
|
176
|
+
returnKeyFlag = EditorInfo.IME_ACTION_SEARCH;
|
|
177
|
+
view.setSingleLine(true);
|
|
178
|
+
break;
|
|
179
|
+
case "send":
|
|
180
|
+
returnKeyFlag = EditorInfo.IME_ACTION_SEND;
|
|
181
|
+
view.setSingleLine(true);
|
|
182
|
+
break;
|
|
183
|
+
case "done":
|
|
184
|
+
returnKeyFlag = EditorInfo.IME_ACTION_DONE;
|
|
185
|
+
view.setSingleLine(true);
|
|
186
|
+
break;
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
view.setImeOptions(returnKeyFlag | EditorInfo.IME_FLAG_NO_FULLSCREEN);
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
@HippyControllerProps(name = "keyboardType", defaultType = HippyControllerProps.STRING)
|
|
193
|
+
public void setKeyboardType(HippyTextInput hippyTextInput, String keyboardType) {
|
|
194
|
+
int flagsToSet = InputType.TYPE_CLASS_TEXT;
|
|
195
|
+
if (KEYBOARD_TYPE_NUMERIC.equalsIgnoreCase(keyboardType)) {
|
|
196
|
+
flagsToSet = INPUT_TYPE_KEYBOARD_NUMBERED;
|
|
197
|
+
} else if (KEYBOARD_TYPE_EMAIL_ADDRESS.equalsIgnoreCase(keyboardType)) {
|
|
198
|
+
flagsToSet = InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS | InputType.TYPE_CLASS_TEXT;
|
|
199
|
+
} else if (KEYBOARD_TYPE_PHONE_PAD.equalsIgnoreCase(keyboardType)) {
|
|
200
|
+
flagsToSet = InputType.TYPE_CLASS_PHONE;
|
|
201
|
+
} else if (KEYBOARD_TYPE_PASS_WORD.equalsIgnoreCase(keyboardType)) {
|
|
202
|
+
flagsToSet = InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD;
|
|
203
|
+
hippyTextInput.setTransformationMethod(PasswordTransformationMethod.getInstance());
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
hippyTextInput.setInputType(flagsToSet);
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
private static int parseFontWeight(String fontWeightString) {
|
|
210
|
+
// This should be much faster than using regex to verify input and Integer.parseInt
|
|
211
|
+
return fontWeightString.length() == 3 && fontWeightString.endsWith("00")
|
|
212
|
+
&& fontWeightString.charAt(0) <= '9'
|
|
213
|
+
&& fontWeightString.charAt(0) >= '1' ? 100 * (fontWeightString.charAt(0) - '0') : -1;
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
@HippyControllerProps(name = NodeProps.FONT_STYLE, defaultType = HippyControllerProps.STRING, defaultString = "normal")
|
|
217
|
+
public void setFontStyle(HippyTextInput view, String fontStyleString) {
|
|
218
|
+
if (TextUtils.isEmpty(fontStyleString)) {
|
|
219
|
+
return;
|
|
220
|
+
}
|
|
221
|
+
int fontStyle = -1;
|
|
222
|
+
if ("italic".equals(fontStyleString)) {
|
|
223
|
+
fontStyle = Typeface.ITALIC;
|
|
224
|
+
} else if ("normal".equals(fontStyleString)) {
|
|
225
|
+
fontStyle = Typeface.NORMAL;
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
Typeface currentTypeface = view.getTypeface();
|
|
229
|
+
if (currentTypeface == null) {
|
|
230
|
+
currentTypeface = Typeface.DEFAULT;
|
|
231
|
+
}
|
|
232
|
+
if (fontStyle != currentTypeface.getStyle()) {
|
|
233
|
+
view.setTypeface(currentTypeface, fontStyle);
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
@HippyControllerProps(name = NodeProps.FONT_WEIGHT, defaultType = HippyControllerProps.STRING, defaultString = "normal")
|
|
238
|
+
public void setFontWeight(HippyTextInput view, String fontWeightString) {
|
|
239
|
+
int fontWeightNumeric = fontWeightString != null ? parseFontWeight(fontWeightString) : -1;
|
|
240
|
+
int fontWeight = -1;
|
|
241
|
+
if (fontWeightNumeric >= 500 || "bold".equals(fontWeightString)) {
|
|
242
|
+
fontWeight = Typeface.BOLD;
|
|
243
|
+
} else //noinspection ConstantConditions
|
|
244
|
+
if ("normal".equals(fontWeightString) || (fontWeightNumeric != -1
|
|
245
|
+
&& fontWeightNumeric < 500)) {
|
|
246
|
+
fontWeight = Typeface.NORMAL;
|
|
247
|
+
}
|
|
248
|
+
Typeface currentTypeface = view.getTypeface();
|
|
249
|
+
if (currentTypeface == null) {
|
|
250
|
+
currentTypeface = Typeface.DEFAULT;
|
|
251
|
+
}
|
|
252
|
+
if (fontWeight != currentTypeface.getStyle()) {
|
|
253
|
+
view.setTypeface(currentTypeface, fontWeight);
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
@HippyControllerProps(name = NodeProps.FONT_FAMILY, defaultType = HippyControllerProps.STRING, defaultString = "normal")
|
|
258
|
+
public void setFontFamily(HippyTextInput view, String fontFamily) {
|
|
259
|
+
if (TextUtils.isEmpty(fontFamily)) {
|
|
260
|
+
return;
|
|
261
|
+
}
|
|
262
|
+
int style = Typeface.NORMAL;
|
|
263
|
+
if (view.getTypeface() != null) {
|
|
264
|
+
style = view.getTypeface().getStyle();
|
|
265
|
+
}
|
|
266
|
+
Typeface newTypeface = Typeface.create(fontFamily, style);
|
|
267
|
+
view.setTypeface(newTypeface);
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
private static final InputFilter[] EMPTY_FILTERS = new InputFilter[0];
|
|
271
|
+
|
|
272
|
+
@HippyControllerProps(name = "maxLength", defaultType = HippyControllerProps.NUMBER, defaultNumber = Integer.MAX_VALUE)
|
|
273
|
+
public void maxLength(HippyTextInput view, int maxLength) {
|
|
274
|
+
InputFilter[] currentFilters = view.getFilters();
|
|
275
|
+
InputFilter[] newFilters = EMPTY_FILTERS;
|
|
276
|
+
|
|
277
|
+
if (maxLength == -1) {
|
|
278
|
+
if (currentFilters.length > 0) {
|
|
279
|
+
LinkedList<InputFilter> list = new LinkedList<>();
|
|
280
|
+
for (InputFilter currentFilter : currentFilters) {
|
|
281
|
+
if (!(currentFilter instanceof InputFilter.LengthFilter)) {
|
|
282
|
+
list.add(currentFilter);
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
if (!list.isEmpty()) {
|
|
286
|
+
//noinspection ToArrayCallWithZeroLengthArrayArgument
|
|
287
|
+
newFilters = list.toArray(new InputFilter[list.size()]);
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
} else {
|
|
291
|
+
if (currentFilters.length > 0) {
|
|
292
|
+
newFilters = currentFilters;
|
|
293
|
+
boolean replaced = false;
|
|
294
|
+
for (int i = 0; i < currentFilters.length; i++) {
|
|
295
|
+
if (currentFilters[i] instanceof InputFilter.LengthFilter) {
|
|
296
|
+
currentFilters[i] = new InputFilter.LengthFilter(maxLength);
|
|
297
|
+
replaced = true;
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
if (!replaced) {
|
|
301
|
+
newFilters = new InputFilter[currentFilters.length + 1];
|
|
302
|
+
System.arraycopy(currentFilters, 0, newFilters, 0, currentFilters.length);
|
|
303
|
+
newFilters[currentFilters.length] = new InputFilter.LengthFilter(maxLength);
|
|
304
|
+
}
|
|
305
|
+
} else {
|
|
306
|
+
newFilters = new InputFilter[1];
|
|
307
|
+
newFilters[0] = new InputFilter.LengthFilter(maxLength);
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
view.setFilters(newFilters);
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
@HippyControllerProps(name = "onSelectionChange", defaultType = "boolean")
|
|
315
|
+
public void setOnSelectionChange(HippyTextInput hippyTextInput, boolean change) {
|
|
316
|
+
hippyTextInput.setOnSelectListener(change);
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
@HippyControllerProps(name = "letterSpacing", defaultType = HippyControllerProps.NUMBER, defaultNumber = -1)
|
|
320
|
+
public void letterSpacing(HippyTextInput view, float letterSpacing) {
|
|
321
|
+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP && letterSpacing != -1) {
|
|
322
|
+
view.setLetterSpacing(PixelUtil.dp2px(letterSpacing));
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
@HippyControllerProps(name = "value", defaultType = HippyControllerProps.STRING)
|
|
327
|
+
public void value(HippyTextInput view, String value) {
|
|
328
|
+
int selectionStart = view.getSelectionStart();
|
|
329
|
+
int selectionEnd = view.getSelectionEnd();
|
|
330
|
+
LogUtils
|
|
331
|
+
.d(TAG, String.format("setText: selectionStart:%s sEnd:%s", selectionStart, selectionEnd));
|
|
332
|
+
Editable editText = view.getEditableText();
|
|
333
|
+
if (editText == null) {
|
|
334
|
+
return;
|
|
335
|
+
}
|
|
336
|
+
String oldValue = editText.toString();
|
|
337
|
+
String sub1 = oldValue.substring(0, selectionStart);
|
|
338
|
+
String sub2 = oldValue.substring(selectionEnd);
|
|
339
|
+
LogUtils.d(TAG, String.format("setText: sub1:[%s] sub2:[%s]", sub1, sub2));
|
|
340
|
+
|
|
341
|
+
if (selectionStart == selectionEnd && value.length() > oldValue.length() && value
|
|
342
|
+
.startsWith(sub1) && value.endsWith(sub2)) {
|
|
343
|
+
// 未选中状态 && insert
|
|
344
|
+
String insertStr = value.substring(selectionStart, value.length() - sub2.length());
|
|
345
|
+
LogUtils.d(TAG, String.format("setText: InsertStr: [%s]", insertStr));
|
|
346
|
+
editText.insert(selectionStart, insertStr);
|
|
347
|
+
} else if (selectionStart < selectionEnd && value.startsWith(sub1) && value.endsWith(sub2)) {
|
|
348
|
+
// 选中状态 && replace选中部分
|
|
349
|
+
String replaceStr = value.substring(selectionStart, value.length() - sub2.length());
|
|
350
|
+
LogUtils.d(TAG, String.format("setText: ReplaceStr: [%s]", replaceStr));
|
|
351
|
+
editText.replace(selectionStart, selectionEnd, replaceStr);
|
|
352
|
+
} else if (selectionStart == selectionEnd && value.length() < oldValue.length() && value
|
|
353
|
+
.endsWith(sub2)
|
|
354
|
+
&& value
|
|
355
|
+
.startsWith(sub1.substring(0, selectionStart - (oldValue.length() - value.length())))) {
|
|
356
|
+
// 未选中状态 && delete
|
|
357
|
+
int delLen = oldValue.length() - value.length();
|
|
358
|
+
editText.delete(selectionEnd - delLen, selectionEnd);
|
|
359
|
+
} else {
|
|
360
|
+
editText.replace(0, editText.length(), value);
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
|
|
365
|
+
@HippyControllerProps(name = "placeholder", defaultType = HippyControllerProps.STRING)
|
|
366
|
+
public void placeHolder(HippyTextInput view, String placeholder) {
|
|
367
|
+
view.setHint(placeholder);
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
@HippyControllerProps(name = "placeholderTextColor", defaultType = HippyControllerProps.NUMBER, defaultNumber = Color.GRAY)
|
|
371
|
+
public void setTextHitColor(HippyTextInput input, int color) {
|
|
372
|
+
input.setHintTextColor(color);
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
@HippyControllerProps(name = "numberOfLines", defaultType = HippyControllerProps.NUMBER, defaultNumber = Integer.MAX_VALUE)
|
|
376
|
+
public void setMaxLines(HippyTextInput input, int numberOfLine) {
|
|
377
|
+
input.setMaxLines(numberOfLine);
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
|
|
381
|
+
@HippyControllerProps(name = "underlineColorAndroid", defaultType = HippyControllerProps.NUMBER, defaultNumber = Color.TRANSPARENT)
|
|
382
|
+
public void setUnderlineColor(HippyTextInput view, Integer underlineColor) {
|
|
383
|
+
if (underlineColor == null) {
|
|
384
|
+
view.getBackground().clearColorFilter();
|
|
385
|
+
} else {
|
|
386
|
+
view.getBackground().setColorFilter(underlineColor, PorterDuff.Mode.SRC_IN);
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
@HippyControllerProps(name = "onChangeText", defaultType = HippyControllerProps.BOOLEAN)
|
|
391
|
+
public void setOnChangeText(HippyTextInput hippyTextInput, boolean change) {
|
|
392
|
+
hippyTextInput.setOnChangeListener(change);
|
|
393
|
+
}
|
|
394
|
+
|
|
395
|
+
@HippyControllerProps(name = "onEndEditing", defaultType = HippyControllerProps.BOOLEAN)
|
|
396
|
+
public void setEndEditing(HippyTextInput hippyTextInput, boolean change) {
|
|
397
|
+
hippyTextInput.setOnEndEditingListener(change);
|
|
398
|
+
}
|
|
399
|
+
|
|
400
|
+
@HippyControllerProps(name = "onFocus", defaultType = HippyControllerProps.BOOLEAN)
|
|
401
|
+
public void setOnFocus(HippyTextInput hippyTextInput, boolean change) {
|
|
402
|
+
hippyTextInput.setBlurOrOnFocus(change);
|
|
403
|
+
}
|
|
404
|
+
|
|
405
|
+
@HippyControllerProps(name = "onBlur", defaultType = HippyControllerProps.BOOLEAN)
|
|
406
|
+
public void setBlur(HippyTextInput hippyTextInput, boolean change) {
|
|
407
|
+
hippyTextInput.setBlurOrOnFocus(change);
|
|
408
|
+
}
|
|
409
|
+
|
|
410
|
+
@HippyControllerProps(name = "onContentSizeChange", defaultType = HippyControllerProps.BOOLEAN)
|
|
411
|
+
public void setOnContentSizeChange(HippyTextInput hippyTextInput, boolean contentSizeChange) {
|
|
412
|
+
hippyTextInput.setOnContentSizeChange(contentSizeChange);
|
|
413
|
+
}
|
|
414
|
+
|
|
415
|
+
@HippyControllerProps(name = NodeProps.COLOR, defaultType = HippyControllerProps.NUMBER)
|
|
416
|
+
public void setColor(HippyTextInput hippyTextInput, int change) {
|
|
417
|
+
hippyTextInput.setTextColor(change);
|
|
418
|
+
}
|
|
419
|
+
|
|
420
|
+
|
|
421
|
+
@HippyControllerProps(name = NodeProps.TEXT_ALIGN, defaultType = HippyControllerProps.STRING)
|
|
422
|
+
public void setTextAlign(HippyTextInput view, String textAlign) {
|
|
423
|
+
if (textAlign == null || "auto".equals(textAlign)) {
|
|
424
|
+
view.setGravityHorizontal(Gravity.NO_GRAVITY);
|
|
425
|
+
} else if ("left".equals(textAlign)) {
|
|
426
|
+
view.setGravityHorizontal(Gravity.LEFT);
|
|
427
|
+
} else if ("right".equals(textAlign)) {
|
|
428
|
+
view.setGravityHorizontal(Gravity.RIGHT);
|
|
429
|
+
} else if ("center".equals(textAlign)) {
|
|
430
|
+
view.setGravityHorizontal(Gravity.CENTER_HORIZONTAL);
|
|
431
|
+
} else if ("justify".equals(textAlign)) {
|
|
432
|
+
view.setGravityHorizontal(Gravity.LEFT);
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
|
|
436
|
+
@HippyControllerProps(name = NodeProps.TEXT_ALIGN_VERTICAL)
|
|
437
|
+
public void setTextAlignVertical(HippyTextInput view, String textAlignVertical) {
|
|
438
|
+
if (textAlignVertical == null || "auto".equals(textAlignVertical)) {
|
|
439
|
+
view.setGravityVertical(Gravity.NO_GRAVITY);
|
|
440
|
+
} else if ("top".equals(textAlignVertical)) {
|
|
441
|
+
view.setGravityVertical(Gravity.TOP);
|
|
442
|
+
} else if ("bottom".equals(textAlignVertical)) {
|
|
443
|
+
view.setGravityVertical(Gravity.BOTTOM);
|
|
444
|
+
} else if ("center".equals(textAlignVertical)) {
|
|
445
|
+
view.setGravityVertical(Gravity.CENTER_VERTICAL);
|
|
446
|
+
}
|
|
447
|
+
|
|
448
|
+
}
|
|
449
|
+
|
|
450
|
+
@Override
|
|
451
|
+
public void dispatchFunction(final HippyTextInput view, String functionName, HippyArray params,
|
|
452
|
+
Promise promise) {
|
|
453
|
+
if (COMMAND_getValue.equals(functionName)) {
|
|
454
|
+
if (promise != null) {
|
|
455
|
+
HippyMap resultMap = view.jsGetValue();
|
|
456
|
+
promise.resolve(resultMap);
|
|
457
|
+
}
|
|
458
|
+
}
|
|
459
|
+
}
|
|
460
|
+
|
|
461
|
+
@Override
|
|
462
|
+
public void dispatchFunction(final HippyTextInput view, String functionName,
|
|
463
|
+
final HippyArray var) {
|
|
464
|
+
switch (functionName) {
|
|
465
|
+
case COMMAND_setValue:
|
|
466
|
+
if (var != null && var.getString(0) != null) {
|
|
467
|
+
int pos = var.getInt(1);
|
|
468
|
+
if (var.size() < 2) {
|
|
469
|
+
pos = var.getString(0).length();
|
|
470
|
+
}
|
|
471
|
+
view.jsSetValue(var.getString(0), pos);
|
|
472
|
+
}
|
|
473
|
+
break;
|
|
474
|
+
case CLEAR_FUNCTION:
|
|
475
|
+
view.jsSetValue("", 0);
|
|
476
|
+
break;
|
|
477
|
+
case COMMAND_FOCUS:
|
|
478
|
+
view.setFocusableInTouchMode(true);
|
|
479
|
+
//noinspection AccessStaticViaInstance
|
|
480
|
+
Looper.getMainLooper().myQueue().addIdleHandler(new MessageQueue.IdleHandler() {
|
|
481
|
+
@Override
|
|
482
|
+
public boolean queueIdle() {
|
|
483
|
+
boolean result = view.requestFocusFromTouch();
|
|
484
|
+
LogUtils.d("InputText", " requestFocusFromTouch result:" + result);
|
|
485
|
+
if (!result) {
|
|
486
|
+
result = view.requestFocus();
|
|
487
|
+
LogUtils.d("InputText", "requestFocus result:" + result);
|
|
488
|
+
}
|
|
489
|
+
if (var.getObject(0) == null || var.getBoolean(0)) {
|
|
490
|
+
view.showInputMethodManager();
|
|
491
|
+
}
|
|
492
|
+
return false;
|
|
493
|
+
}
|
|
494
|
+
});
|
|
495
|
+
break;
|
|
496
|
+
case COMMAND_KEYBOARD_DISMISS:
|
|
497
|
+
view.hideInputMethod();
|
|
498
|
+
break;
|
|
499
|
+
case COMMAND_BLUR:
|
|
500
|
+
// view.setFocusableInTouchMode(false);
|
|
501
|
+
|
|
502
|
+
//find the HippyRootView
|
|
503
|
+
ViewParent viewParent = view.getParent();
|
|
504
|
+
while (viewParent != null) {
|
|
505
|
+
if (viewParent instanceof HippyRootView) {
|
|
506
|
+
break;
|
|
507
|
+
}
|
|
508
|
+
viewParent = viewParent.getParent();
|
|
509
|
+
}
|
|
510
|
+
int oldFoucusAbaility = 0;
|
|
511
|
+
//noinspection ConstantConditions
|
|
512
|
+
if (viewParent instanceof HippyRootView) {
|
|
513
|
+
oldFoucusAbaility = ((ViewGroup) viewParent)
|
|
514
|
+
.getDescendantFocusability(); //Get the current value
|
|
515
|
+
((ViewGroup) viewParent)
|
|
516
|
+
.setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS);//Block the fouse.
|
|
517
|
+
}
|
|
518
|
+
view.hideInputMethod();
|
|
519
|
+
view.clearFocus();
|
|
520
|
+
//noinspection ConstantConditions
|
|
521
|
+
if (viewParent instanceof HippyRootView) {
|
|
522
|
+
((ViewGroup) viewParent).setDescendantFocusability(oldFoucusAbaility);
|
|
523
|
+
}
|
|
524
|
+
break;
|
|
525
|
+
}
|
|
526
|
+
super.dispatchFunction(view, functionName, var);
|
|
527
|
+
}
|
|
528
|
+
}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
/* Tencent is pleased to support the open source community by making Hippy available.
|
|
2
|
+
* Copyright (C) 2018 THL A29 Limited, a Tencent company. All rights reserved.
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
package com.tencent.mtt.hippy.views.textinput;
|
|
17
|
+
|
|
18
|
+
import android.util.TypedValue;
|
|
19
|
+
import android.view.View;
|
|
20
|
+
import android.view.ViewGroup;
|
|
21
|
+
import android.widget.EditText;
|
|
22
|
+
|
|
23
|
+
import com.tencent.mtt.hippy.HippyEngineContext;
|
|
24
|
+
import com.tencent.mtt.hippy.common.HippyMap;
|
|
25
|
+
import com.tencent.mtt.hippy.dom.flex.FlexMeasureMode;
|
|
26
|
+
import com.tencent.mtt.hippy.dom.flex.FlexNodeAPI;
|
|
27
|
+
import com.tencent.mtt.hippy.dom.flex.FlexOutput;
|
|
28
|
+
import com.tencent.mtt.hippy.dom.flex.FlexSpacing;
|
|
29
|
+
import com.tencent.mtt.hippy.dom.node.NodeProps;
|
|
30
|
+
import com.tencent.mtt.hippy.dom.node.TextNode;
|
|
31
|
+
import com.tencent.mtt.hippy.utils.ContextHolder;
|
|
32
|
+
import com.tencent.mtt.hippy.utils.PixelUtil;
|
|
33
|
+
|
|
34
|
+
@SuppressWarnings({"deprecation", "unused"})
|
|
35
|
+
public class TextInputNode extends TextNode implements FlexNodeAPI.MeasureFunction {
|
|
36
|
+
|
|
37
|
+
private EditText mEditText;
|
|
38
|
+
private float[] mComputedPadding;
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
public TextInputNode(boolean isvurtla) {
|
|
42
|
+
super(isvurtla);
|
|
43
|
+
setMeasureFunction(this);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
@Override
|
|
47
|
+
public void updateProps(HippyMap props) {
|
|
48
|
+
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
@Override
|
|
52
|
+
public void layoutBefore(HippyEngineContext context) {
|
|
53
|
+
|
|
54
|
+
if (mEditText == null) {
|
|
55
|
+
mEditText = new EditText(ContextHolder.getAppContext());
|
|
56
|
+
mEditText.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,
|
|
57
|
+
ViewGroup.LayoutParams.WRAP_CONTENT));
|
|
58
|
+
|
|
59
|
+
setDefaultPadding(FlexSpacing.START, mEditText.getPaddingLeft());
|
|
60
|
+
setDefaultPadding(FlexSpacing.TOP, mEditText.getPaddingTop());
|
|
61
|
+
setDefaultPadding(FlexSpacing.END, mEditText.getPaddingRight());
|
|
62
|
+
setDefaultPadding(FlexSpacing.BOTTOM, mEditText.getPaddingBottom());
|
|
63
|
+
mComputedPadding = new float[]{getPadding(FlexSpacing.START), getPadding(FlexSpacing.TOP),
|
|
64
|
+
getPadding(FlexSpacing.END), getPadding(FlexSpacing.BOTTOM),};
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
@Override
|
|
69
|
+
public void layoutAfter(HippyEngineContext context) {
|
|
70
|
+
// 不能删
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
private int getMeasureSpec(float size, FlexMeasureMode mode) {
|
|
74
|
+
if (mode == FlexMeasureMode.EXACTLY) {
|
|
75
|
+
return View.MeasureSpec.makeMeasureSpec((int) size, View.MeasureSpec.EXACTLY);
|
|
76
|
+
} else if (mode == FlexMeasureMode.AT_MOST) {
|
|
77
|
+
return View.MeasureSpec.makeMeasureSpec((int) size, View.MeasureSpec.AT_MOST);
|
|
78
|
+
} else {
|
|
79
|
+
return View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
@Override
|
|
84
|
+
public void setPadding(int spacingType, float padding) {
|
|
85
|
+
super.setPadding(spacingType, padding);
|
|
86
|
+
mComputedPadding = new float[]{
|
|
87
|
+
getPadding(FlexSpacing.START),
|
|
88
|
+
getPadding(FlexSpacing.TOP),
|
|
89
|
+
getPadding(FlexSpacing.END),
|
|
90
|
+
getPadding(FlexSpacing.BOTTOM),
|
|
91
|
+
};
|
|
92
|
+
markUpdated();
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
@SuppressWarnings("rawtypes")
|
|
96
|
+
@Override
|
|
97
|
+
public long measure(FlexNodeAPI node, float width, FlexMeasureMode widthMode, float height,
|
|
98
|
+
FlexMeasureMode heightMode) {
|
|
99
|
+
mEditText.setTextSize(TypedValue.COMPLEX_UNIT_PX,
|
|
100
|
+
mFontSize == UNSET ? (int) Math.ceil(PixelUtil.dp2px(NodeProps.FONT_SIZE_SP)) : mFontSize);
|
|
101
|
+
mComputedPadding = new float[]{getPadding(FlexSpacing.START), getPadding(FlexSpacing.TOP),
|
|
102
|
+
getPadding(FlexSpacing.END), getPadding(FlexSpacing.BOTTOM),};
|
|
103
|
+
mEditText.setPadding((int) Math.floor(getPadding(FlexSpacing.START)),
|
|
104
|
+
(int) Math.floor(getPadding(FlexSpacing.TOP)),
|
|
105
|
+
(int) Math.floor(getPadding(FlexSpacing.END)),
|
|
106
|
+
(int) Math.floor(getPadding(FlexSpacing.BOTTOM)));
|
|
107
|
+
|
|
108
|
+
if (mNumberOfLines != UNSET) {
|
|
109
|
+
mEditText.setLines(mNumberOfLines);
|
|
110
|
+
}
|
|
111
|
+
mEditText.measure(getMeasureSpec(width, widthMode), getMeasureSpec(height, heightMode));
|
|
112
|
+
|
|
113
|
+
return FlexOutput.make(mEditText.getMeasuredWidth(), mEditText.getMeasuredHeight());
|
|
114
|
+
}
|
|
115
|
+
}
|