PaymentFragment.java 37 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821
  1. package com.emato.ich.fragment;
  2. import android.os.Bundle;
  3. import android.os.CountDownTimer;
  4. import android.text.Editable;
  5. import android.text.InputType;
  6. import android.view.LayoutInflater;
  7. import android.view.View;
  8. import android.view.ViewGroup;
  9. import android.widget.TextView;
  10. import androidx.annotation.NonNull;
  11. import androidx.annotation.Nullable;
  12. import androidx.fragment.app.Fragment;
  13. import com.cherry.sdk.controller.utils.ScanGunKeyEventHelper;
  14. import com.emato.ich.MainActivity;
  15. import com.emato.ich.R;
  16. import com.emato.ich.api.ICSPClient;
  17. import com.emato.ich.contant.ICSPConstant;
  18. import com.emato.ich.contant.ScanGunConstant;
  19. import com.emato.ich.databinding.FragmentPaymentBinding;
  20. import com.emato.ich.databinding.FragmentPaymentBinding;
  21. import com.emato.ich.entity.vo.PreparedOrderResponseVo;
  22. import com.emato.ich.entity.vo.PreparedOrderVo;
  23. import com.emato.ich.entity.vo.ResponseData;
  24. import com.emato.ich.local.LocalStorage;
  25. import com.emato.ich.utils.BaseUtils;
  26. import com.emato.ich.utils.JacksonUtils;
  27. import com.emato.ich.utils.Log;
  28. import com.emato.ich.utils.LoggingUtils;
  29. import com.emato.ich.utils.NavUtils;
  30. import com.emato.ich.utils.StringUtils;
  31. import com.emato.ich.utils.TimeOutUtils;
  32. import com.emato.ich.utils.ToastUtils;
  33. import com.fasterxml.jackson.core.JsonProcessingException;
  34. import com.fasterxml.jackson.core.type.TypeReference;
  35. import com.fasterxml.jackson.databind.ObjectMapper;
  36. import org.jetbrains.annotations.NotNull;
  37. import org.json.JSONObject;
  38. import java.io.IOException;
  39. import java.util.concurrent.atomic.AtomicBoolean;
  40. import java.util.concurrent.atomic.AtomicInteger;
  41. import java.util.regex.Matcher;
  42. import java.util.regex.Pattern;
  43. import okhttp3.Call;
  44. import okhttp3.Callback;
  45. import okhttp3.Response;
  46. /**
  47. * 扫描付款码支付
  48. */
  49. public class PaymentFragment extends Fragment {
  50. private static final String TAG = PaymentFragment.class.getName();
  51. private FragmentPaymentBinding binding;
  52. private PreparedOrderResponseVo data;
  53. private final AtomicInteger paymentNoLock = new AtomicInteger(1);
  54. private final AtomicInteger submitLock = new AtomicInteger(1);
  55. private CountDownTimer timer;
  56. private long start;
  57. @Nullable
  58. @org.jetbrains.annotations.Nullable
  59. @Override
  60. public View onCreateView(@NonNull @NotNull LayoutInflater inflater, @Nullable @org.jetbrains.annotations.Nullable ViewGroup container, @Nullable @org.jetbrains.annotations.Nullable Bundle savedInstanceState) {
  61. start = System.currentTimeMillis();
  62. binding = FragmentPaymentBinding.inflate(inflater, container, false);
  63. return binding.getRoot();
  64. }
  65. public void onViewCreated(@NonNull View view, Bundle savedInstanceState) {
  66. long end = System.currentTimeMillis();
  67. Log.i(TAG, TAG + "页面渲染速度为" + (end - start) + "ms。");
  68. BaseUtils.disableEditText(binding.paymentNo);
  69. try {
  70. MainActivity activity = (MainActivity) getActivity();
  71. timer = TimeOutUtils.timeout(activity, PaymentFragment.this, binding.timeout, 90);
  72. timer.start();
  73. String payAmount = activity.getBundleMap().get(SendKeyBoardFragment.class.getName()).getString("payAmount");
  74. binding.paymentMoney.setText(payAmount);
  75. } catch (Exception e) {
  76. Log.e(TAG, "onViewCreated: 倒计时出现异常! ", e);
  77. LoggingUtils.sendErrorLog("业务异常: 输入投递信息页面倒计时出现异常! ", e);
  78. }
  79. Bundle arguments = null;
  80. String sectionType = null;
  81. try {
  82. MainActivity activity = (MainActivity) getActivity();
  83. binding.paymentNo.setInputType(InputType.TYPE_NULL);
  84. // 扫描枪监听 扫描付款码
  85. activity.scanGunKeyEventHelper = new ScanGunKeyEventHelper(s -> {
  86. // 扫码成功回调
  87. Log.d(TAG, "onScanSuccess: " + s);
  88. if (!StringUtils.isNullOrEmpty(s)) {
  89. for (String pattern : ScanGunConstant.getPatterns()) {
  90. Matcher matcher = Pattern.compile(pattern).matcher(s);
  91. if (!matcher.matches()) {
  92. ToastUtils.make(getContext(), "请将条形码置于扫码枪前! ");
  93. return;
  94. }
  95. }
  96. }
  97. if (paymentNoLock.get() == 1) {
  98. // 禁用软件盘
  99. Editable text = binding.paymentNo.getText();
  100. text.clear();
  101. binding.paymentNo.setText(s);
  102. paymentNoLock.incrementAndGet();
  103. // TODO 预定义,实际参数可能不一致 oms获取用户手机号 自动填充
  104. ICSPClient.delivererPay(LocalStorage.getInstance().getSession().getToken(), s, new Callback() {
  105. @Override
  106. public void onFailure(@NotNull Call call, @NotNull IOException e) {
  107. // 请求失败
  108. Log.e(TAG, "onFailure: 投递员付款! 网络异常! ", e);
  109. LoggingUtils.sendErrorLog("业务异常: 投递员付款! 网络异常! ", e);
  110. ToastUtils.make(getContext(), "服务器异常! 请联系管理员!");
  111. paymentNoLock.set(1);
  112. }
  113. @Override
  114. public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException {
  115. getActivity().runOnUiThread(() -> {
  116. String parseResponse = ICSPClient.isSuccessfulAndParseResponse(response);
  117. if (!StringUtils.isNullOrEmpty(parseResponse)) {
  118. try {
  119. ResponseData responseData = JacksonUtils.objectmapper.readValue(parseResponse, ResponseData.class);
  120. if (null != responseData && ICSPConstant.OK.equals(responseData.getCode())) {
  121. NavUtils.navigate(PaymentFragment.this, R.id.action_paymentFragment_to_InputInfoKeyBoardFragment);
  122. } else {
  123. ToastUtils.make(getContext(), responseData.getMsg());
  124. }
  125. } catch (JsonProcessingException e) {
  126. Log.e(TAG, "onResponse: 服务器响应错误! 自动获取用户手机号失败! ", e);
  127. ToastUtils.make(getContext(), "网络异常! 请手动输入手机号! ");
  128. LoggingUtils.sendErrorLog("业务异常: 服务器响应错误! 自动获取用户手机号失败! ", e);
  129. } catch (RuntimeException e) {
  130. Log.e(TAG, "onResponse: 获取用户手机号未知错误! ", e);
  131. ToastUtils.make(getContext(), "未查询到手机号! 请手动输入! ");
  132. LoggingUtils.sendErrorLog("业务异常: 获取用户手机号未知错误! ", e);
  133. } catch (Exception e) {
  134. Log.e(TAG, "onResponse: 获取用户手机号未知错误! ", e);
  135. ToastUtils.make(getContext(), "未查询到手机号! 请手动输入! ");
  136. LoggingUtils.sendErrorLog("业务异常: 获取用户手机号未知错误! ", e);
  137. }
  138. } else {
  139. ToastUtils.make(getContext(), "服务器异常!请稍后重试!");
  140. }
  141. paymentNoLock.set(1);
  142. });
  143. }
  144. });
  145. }
  146. });
  147. } catch (RuntimeException e) {
  148. Log.e(TAG, "onViewCreated: InputInfoFragment页面获取ChooseCabinetFragment传值错误! ", e);
  149. LoggingUtils.sendErrorLog("业务异常: InputInfoFragment页面获取ChooseCabinetFragment传值错误! ", e);
  150. }
  151. // TODO 离线逻辑, 暂时不做
  152. // 数字输入 5 手机号 4 面单号
  153. binding.paymentNo.setOnFocusChangeListener((view1, hasFocus) -> {
  154. AtomicBoolean caseSmallFlag = new AtomicBoolean(true);
  155. binding.keyBoard.inputButton0.setOnClickListener(v -> {
  156. if(!hasFocus){
  157. return;
  158. }
  159. int length = binding.paymentNo.getText().length();
  160. if (length >= 16) {
  161. ToastUtils.make(getContext(), "面单号最多不能超过16位! ");
  162. return;
  163. }
  164. int start = binding.paymentNo.getSelectionStart();
  165. binding.paymentNo.getText().insert(start, "0");
  166. });
  167. binding.keyBoard.inputButton1.setOnClickListener(v -> {
  168. if(!hasFocus){
  169. return;
  170. }
  171. int length = binding.paymentNo.getText().length();
  172. if (length >= 16) {
  173. ToastUtils.make(getContext(), "面单号最多不能超过16位! ");
  174. return;
  175. }
  176. int start = binding.paymentNo.getSelectionStart();
  177. binding.paymentNo.getText().insert(start, "1");
  178. });
  179. binding.keyBoard.inputButton2.setOnClickListener(v -> {
  180. if(!hasFocus){
  181. return;
  182. }
  183. int length = binding.paymentNo.getText().length();
  184. if (length >= 16) {
  185. ToastUtils.make(getContext(), "面单号最多不能超过16位! ");
  186. return;
  187. }
  188. int start = binding.paymentNo.getSelectionStart();
  189. binding.paymentNo.getText().insert(start, "2");
  190. });
  191. binding.keyBoard.inputButton3.setOnClickListener(v -> {
  192. if(!hasFocus){
  193. return;
  194. }
  195. int length = binding.paymentNo.getText().length();
  196. if (length >= 16) {
  197. ToastUtils.make(getContext(), "面单号最多不能超过16位! ");
  198. return;
  199. }
  200. int start = binding.paymentNo.getSelectionStart();
  201. binding.paymentNo.getText().insert(start, "3");
  202. });
  203. binding.keyBoard.inputButton4.setOnClickListener(v -> {
  204. if(!hasFocus){
  205. return;
  206. }
  207. int length = binding.paymentNo.getText().length();
  208. if (length >= 16) {
  209. ToastUtils.make(getContext(), "面单号最多不能超过16位! ");
  210. return;
  211. }
  212. int start = binding.paymentNo.getSelectionStart();
  213. binding.paymentNo.getText().insert(start, "4");
  214. });
  215. binding.keyBoard.inputButton5.setOnClickListener(v -> {
  216. if(!hasFocus){
  217. return;
  218. }
  219. int length = binding.paymentNo.getText().length();
  220. if (length >= 16) {
  221. ToastUtils.make(getContext(), "面单号最多不能超过16位! ");
  222. return;
  223. }
  224. int start = binding.paymentNo.getSelectionStart();
  225. binding.paymentNo.getText().insert(start, "5");
  226. });
  227. binding.keyBoard.inputButton6.setOnClickListener(v -> {
  228. if(!hasFocus){
  229. return;
  230. }
  231. int length = binding.paymentNo.getText().length();
  232. if (length >= 16) {
  233. ToastUtils.make(getContext(), "面单号最多不能超过16位! ");
  234. return;
  235. }
  236. int start = binding.paymentNo.getSelectionStart();
  237. binding.paymentNo.getText().insert(start, "6");
  238. });
  239. binding.keyBoard.inputButton7.setOnClickListener(v -> {
  240. if(!hasFocus){
  241. return;
  242. }
  243. int length = binding.paymentNo.getText().length();
  244. if (length >= 16) {
  245. ToastUtils.make(getContext(), "面单号最多不能超过16位! ");
  246. return;
  247. }
  248. int start = binding.paymentNo.getSelectionStart();
  249. binding.paymentNo.getText().insert(start, "7");
  250. });
  251. binding.keyBoard.inputButton8.setOnClickListener(v -> {
  252. if(!hasFocus){
  253. return;
  254. }
  255. int length = binding.paymentNo.getText().length();
  256. if (length >= 16) {
  257. ToastUtils.make(getContext(), "面单号最多不能超过16位! ");
  258. return;
  259. }
  260. int start = binding.paymentNo.getSelectionStart();
  261. binding.paymentNo.getText().insert(start, "8");
  262. });
  263. binding.keyBoard.inputButton9.setOnClickListener(v -> {
  264. if(!hasFocus){
  265. return;
  266. }
  267. int length = binding.paymentNo.getText().length();
  268. if (length >= 16) {
  269. ToastUtils.make(getContext(), "面单号最多不能超过16位! ");
  270. return;
  271. }
  272. int start = binding.paymentNo.getSelectionStart();
  273. binding.paymentNo.getText().insert(start, "9");
  274. });
  275. // todo:绑定字母按键
  276. binding.keyBoard.inputButtonQ.setOnClickListener(v -> {
  277. if(!hasFocus){
  278. return;
  279. }
  280. int length = binding.paymentNo.getText().length();
  281. if (length >= 16) {
  282. ToastUtils.make(getContext(), "面单号最多不能超过16位! ");
  283. return;
  284. }
  285. int start = binding.paymentNo.getSelectionStart();
  286. binding.paymentNo.getText().insert(start, caseSmallFlag.get() ? "Q" : "q");
  287. });
  288. binding.keyBoard.inputButtonW.setOnClickListener(v -> {
  289. if(!hasFocus){
  290. return;
  291. }
  292. int length = binding.paymentNo.getText().length();
  293. if (length >= 16) {
  294. ToastUtils.make(getContext(), "面单号最多不能超过16位! ");
  295. return;
  296. }
  297. int start = binding.paymentNo.getSelectionStart();
  298. binding.paymentNo.getText().insert(start, caseSmallFlag.get() ? "W" : "w");
  299. });
  300. binding.keyBoard.inputButtonE.setOnClickListener(v -> {
  301. if(!hasFocus){
  302. return;
  303. }
  304. int length = binding.paymentNo.getText().length();
  305. if (length >= 16) {
  306. ToastUtils.make(getContext(), "面单号最多不能超过16位! ");
  307. return;
  308. }
  309. int start = binding.paymentNo.getSelectionStart();
  310. binding.paymentNo.getText().insert(start, caseSmallFlag.get() ? "E" : "e");
  311. });
  312. binding.keyBoard.inputButtonR.setOnClickListener(v -> {
  313. if(!hasFocus){
  314. return;
  315. }
  316. int length = binding.paymentNo.getText().length();
  317. if (length >= 16) {
  318. ToastUtils.make(getContext(), "面单号最多不能超过16位! ");
  319. return;
  320. }
  321. int start = binding.paymentNo.getSelectionStart();
  322. binding.paymentNo.getText().insert(start, caseSmallFlag.get() ? "R" : "r");
  323. });
  324. binding.keyBoard.inputButtonT.setOnClickListener(v -> {
  325. if(!hasFocus){
  326. return;
  327. }
  328. int length = binding.paymentNo.getText().length();
  329. if (length >= 16) {
  330. ToastUtils.make(getContext(), "面单号最多不能超过16位! ");
  331. return;
  332. }
  333. int start = binding.paymentNo.getSelectionStart();
  334. binding.paymentNo.getText().insert(start, caseSmallFlag.get() ? "T" : "t");
  335. });
  336. binding.keyBoard.inputButtonY.setOnClickListener(v -> {
  337. if(!hasFocus){
  338. return;
  339. }
  340. int length = binding.paymentNo.getText().length();
  341. if (length >= 16) {
  342. ToastUtils.make(getContext(), "面单号最多不能超过16位! ");
  343. return;
  344. }
  345. int start = binding.paymentNo.getSelectionStart();
  346. binding.paymentNo.getText().insert(start, caseSmallFlag.get() ? "Y" : "y");
  347. });
  348. binding.keyBoard.inputButtonU.setOnClickListener(v -> {
  349. if(!hasFocus){
  350. return;
  351. }
  352. int length = binding.paymentNo.getText().length();
  353. if (length >= 16) {
  354. ToastUtils.make(getContext(), "面单号最多不能超过16位! ");
  355. return;
  356. }
  357. int start = binding.paymentNo.getSelectionStart();
  358. binding.paymentNo.getText().insert(start, caseSmallFlag.get() ? "U" : "u");
  359. });
  360. binding.keyBoard.inputButtonI.setOnClickListener(v -> {
  361. if(!hasFocus){
  362. return;
  363. }
  364. int length = binding.paymentNo.getText().length();
  365. if (length >= 16) {
  366. ToastUtils.make(getContext(), "面单号最多不能超过16位! ");
  367. return;
  368. }
  369. int start = binding.paymentNo.getSelectionStart();
  370. binding.paymentNo.getText().insert(start, caseSmallFlag.get() ? "I" : "i");
  371. });
  372. binding.keyBoard.inputButtonO.setOnClickListener(v -> {
  373. if(!hasFocus){
  374. return;
  375. }
  376. int length = binding.paymentNo.getText().length();
  377. if (length >= 16) {
  378. ToastUtils.make(getContext(), "面单号最多不能超过16位! ");
  379. return;
  380. }
  381. int start = binding.paymentNo.getSelectionStart();
  382. binding.paymentNo.getText().insert(start, caseSmallFlag.get() ? "O" : "o");
  383. });
  384. binding.keyBoard.inputButtonP.setOnClickListener(v -> {
  385. if(!hasFocus){
  386. return;
  387. }
  388. int length = binding.paymentNo.getText().length();
  389. if (length >= 16) {
  390. ToastUtils.make(getContext(), "面单号最多不能超过16位! ");
  391. return;
  392. }
  393. int start = binding.paymentNo.getSelectionStart();
  394. binding.paymentNo.getText().insert(start, caseSmallFlag.get() ? "P" : "p");
  395. });
  396. binding.keyBoard.inputButtonA.setOnClickListener(v -> {
  397. if(!hasFocus){
  398. return;
  399. }
  400. int length = binding.paymentNo.getText().length();
  401. if (length >= 16) {
  402. ToastUtils.make(getContext(), "面单号最多不能超过16位! ");
  403. return;
  404. }
  405. int start = binding.paymentNo.getSelectionStart();
  406. binding.paymentNo.getText().insert(start, caseSmallFlag.get() ? "A" : "a");
  407. });
  408. binding.keyBoard.inputButtonS.setOnClickListener(v -> {
  409. if(!hasFocus){
  410. return;
  411. }
  412. int length = binding.paymentNo.getText().length();
  413. if (length >= 16) {
  414. ToastUtils.make(getContext(), "面单号最多不能超过16位! ");
  415. return;
  416. }
  417. int start = binding.paymentNo.getSelectionStart();
  418. binding.paymentNo.getText().insert(start, caseSmallFlag.get() ? "S" : "s");
  419. });
  420. binding.keyBoard.inputButtonD.setOnClickListener(v -> {
  421. if(!hasFocus){
  422. return;
  423. }
  424. int length = binding.paymentNo.getText().length();
  425. if (length >= 16) {
  426. ToastUtils.make(getContext(), "面单号最多不能超过16位! ");
  427. return;
  428. }
  429. int start = binding.paymentNo.getSelectionStart();
  430. binding.paymentNo.getText().insert(start, caseSmallFlag.get() ? "D" : "d");
  431. });
  432. binding.keyBoard.inputButtonF.setOnClickListener(v -> {
  433. if(!hasFocus){
  434. return;
  435. }
  436. int length = binding.paymentNo.getText().length();
  437. if (length >= 16) {
  438. ToastUtils.make(getContext(), "面单号最多不能超过16位! ");
  439. return;
  440. }
  441. int start = binding.paymentNo.getSelectionStart();
  442. binding.paymentNo.getText().insert(start, caseSmallFlag.get() ? "F" : "f");
  443. });
  444. binding.keyBoard.inputButtonG.setOnClickListener(v -> {
  445. if(!hasFocus){
  446. return;
  447. }
  448. int length = binding.paymentNo.getText().length();
  449. if (length >= 16) {
  450. ToastUtils.make(getContext(), "面单号最多不能超过16位! ");
  451. return;
  452. }
  453. int start = binding.paymentNo.getSelectionStart();
  454. binding.paymentNo.getText().insert(start, caseSmallFlag.get() ? "G" : "g");
  455. });
  456. binding.keyBoard.inputButtonH.setOnClickListener(v -> {
  457. if(!hasFocus){
  458. return;
  459. }
  460. int length = binding.paymentNo.getText().length();
  461. if (length >= 16) {
  462. ToastUtils.make(getContext(), "面单号最多不能超过16位! ");
  463. return;
  464. }
  465. int start = binding.paymentNo.getSelectionStart();
  466. binding.paymentNo.getText().insert(start, caseSmallFlag.get() ? "H" : "h");
  467. });
  468. binding.keyBoard.inputButtonJ.setOnClickListener(v -> {
  469. if(!hasFocus){
  470. return;
  471. }
  472. int length = binding.paymentNo.getText().length();
  473. if (length >= 16) {
  474. ToastUtils.make(getContext(), "面单号最多不能超过16位! ");
  475. return;
  476. }
  477. int start = binding.paymentNo.getSelectionStart();
  478. binding.paymentNo.getText().insert(start, caseSmallFlag.get() ? "J" : "j");
  479. });
  480. binding.keyBoard.inputButtonK.setOnClickListener(v -> {
  481. if(!hasFocus){
  482. return;
  483. }
  484. int length = binding.paymentNo.getText().length();
  485. if (length >= 16) {
  486. ToastUtils.make(getContext(), "面单号最多不能超过16位! ");
  487. return;
  488. }
  489. int start = binding.paymentNo.getSelectionStart();
  490. binding.paymentNo.getText().insert(start, caseSmallFlag.get() ? "K" : "k");
  491. });
  492. binding.keyBoard.inputButtonL.setOnClickListener(v -> {
  493. if(!hasFocus){
  494. return;
  495. }
  496. int length = binding.paymentNo.getText().length();
  497. if (length >= 16) {
  498. ToastUtils.make(getContext(), "面单号最多不能超过16位! ");
  499. return;
  500. }
  501. int start = binding.paymentNo.getSelectionStart();
  502. binding.paymentNo.getText().insert(start, caseSmallFlag.get() ? "L" : "l");
  503. });
  504. binding.keyBoard.inputButtonZ.setOnClickListener(v -> {
  505. if(!hasFocus){
  506. return;
  507. }
  508. int length = binding.paymentNo.getText().length();
  509. if (length >= 16) {
  510. ToastUtils.make(getContext(), "面单号最多不能超过16位! ");
  511. return;
  512. }
  513. int start = binding.paymentNo.getSelectionStart();
  514. binding.paymentNo.getText().insert(start, caseSmallFlag.get() ? "Z" : "z");
  515. });
  516. binding.keyBoard.inputButtonX.setOnClickListener(v -> {
  517. if(!hasFocus){
  518. return;
  519. }
  520. int length = binding.paymentNo.getText().length();
  521. if (length >= 16) {
  522. ToastUtils.make(getContext(), "面单号最多不能超过16位!");
  523. return;
  524. }
  525. int start = binding.paymentNo.getSelectionStart();
  526. binding.paymentNo.getText().insert(start, caseSmallFlag.get() ? "X" : "x");
  527. });
  528. binding.keyBoard.inputButtonC.setOnClickListener(v -> {
  529. if(!hasFocus){
  530. return;
  531. }
  532. int length = binding.paymentNo.getText().length();
  533. if (length >= 16) {
  534. ToastUtils.make(getContext(), "面单号最多不能超过16位! ");
  535. return;
  536. }
  537. int start = binding.paymentNo.getSelectionStart();
  538. binding.paymentNo.getText().insert(start, caseSmallFlag.get() ? "C" : "c");
  539. });
  540. binding.keyBoard.inputButtonV.setOnClickListener(v -> {
  541. if(!hasFocus){
  542. return;
  543. }
  544. int length = binding.paymentNo.getText().length();
  545. if (length >= 16) {
  546. ToastUtils.make(getContext(), "面单号最多不能超过16位! ");
  547. return;
  548. }
  549. int start = binding.paymentNo.getSelectionStart();
  550. binding.paymentNo.getText().insert(start, caseSmallFlag.get() ? "V" : "v");
  551. });
  552. binding.keyBoard.inputButtonB.setOnClickListener(v -> {
  553. if(!hasFocus){
  554. return;
  555. }
  556. int length = binding.paymentNo.getText().length();
  557. if (length >= 16) {
  558. ToastUtils.make(getContext(), "面单号最多不能超过16位! ");
  559. return;
  560. }
  561. int start = binding.paymentNo.getSelectionStart();
  562. binding.paymentNo.getText().insert(start, caseSmallFlag.get() ? "B" : "b");
  563. });
  564. binding.keyBoard.inputButtonN.setOnClickListener(v -> {
  565. if(!hasFocus){
  566. return;
  567. }
  568. int length = binding.paymentNo.getText().length();
  569. if (length >= 16) {
  570. ToastUtils.make(getContext(), "面单号最多不能超过16位! ");
  571. return;
  572. }
  573. int start = binding.paymentNo.getSelectionStart();
  574. binding.paymentNo.getText().insert(start, caseSmallFlag.get() ? "N" : "n");
  575. });
  576. binding.keyBoard.inputButtonM.setOnClickListener(v -> {
  577. if(!hasFocus){
  578. return;
  579. }
  580. int length = binding.paymentNo.getText().length();
  581. if (length >= 16) {
  582. ToastUtils.make(getContext(), "面单号最多不能超过16位! ");
  583. return;
  584. }
  585. int start = binding.paymentNo.getSelectionStart();
  586. binding.paymentNo.getText().insert(start, caseSmallFlag.get() ? "M" : "m");
  587. });
  588. // 符号
  589. binding.keyBoard.symbolButton1.setOnClickListener(v -> {
  590. if(!hasFocus){
  591. return;
  592. }
  593. int length = binding.paymentNo.getText().length();
  594. if (length >= 16) {
  595. ToastUtils.make(getContext(), "面单号最多不能超过16位! ");
  596. return;
  597. }
  598. int start = binding.paymentNo.getSelectionStart();
  599. binding.paymentNo.getText().insert(start, "-");
  600. });
  601. binding.keyBoard.symbolButton2.setOnClickListener(v -> {
  602. if(!hasFocus){
  603. return;
  604. }
  605. int length = binding.paymentNo.getText().length();
  606. if (length >= 16) {
  607. ToastUtils.make(getContext(), "面单号最多不能超过16位! ");
  608. return;
  609. }
  610. int start = binding.paymentNo.getSelectionStart();
  611. binding.paymentNo.getText().insert(start, "/");
  612. });
  613. binding.keyBoard.symbolButton3.setOnClickListener(v -> {
  614. if(!hasFocus){
  615. return;
  616. }
  617. int length = binding.paymentNo.getText().length();
  618. if (length >= 16) {
  619. ToastUtils.make(getContext(), "面单号最多不能超过16位! ");
  620. return;
  621. }
  622. int start = binding.paymentNo.getSelectionStart();
  623. binding.paymentNo.getText().insert(start, ":");
  624. });
  625. binding.keyBoard.symbolButton4.setOnClickListener(v -> {
  626. if(!hasFocus){
  627. return;
  628. }
  629. int length = binding.paymentNo.getText().length();
  630. if (length >= 16) {
  631. ToastUtils.make(getContext(), "面单号最多不能超过16位! ");
  632. return;
  633. }
  634. int start = binding.paymentNo.getSelectionStart();
  635. binding.paymentNo.getText().insert(start, "+");
  636. });
  637. binding.keyBoard.symbolButton5.setOnClickListener(v -> {
  638. if(!hasFocus){
  639. return;
  640. }
  641. int length = binding.paymentNo.getText().length();
  642. if (length >= 16) {
  643. ToastUtils.make(getContext(), "面单号最多不能超过16位! ");
  644. return;
  645. }
  646. int start = binding.paymentNo.getSelectionStart();
  647. binding.paymentNo.getText().insert(start, "(");
  648. });
  649. binding.keyBoard.symbolButton6.setOnClickListener(v -> {
  650. if(!hasFocus){
  651. return;
  652. }
  653. int length = binding.paymentNo.getText().length();
  654. if (length >= 16) {
  655. ToastUtils.make(getContext(), "面单号最多不能超过16位! ");
  656. return;
  657. }
  658. int start = binding.paymentNo.getSelectionStart();
  659. binding.paymentNo.getText().insert(start, ")");
  660. });
  661. binding.keyBoard.symbolButton7.setOnClickListener(v -> {
  662. if(!hasFocus){
  663. return;
  664. }
  665. int length = binding.paymentNo.getText().length();
  666. if (length >= 16) {
  667. ToastUtils.make(getContext(), "面单号最多不能超过16位! ");
  668. return;
  669. }
  670. int start = binding.paymentNo.getSelectionStart();
  671. binding.paymentNo.getText().insert(start, "#");
  672. });
  673. binding.keyBoard.symbolButton8.setOnClickListener(v -> {
  674. if(!hasFocus){
  675. return;
  676. }
  677. int length = binding.paymentNo.getText().length();
  678. if (length >= 16) {
  679. ToastUtils.make(getContext(), "面单号最多不能超过16位! ");
  680. return;
  681. }
  682. int start = binding.paymentNo.getSelectionStart();
  683. binding.paymentNo.getText().insert(start, "@");
  684. });
  685. binding.keyBoard.symbolButton9.setOnClickListener(v -> {
  686. if(!hasFocus){
  687. return;
  688. }
  689. int length = binding.paymentNo.getText().length();
  690. if (length >= 16) {
  691. ToastUtils.make(getContext(), "面单号最多不能超过16位! ");
  692. return;
  693. }
  694. int start = binding.paymentNo.getSelectionStart();
  695. binding.paymentNo.getText().insert(start, ".");
  696. });
  697. binding.keyBoard.symbolButton10.setOnClickListener(v -> {
  698. if(!hasFocus){
  699. return;
  700. }
  701. int length = binding.paymentNo.getText().length();
  702. if (length >= 16) {
  703. ToastUtils.make(getContext(), "?");
  704. return;
  705. }
  706. int start = binding.paymentNo.getSelectionStart();
  707. binding.paymentNo.getText().insert(start, "!");
  708. });
  709. // 大小写按键绑定 默认大写
  710. binding.keyBoard.inputButtonCaseSmall.setOnClickListener(v -> {
  711. if (caseSmallFlag.get()) {
  712. caseSmallFlag.set(false);
  713. } else {
  714. caseSmallFlag.set(true);
  715. }
  716. binding.keyBoard.inputButtonCaseSmall.setText(caseSmallFlag.get() ? "大写" : "小写");
  717. // 设置键盘字母大小写
  718. binding.keyBoard.inputButtonQ.setText(caseSmallFlag.get() ? "Q" : "q");
  719. binding.keyBoard.inputButtonW.setText(caseSmallFlag.get() ? "W" : "w");
  720. binding.keyBoard.inputButtonE.setText(caseSmallFlag.get() ? "E" : "e");
  721. binding.keyBoard.inputButtonR.setText(caseSmallFlag.get() ? "R" : "r");
  722. binding.keyBoard.inputButtonT.setText(caseSmallFlag.get() ? "T" : "t");
  723. binding.keyBoard.inputButtonY.setText(caseSmallFlag.get() ? "Y" : "y");
  724. binding.keyBoard.inputButtonU.setText(caseSmallFlag.get() ? "U" : "u");
  725. binding.keyBoard.inputButtonI.setText(caseSmallFlag.get() ? "I" : "i");
  726. binding.keyBoard.inputButtonO.setText(caseSmallFlag.get() ? "O" : "o");
  727. binding.keyBoard.inputButtonP.setText(caseSmallFlag.get() ? "P" : "p");
  728. binding.keyBoard.inputButtonA.setText(caseSmallFlag.get() ? "A" : "a");
  729. binding.keyBoard.inputButtonS.setText(caseSmallFlag.get() ? "S" : "s");
  730. binding.keyBoard.inputButtonD.setText(caseSmallFlag.get() ? "D" : "d");
  731. binding.keyBoard.inputButtonF.setText(caseSmallFlag.get() ? "F" : "f");
  732. binding.keyBoard.inputButtonG.setText(caseSmallFlag.get() ? "G" : "g");
  733. binding.keyBoard.inputButtonH.setText(caseSmallFlag.get() ? "H" : "h");
  734. binding.keyBoard.inputButtonJ.setText(caseSmallFlag.get() ? "J" : "j");
  735. binding.keyBoard.inputButtonK.setText(caseSmallFlag.get() ? "K" : "k");
  736. binding.keyBoard.inputButtonL.setText(caseSmallFlag.get() ? "L" : "l");
  737. binding.keyBoard.inputButtonZ.setText(caseSmallFlag.get() ? "Z" : "z");
  738. binding.keyBoard.inputButtonX.setText(caseSmallFlag.get() ? "X" : "x");
  739. binding.keyBoard.inputButtonC.setText(caseSmallFlag.get() ? "C" : "c");
  740. binding.keyBoard.inputButtonV.setText(caseSmallFlag.get() ? "V" : "v");
  741. binding.keyBoard.inputButtonB.setText(caseSmallFlag.get() ? "B" : "b");
  742. binding.keyBoard.inputButtonN.setText(caseSmallFlag.get() ? "N" : "n");
  743. binding.keyBoard.inputButtonM.setText(caseSmallFlag.get() ? "M" : "m");
  744. });
  745. binding.keyBoard.inputButtonCancel.setOnClickListener(v -> {
  746. Editable text = binding.paymentNo.getText();
  747. int start = binding.paymentNo.getSelectionStart();
  748. if (text.length() > 0) {
  749. if (start > 0) {
  750. text.delete(start - 1, start);
  751. }
  752. binding.paymentNo.setText(text, TextView.BufferType.EDITABLE);
  753. binding.paymentNo.setSelection(start - 1 < 0 ? text.length() : start - 1);
  754. }
  755. });
  756. // 长按删除
  757. binding.keyBoard.inputButtonCancel.setOnLongClickListener(v -> {
  758. binding.paymentNo.getText().clear();
  759. return false;
  760. });
  761. });
  762. binding.returnBtn.setOnClickListener(view1 -> {
  763. if (null != timer) {
  764. timer.cancel();
  765. }
  766. NavUtils.navigate(this, R.id.action_paymentFragment_to_mainFragment);
  767. });
  768. // 默认选中运单号输入框
  769. binding.paymentNo.requestFocus();
  770. }
  771. private void extracted(AtomicBoolean caseSmallFlag) {
  772. }
  773. public PreparedOrderResponseVo getData() {
  774. return data;
  775. }
  776. @Override
  777. public void onDestroy() {
  778. if (timer != null) {
  779. timer.cancel();
  780. timer = null;
  781. }
  782. super.onDestroy();
  783. binding = null;
  784. Log.i(TAG, TAG + "被销毁。。。");
  785. }
  786. }