@quicktvui/ai 1.0.7 → 1.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (204) hide show
  1. package/package.json +1 -1
  2. package/rules/.clinerules +27 -4
  3. package/rules/.cursorrules +27 -4
  4. package/rules/.github/copilot-instructions.md +27 -4
  5. package/rules/.source/hippy/extend_views/CoverFlowHorizontalView.java +203 -0
  6. package/rules/.source/hippy/extend_views/CoverFlowVerticalView.java +203 -0
  7. package/rules/.source/hippy/extend_views/CoverFlowViewController.java +195 -0
  8. package/rules/.source/hippy/extend_views/EngineRootView.java +125 -0
  9. package/rules/.source/hippy/extend_views/ExtendTag.java +83 -0
  10. package/rules/.source/hippy/extend_views/FocusSearchHelper.java +124 -0
  11. package/rules/.source/hippy/extend_views/IRecyclerItemView.java +12 -0
  12. package/rules/.source/hippy/extend_views/JSEventHandleView.java +5 -0
  13. package/rules/.source/hippy/extend_views/MarqueeRelayManager.java +133 -0
  14. package/rules/.source/hippy/extend_views/MarqueeRelayTextView.java +211 -0
  15. package/rules/.source/hippy/extend_views/ProgressBarView.java +83 -0
  16. package/rules/.source/hippy/extend_views/ProgressBarViewController.java +145 -0
  17. package/rules/.source/hippy/extend_views/SeekBarView.java +104 -0
  18. package/rules/.source/hippy/extend_views/SeekBarViewController.java +218 -0
  19. package/rules/.source/hippy/extend_views/StateImageView.java +149 -0
  20. package/rules/.source/hippy/extend_views/StateImageViewController.java +34 -0
  21. package/rules/.source/hippy/extend_views/TVButtonView.java +314 -0
  22. package/rules/.source/hippy/extend_views/TVButtonViewController.java +89 -0
  23. package/rules/.source/hippy/extend_views/TVTextView.java +684 -0
  24. package/rules/.source/hippy/extend_views/TVViewActor.java +811 -0
  25. package/rules/.source/hippy/extend_views/TVViewActorHost.java +6 -0
  26. package/rules/.source/hippy/extend_views/TVViewActor/346/216/245/345/205/245.md +66 -0
  27. package/rules/.source/hippy/extend_views/TemplateUtil.java +336 -0
  28. package/rules/.source/hippy/extend_views/TextButtonNode.java +47 -0
  29. package/rules/.source/hippy/extend_views/TextViewController.java +377 -0
  30. package/rules/.source/hippy/extend_views/fastlist/CenterFlyInAnimator.java +96 -0
  31. package/rules/.source/hippy/extend_views/fastlist/ChildOnScreenScroller.java +548 -0
  32. package/rules/.source/hippy/extend_views/fastlist/ClonedViewTag.java +17 -0
  33. package/rules/.source/hippy/extend_views/fastlist/EventDeliverer.java +55 -0
  34. package/rules/.source/hippy/extend_views/fastlist/FastAdapter.java +4683 -0
  35. package/rules/.source/hippy/extend_views/fastlist/FastAdapterUtil.java +982 -0
  36. package/rules/.source/hippy/extend_views/fastlist/FastFlexNode.java +48 -0
  37. package/rules/.source/hippy/extend_views/fastlist/FastFlexView.java +873 -0
  38. package/rules/.source/hippy/extend_views/fastlist/FastFlexViewController.java +130 -0
  39. package/rules/.source/hippy/extend_views/fastlist/FastItemNode.java +67 -0
  40. package/rules/.source/hippy/extend_views/fastlist/FastItemView.java +306 -0
  41. package/rules/.source/hippy/extend_views/fastlist/FastItemViewController.java +106 -0
  42. package/rules/.source/hippy/extend_views/fastlist/FastListModule.java +95 -0
  43. package/rules/.source/hippy/extend_views/fastlist/FastListNode.java +90 -0
  44. package/rules/.source/hippy/extend_views/fastlist/FastListView.java +2466 -0
  45. package/rules/.source/hippy/extend_views/fastlist/FastListViewController.java +1038 -0
  46. package/rules/.source/hippy/extend_views/fastlist/FastListView/346/270/262/346/237/223/346/265/201/347/250/213/345/233/276.graffle +0 -0
  47. package/rules/.source/hippy/extend_views/fastlist/FastPendingView.java +47 -0
  48. package/rules/.source/hippy/extend_views/fastlist/ItemDecorations.java +71 -0
  49. package/rules/.source/hippy/extend_views/fastlist/ItemStoreNode.java +64 -0
  50. package/rules/.source/hippy/extend_views/fastlist/ItemStoreView.java +13 -0
  51. package/rules/.source/hippy/extend_views/fastlist/ItemStoreViewController.java +45 -0
  52. package/rules/.source/hippy/extend_views/fastlist/ListItemHolder.java +7 -0
  53. package/rules/.source/hippy/extend_views/fastlist/ListViewControlProp.java +41 -0
  54. package/rules/.source/hippy/extend_views/fastlist/MouseRecycleView.java +509 -0
  55. package/rules/.source/hippy/extend_views/fastlist/OnFastItemClickListener.java +12 -0
  56. package/rules/.source/hippy/extend_views/fastlist/OnFastItemFocusChangeListener.java +9 -0
  57. package/rules/.source/hippy/extend_views/fastlist/OnFastScrollStateChangedListener.java +7 -0
  58. package/rules/.source/hippy/extend_views/fastlist/PendingListNode.java +18 -0
  59. package/rules/.source/hippy/extend_views/fastlist/PendingViewController.java +13 -0
  60. package/rules/.source/hippy/extend_views/fastlist/PostHandlerView.java +6 -0
  61. package/rules/.source/hippy/extend_views/fastlist/PostTaskHolder.java +20 -0
  62. package/rules/.source/hippy/extend_views/fastlist/ReplaceChildController.java +105 -0
  63. package/rules/.source/hippy/extend_views/fastlist/ReplaceChildView.java +312 -0
  64. package/rules/.source/hippy/extend_views/fastlist/TVListView.java +3692 -0
  65. package/rules/.source/hippy/extend_views/fastlist/TemplateCodeParser.java +247 -0
  66. package/rules/.source/hippy/extend_views/fastlist/Utils.java +572 -0
  67. package/rules/.source/hippy/extend_views/fastlist/ViewTag.java +317 -0
  68. package/rules/.source/hippy/extend_views/fastlist/VirtualListView.java +8 -0
  69. package/rules/.source/hippy/extend_views/fastlist/diff/FastListDataBindingHelper.java +320 -0
  70. package/rules/.source/hippy/extend_views/fastlist/diff/KeyDiffHelper.java +289 -0
  71. package/rules/.source/hippy/extend_views/fastlist/diff/NoKeyDiffHelper.java +278 -0
  72. package/rules/.source/hippy/extend_views/tag/FontTag.java +53 -0
  73. package/rules/.source/hippy/extend_views/tag/HtmlTag.java +191 -0
  74. package/rules/.source/hippy/extend_views/tag/HtmlTagHandler.java +185 -0
  75. package/rules/.source/hippy/extend_views/tag/SpanTag.java +160 -0
  76. package/rules/.source/hippy/extend_views/tag/TextFontSpan.java +102 -0
  77. package/rules/.source/hippy/extend_views/waterfall/Chunk.java +10 -0
  78. package/rules/.source/hippy/extend_views/waterfall/ChunkGroup.java +5 -0
  79. package/rules/.source/hippy/extend_views/waterfall/Section.java +4 -0
  80. package/rules/.source/hippy/extend_views/waterfall/Tabs.java +5 -0
  81. package/rules/.source/hippy/extend_views/waterfall/WaterfallUtils.java +26 -0
  82. package/rules/.source/hippy/hippy_uimanager/ControllerHolder.java +30 -0
  83. package/rules/.source/hippy/hippy_uimanager/ControllerManager.java +651 -0
  84. package/rules/.source/hippy/hippy_uimanager/ControllerRegistry.java +102 -0
  85. package/rules/.source/hippy/hippy_uimanager/ControllerUpdateManger.java +252 -0
  86. package/rules/.source/hippy/hippy_uimanager/CustomControllerHelper.java +425 -0
  87. package/rules/.source/hippy/hippy_uimanager/DiffUtils.java +526 -0
  88. package/rules/.source/hippy/hippy_uimanager/ExtendViewGroup.java +36 -0
  89. package/rules/.source/hippy/hippy_uimanager/HippyCustomViewCreator.java +29 -0
  90. package/rules/.source/hippy/hippy_uimanager/HippyGroupController.java +83 -0
  91. package/rules/.source/hippy/hippy_uimanager/HippyViewBase.java +27 -0
  92. package/rules/.source/hippy/hippy_uimanager/HippyViewController.java +2189 -0
  93. package/rules/.source/hippy/hippy_uimanager/HippyViewEvent.java +52 -0
  94. package/rules/.source/hippy/hippy_uimanager/IHippyZIndexViewGroup.java +24 -0
  95. package/rules/.source/hippy/hippy_uimanager/InternalExtendViewUtil.java +395 -0
  96. package/rules/.source/hippy/hippy_uimanager/ListItemRenderNode.java +143 -0
  97. package/rules/.source/hippy/hippy_uimanager/ListViewRenderNode.java +44 -0
  98. package/rules/.source/hippy/hippy_uimanager/MatrixUtil.java +470 -0
  99. package/rules/.source/hippy/hippy_uimanager/NativeGestureDispatcher.java +349 -0
  100. package/rules/.source/hippy/hippy_uimanager/NativeGestureProcessor.java +188 -0
  101. package/rules/.source/hippy/hippy_uimanager/PullFooterRenderNode.java +43 -0
  102. package/rules/.source/hippy/hippy_uimanager/PullHeaderRenderNode.java +43 -0
  103. package/rules/.source/hippy/hippy_uimanager/RenderManager.java +304 -0
  104. package/rules/.source/hippy/hippy_uimanager/RenderNode.java +533 -0
  105. package/rules/.source/hippy/hippy_uimanager/StateView.java +17 -0
  106. package/rules/.source/hippy/hippy_uimanager/TransformUtil.java +125 -0
  107. package/rules/.source/hippy/hippy_uimanager/ViewGroupDrawingOrderHelper.java +108 -0
  108. package/rules/.source/hippy/hippy_uimanager/ViewStateProvider.java +10 -0
  109. package/rules/.source/hippy/hippy_views/audioview/AudioPlayManager.java +457 -0
  110. package/rules/.source/hippy/hippy_views/audioview/AudioView.java +225 -0
  111. package/rules/.source/hippy/hippy_views/audioview/AudioViewController.java +135 -0
  112. package/rules/.source/hippy/hippy_views/common/CommonBackgroundDrawable.java +58 -0
  113. package/rules/.source/hippy/hippy_views/common/CommonBorder.java +37 -0
  114. package/rules/.source/hippy/hippy_views/custom/HippyCustomPropsController.java +61 -0
  115. package/rules/.source/hippy/hippy_views/hippylist/HippyRecyclerListAdapter.java +399 -0
  116. package/rules/.source/hippy/hippy_views/hippylist/HippyRecyclerView.java +378 -0
  117. package/rules/.source/hippy/hippy_views/hippylist/HippyRecyclerViewController.java +187 -0
  118. package/rules/.source/hippy/hippy_views/hippylist/HippyRecyclerViewHolder.java +39 -0
  119. package/rules/.source/hippy/hippy_views/hippylist/HippyRecyclerViewWrapper.java +134 -0
  120. package/rules/.source/hippy/hippy_views/hippylist/NodePositionHelper.java +55 -0
  121. package/rules/.source/hippy/hippy_views/hippylist/PreloadHelper.java +54 -0
  122. package/rules/.source/hippy/hippy_views/hippylist/PullFooterEventHelper.java +61 -0
  123. package/rules/.source/hippy/hippy_views/hippylist/PullHeaderEventHelper.java +127 -0
  124. package/rules/.source/hippy/hippy_views/hippylist/RecyclerViewEventHelper.java +394 -0
  125. package/rules/.source/hippy/hippy_views/image/HippyContentDrawable.java +113 -0
  126. package/rules/.source/hippy/hippy_views/image/HippyImageView.java +1608 -0
  127. package/rules/.source/hippy/hippy_views/image/HippyImageViewController.java +382 -0
  128. package/rules/.source/hippy/hippy_views/image/IImageStateListener.java +7 -0
  129. package/rules/.source/hippy/hippy_views/list/ChildOnScreenScroller.java +255 -0
  130. package/rules/.source/hippy/hippy_views/list/HippyListAdapter.java +647 -0
  131. package/rules/.source/hippy/hippy_views/list/HippyListItemView.java +162 -0
  132. package/rules/.source/hippy/hippy_views/list/HippyListItemViewController.java +45 -0
  133. package/rules/.source/hippy/hippy_views/list/HippyListView.java +915 -0
  134. package/rules/.source/hippy/hippy_views/list/HippyListViewController.java +622 -0
  135. package/rules/.source/hippy/hippy_views/list/HippyRecycler.java +31 -0
  136. package/rules/.source/hippy/hippy_views/list/IRecycleItemTypeChange.java +23 -0
  137. package/rules/.source/hippy/hippy_views/list/ItemDecorations.java +70 -0
  138. package/rules/.source/hippy/hippy_views/list/NegativeLongKeyFlinger.java +156 -0
  139. package/rules/.source/hippy/hippy_views/list/NodeHolder.java +34 -0
  140. package/rules/.source/hippy/hippy_views/list/RecycleViewFlinger.java +126 -0
  141. package/rules/.source/hippy/hippy_views/list/TVRecyclerView.java +2070 -0
  142. package/rules/.source/hippy/hippy_views/list/TVSingleLineListView.java +15 -0
  143. package/rules/.source/hippy/hippy_views/modal/HippyModalHostManager.java +102 -0
  144. package/rules/.source/hippy/hippy_views/modal/HippyModalHostView.java +597 -0
  145. package/rules/.source/hippy/hippy_views/modal/ModalHostHelper.java +46 -0
  146. package/rules/.source/hippy/hippy_views/modal/ModalStyleNode.java +34 -0
  147. package/rules/.source/hippy/hippy_views/modal/RequestCloseEvent.java +32 -0
  148. package/rules/.source/hippy/hippy_views/modal/ShowEvent.java +31 -0
  149. package/rules/.source/hippy/hippy_views/navigator/Navigator.java +126 -0
  150. package/rules/.source/hippy/hippy_views/navigator/NavigatorController.java +120 -0
  151. package/rules/.source/hippy/hippy_views/refresh/HippyPullFooterView.java +47 -0
  152. package/rules/.source/hippy/hippy_views/refresh/HippyPullFooterViewController.java +65 -0
  153. package/rules/.source/hippy/hippy_views/refresh/HippyPullHeaderView.java +39 -0
  154. package/rules/.source/hippy/hippy_views/refresh/HippyPullHeaderViewController.java +104 -0
  155. package/rules/.source/hippy/hippy_views/refresh/RefreshWrapper.java +237 -0
  156. package/rules/.source/hippy/hippy_views/refresh/RefreshWrapperController.java +62 -0
  157. package/rules/.source/hippy/hippy_views/refresh/RefreshWrapperItemController.java +39 -0
  158. package/rules/.source/hippy/hippy_views/refresh/RefreshWrapperItemView.java +26 -0
  159. package/rules/.source/hippy/hippy_views/scroll/HippyHorizontalScrollView.java +500 -0
  160. package/rules/.source/hippy/hippy_views/scroll/HippyOnScrollHelper.java +39 -0
  161. package/rules/.source/hippy/hippy_views/scroll/HippyScrollView.java +46 -0
  162. package/rules/.source/hippy/hippy_views/scroll/HippyScrollViewController.java +178 -0
  163. package/rules/.source/hippy/hippy_views/scroll/HippyScrollViewEventHelper.java +92 -0
  164. package/rules/.source/hippy/hippy_views/scroll/HippyVerticalScrollView.java +522 -0
  165. package/rules/.source/hippy/hippy_views/text/HippyTextView.java +512 -0
  166. package/rules/.source/hippy/hippy_views/text/HippyTextViewController.java +77 -0
  167. package/rules/.source/hippy/hippy_views/textinput/HippyTextInput.java +668 -0
  168. package/rules/.source/hippy/hippy_views/textinput/HippyTextInputController.java +528 -0
  169. package/rules/.source/hippy/hippy_views/textinput/TextInputNode.java +115 -0
  170. package/rules/.source/hippy/hippy_views/videoview/APEZProvider.java +287 -0
  171. package/rules/.source/hippy/hippy_views/videoview/APKExpansionSupport.java +82 -0
  172. package/rules/.source/hippy/hippy_views/videoview/PivotPoint.java +13 -0
  173. package/rules/.source/hippy/hippy_views/videoview/ScalableType.java +34 -0
  174. package/rules/.source/hippy/hippy_views/videoview/ScalableVideoView.java +265 -0
  175. package/rules/.source/hippy/hippy_views/videoview/ScaleManager.java +191 -0
  176. package/rules/.source/hippy/hippy_views/videoview/Size.java +19 -0
  177. package/rules/.source/hippy/hippy_views/videoview/VideoHippyView.java +917 -0
  178. package/rules/.source/hippy/hippy_views/videoview/VideoHippyViewController.java +236 -0
  179. package/rules/.source/hippy/hippy_views/videoview/ZipResourceFile.java +427 -0
  180. package/rules/.source/hippy/hippy_views/view/CardRootView.java +28 -0
  181. package/rules/.source/hippy/hippy_views/view/CustomLayoutView.java +10 -0
  182. package/rules/.source/hippy/hippy_views/view/CustomNodeView.java +5 -0
  183. package/rules/.source/hippy/hippy_views/view/DialogViewGroup.java +113 -0
  184. package/rules/.source/hippy/hippy_views/view/HippyViewGroup.java +2042 -0
  185. package/rules/.source/hippy/hippy_views/view/HippyViewGroupController.java +583 -0
  186. package/rules/.source/hippy/hippy_views/view/WindowRoot.java +5 -0
  187. package/rules/.source/hippy/hippy_views/viewpager/HippyViewPager.java +308 -0
  188. package/rules/.source/hippy/hippy_views/viewpager/HippyViewPagerAdapter.java +148 -0
  189. package/rules/.source/hippy/hippy_views/viewpager/HippyViewPagerController.java +246 -0
  190. package/rules/.source/hippy/hippy_views/viewpager/HippyViewPagerItem.java +27 -0
  191. package/rules/.source/hippy/hippy_views/viewpager/HippyViewPagerItemController.java +42 -0
  192. package/rules/.source/hippy/hippy_views/viewpager/ViewPagerPageChangeListener.java +114 -0
  193. package/rules/.source/hippy/hippy_views/viewpager/event/HippyPageItemExposureEvent.java +40 -0
  194. package/rules/.source/hippy/hippy_views/viewpager/event/HippyPageScrollEvent.java +43 -0
  195. package/rules/.source/hippy/hippy_views/viewpager/event/HippyPageScrollStateChangedEvent.java +42 -0
  196. package/rules/.source/hippy/hippy_views/viewpager/event/HippyPageSelectedEvent.java +42 -0
  197. package/rules/.source/hippy/hippy_views/webview/HippyWebView.java +160 -0
  198. package/rules/.source/hippy/hippy_views/webview/HippyWebViewBridge.java +20 -0
  199. package/rules/.source/hippy/hippy_views/webview/HippyWebViewController.java +103 -0
  200. package/rules/.source/hippy/hippy_views/webview/HippyWebViewInner.java +77 -0
  201. package/rules/.windsurfrules +27 -4
  202. package/rules/AGENTS.md +27 -4
  203. package/rules/CLAUDE.md +27 -3
  204. package/rules/GEMINI.md +25 -3
@@ -0,0 +1,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
+ }