PaymentFragment.java 37 KB

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