PaymentFragment.java 41 KB

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