PaymentFragment.java 41 KB

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