InputInfoKeyBoardFragment.java 50 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034
  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.FragmentInputKeyBoardBinding;
  20. import com.emato.ich.databinding.FragmentMyKeyBoardBinding;
  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 java.io.IOException;
  38. import java.util.concurrent.atomic.AtomicBoolean;
  39. import java.util.concurrent.atomic.AtomicInteger;
  40. import java.util.regex.Matcher;
  41. import java.util.regex.Pattern;
  42. import okhttp3.Call;
  43. import okhttp3.Callback;
  44. import okhttp3.Response;
  45. /**
  46. * 输入投递信息
  47. */
  48. public class InputInfoKeyBoardFragment extends Fragment {
  49. private static final String TAG = "InputInfoFragment";
  50. private FragmentInputKeyBoardBinding binding;
  51. private PreparedOrderResponseVo data;
  52. private final AtomicInteger mailNoLock = new AtomicInteger(1);
  53. private final AtomicInteger submitLock = new AtomicInteger(1);
  54. private CountDownTimer timer;
  55. private long start;
  56. @Nullable
  57. @org.jetbrains.annotations.Nullable
  58. @Override
  59. public View onCreateView(@NonNull @NotNull LayoutInflater inflater, @Nullable @org.jetbrains.annotations.Nullable ViewGroup container, @Nullable @org.jetbrains.annotations.Nullable Bundle savedInstanceState) {
  60. start = System.currentTimeMillis();
  61. binding = FragmentInputKeyBoardBinding.inflate(inflater, container, false);
  62. return binding.getRoot();
  63. }
  64. public void onViewCreated(@NonNull View view, Bundle savedInstanceState) {
  65. long end = System.currentTimeMillis();
  66. Log.i(TAG, TAG + "页面渲染速度为" + (end - start) + "ms。");
  67. // BaseUtils.disableEditText(binding.delivererPhone);
  68. BaseUtils.disableEditText(binding.delivererPhoneConfirm);
  69. BaseUtils.disableEditText(binding.mailNo);
  70. try {
  71. MainActivity activity = (MainActivity) getActivity();
  72. timer = TimeOutUtils.timeout(activity, InputInfoKeyBoardFragment.this, binding.timeout, 90);
  73. timer.start();
  74. } catch (Exception e) {
  75. Log.e(TAG, "onViewCreated: 倒计时出现异常! ", e);
  76. LoggingUtils.sendErrorLog("业务异常: 输入投递信息页面倒计时出现异常! ", e);
  77. }
  78. Bundle arguments = null;
  79. String sectionType = null;
  80. MainActivity activity = (MainActivity) getActivity();
  81. String loginType = activity.getBundleMap().get(CourierFragment.class.getName()).getString("loginType");
  82. try {
  83. arguments = activity.getBundleMap().get(ChooseCabinetFragment.class.getName());
  84. sectionType = arguments.getString("section_type");
  85. binding.mailNo.setInputType(InputType.TYPE_NULL);
  86. // 扫描枪监听 扫描运单号
  87. activity.scanGunKeyEventHelper = new ScanGunKeyEventHelper(s -> {
  88. // 扫码成功回调
  89. Log.d(TAG, "onScanSuccess: " + s);
  90. Log.d(TAG, "onScanSuccess: " + loginType);
  91. if (!StringUtils.isNullOrEmpty(s)) {
  92. for (String pattern : ScanGunConstant.getPatterns()) {
  93. Matcher matcher = Pattern.compile(pattern).matcher(s);
  94. if (!matcher.matches()) {
  95. ToastUtils.make(getContext(), "请将条形码置于扫码枪前! ");
  96. return;
  97. }
  98. }
  99. }
  100. if (mailNoLock.get() == 1) {
  101. // 禁用软件盘
  102. Editable text = binding.mailNo.getText();
  103. text.clear();
  104. binding.mailNo.setText(s);
  105. mailNoLock.incrementAndGet();
  106. if("store".equals(loginType)){
  107. // TODO 预定义,实际参数可能不一致 oms获取用户手机号 自动填充
  108. ICSPClient.getUserPhoneNumber(LocalStorage.getInstance().getSession().getToken(), BaseUtils.getClientId(), s, new Callback() {
  109. @Override
  110. public void onFailure(@NotNull Call call, @NotNull IOException e) {
  111. // 请求失败
  112. Log.e(TAG, "onFailure: 请求oms获取手机号失败! 网络异常! ", e);
  113. LoggingUtils.sendErrorLog("业务异常: 请求oms获取手机号失败! 网络异常! ", e);
  114. ToastUtils.make(getContext(), "服务器异常! 请手动输入!");
  115. mailNoLock.set(1);
  116. }
  117. @Override
  118. public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException {
  119. getActivity().runOnUiThread(() -> {
  120. String parseResponse = ICSPClient.isSuccessfulAndParseResponse(response);
  121. if (!StringUtils.isNullOrEmpty(parseResponse)) {
  122. try {
  123. ResponseData<PreparedOrderResponseVo> responseData = new ObjectMapper().readValue(parseResponse, new TypeReference<ResponseData<PreparedOrderResponseVo>>() {
  124. });
  125. PreparedOrderResponseVo data = responseData.getData();
  126. if (null != responseData && ICSPConstant.OK.equals(responseData.getCode())) {
  127. String collectorPhone = data.getCollectorPhone();
  128. if(StringUtils.isNullOrEmpty(collectorPhone)){
  129. ToastUtils.make(getContext(), "未查询到手机号信息,请确认运单号是否正确!");
  130. }
  131. binding.delivererPhoneConfirm.setText(collectorPhone);
  132. } else {
  133. ToastUtils.make(getContext(), "查询手机号失败,返回信息:" + responseData.getMsg());
  134. }
  135. } catch (JsonProcessingException e) {
  136. Log.e(TAG, "onResponse: 服务器响应错误! 自动获取用户手机号失败! ", e);
  137. ToastUtils.make(getContext(), "网络异常! 请手动输入手机号! ");
  138. LoggingUtils.sendErrorLog("业务异常: 服务器响应错误! 自动获取用户手机号失败! ", e);
  139. } catch (RuntimeException e) {
  140. Log.e(TAG, "onResponse: 获取用户手机号未知错误! ", e);
  141. ToastUtils.make(getContext(), "未查询到手机号! 请手动输入! ");
  142. LoggingUtils.sendErrorLog("业务异常: 获取用户手机号未知错误! ", e);
  143. }
  144. } else {
  145. ToastUtils.make(getContext(), "服务器异常!请稍后重试!");
  146. }
  147. mailNoLock.set(1);
  148. });
  149. }
  150. });
  151. }
  152. }
  153. });
  154. } catch (RuntimeException e) {
  155. Log.e(TAG, "onViewCreated: InputInfoFragment页面获取ChooseCabinetFragment传值错误! ", e);
  156. LoggingUtils.sendErrorLog("业务异常: InputInfoFragment页面获取ChooseCabinetFragment传值错误! ", e);
  157. }
  158. // TODO 离线逻辑, 暂时不做
  159. Pattern phonePattern = Pattern.compile("^((13[0-9])|(14[0,1,4-9])|(15[0-3,5-9])|(16[2,5,6,7])|(17[0-8])|(18[0-9])|(19[0-3,5-9]))\\d{8}$");
  160. // 下单逻辑
  161. String finalSectionType = sectionType;
  162. if (submitLock.get() == 1) {
  163. submitLock.incrementAndGet();
  164. binding.keyBoard.inputButtonConfirm.setOnClickListener(view1 -> {
  165. Bundle bundle = new Bundle();
  166. String mailNo = binding.mailNo.getText().toString();
  167. // String phone = binding.delivererPhone.getText().toString();
  168. String phoneConfirm = binding.delivererPhoneConfirm.getText().toString();
  169. if (!phonePattern.matcher(phoneConfirm).matches()) {
  170. ToastUtils.make(getContext(), "请输入正确的手机号!");
  171. } else if (StringUtils.isNullOrEmpty(mailNo)) {
  172. ToastUtils.make(getContext(), "运单号不能为空!请扫描运单号!");
  173. } else {
  174. // 验证完 预下单
  175. PreparedOrderVo preparedOrderVo = new PreparedOrderVo();
  176. preparedOrderVo.setClientId(BaseUtils.getClientId());
  177. preparedOrderVo.setMailNo(mailNo);
  178. preparedOrderVo.setCollectorPhone(phoneConfirm);
  179. preparedOrderVo.setLockerType(finalSectionType);
  180. preparedOrderVo.setDelivererPhone(LocalStorage.getInstance().getSession().getPhone());
  181. if("courier".equals(loginType)){
  182. preparedOrderVo.setOrderType("1");
  183. }else if("collect".equals(loginType)){
  184. preparedOrderVo.setOrderType("2");
  185. }else{
  186. preparedOrderVo.setOrderType("0");
  187. }
  188. // 预下单
  189. ICSPClient.preparedOrder(LocalStorage.getInstance().getSession().getToken(), preparedOrderVo, new Callback() {
  190. @Override
  191. public void onFailure(@NotNull Call call, @NotNull IOException e) {
  192. // TODO 预下单调用失败
  193. ToastUtils.make(getContext(), "请求服务器失败!网络异常!");
  194. Log.e(TAG, "onFailure: 预下单失败! call: " + call.timeout().toString(), e);
  195. LoggingUtils.sendErrorLog("业务异常: 预下单失败! call: " + call.timeout().toString(), e);
  196. }
  197. @Override
  198. public void onResponse(@NotNull Call call, @NotNull Response response) {
  199. ((MainActivity) getActivity()).runOnUiThread(() -> {
  200. try {
  201. String responseStr = ICSPClient.isSuccessfulAndParseResponse(response);
  202. if (!StringUtils.isNullOrEmpty(responseStr)) {
  203. ObjectMapper objectMapper = JacksonUtils.objectmapper;
  204. ResponseData<PreparedOrderResponseVo> responseData = objectMapper.readValue(responseStr, new TypeReference<ResponseData<PreparedOrderResponseVo>>() {
  205. });
  206. data = responseData.getData();
  207. // 响应信息
  208. if (responseData.getCode().equals(ICSPConstant.OK)) {
  209. bundle.putString("preparedOrderResponse", objectMapper.writeValueAsString(data));
  210. bundle.putString("takeNo", mailNo);
  211. bundle.putString("sectionType", finalSectionType);
  212. // 跳转到确认投递
  213. try {
  214. MainActivity activity = (MainActivity) getActivity();
  215. activity.getBundleMap().put(InputInfoKeyBoardFragment.class.getName(), bundle);
  216. } catch (RuntimeException e) {
  217. Log.e(TAG, "onResponse: InputInfoFragment页面获取SendInfoConfirmFragment传值错误! ", e);
  218. LoggingUtils.sendErrorLog("业务异常: InputInfoFragment页面获取SendInfoConfirmFragment传值错误! ", e);
  219. }
  220. if (null != timer) {
  221. timer.cancel();
  222. }
  223. NavUtils.navigate(InputInfoKeyBoardFragment.this, R.id.action_InputInfoKeyBoardFragment_to_sendInfoConfirmFragment);
  224. }
  225. Log.i(TAG, "onResponse: ICSP返回码: " + responseData.getCode() + ", 返回信息: " + responseData.getMsg());
  226. ToastUtils.make(getContext(), responseData.getMsg());
  227. } else {
  228. ToastUtils.make(getContext(), "服务器异常!请稍后重试!");
  229. }
  230. } catch (JsonProcessingException e) {
  231. Log.e(TAG, "onResponse: 预下单转换成JSON出错! ", e);
  232. LoggingUtils.sendErrorLog("业务异常: 预下单转换成JSON出错! ", e);
  233. } catch (RuntimeException e) {
  234. Log.e(TAG, "onResponse: 预下单失败! ", e);
  235. LoggingUtils.sendErrorLog("业务异常: 预下单失败! ", e);
  236. }
  237. });
  238. }
  239. });
  240. }
  241. });
  242. }
  243. // 数字输入 5 手机号 4 面单号
  244. binding.delivererPhoneConfirm.setOnFocusChangeListener((view1, hasFocus) -> {
  245. if (hasFocus) {
  246. binding.keyBoard.inputButton0.setOnClickListener(v -> {
  247. int length = binding.delivererPhoneConfirm.getText().length();
  248. if (length >= 11) {
  249. ToastUtils.make(getContext(), "手机号不能超过11位! ");
  250. return;
  251. }
  252. int start = binding.delivererPhoneConfirm.getSelectionStart();
  253. binding.delivererPhoneConfirm.getText().insert(start, "0");
  254. });
  255. binding.keyBoard.inputButton1.setOnClickListener(v -> {
  256. int length = binding.delivererPhoneConfirm.getText().length();
  257. if (length >= 11) {
  258. ToastUtils.make(getContext(), "手机号不能超过11位! ");
  259. return;
  260. }
  261. int start = binding.delivererPhoneConfirm.getSelectionStart();
  262. binding.delivererPhoneConfirm.getText().insert(start, "1");
  263. });
  264. binding.keyBoard.inputButton2.setOnClickListener(v -> {
  265. int length = binding.delivererPhoneConfirm.getText().length();
  266. if (length >= 11) {
  267. ToastUtils.make(getContext(), "手机号不能超过11位! ");
  268. return;
  269. }
  270. int start = binding.delivererPhoneConfirm.getSelectionStart();
  271. binding.delivererPhoneConfirm.getText().insert(start, "2");
  272. });
  273. binding.keyBoard.inputButton3.setOnClickListener(v -> {
  274. int length = binding.delivererPhoneConfirm.getText().length();
  275. if (length >= 11) {
  276. ToastUtils.make(getContext(), "手机号不能超过11位! ");
  277. return;
  278. }
  279. int start = binding.delivererPhoneConfirm.getSelectionStart();
  280. binding.delivererPhoneConfirm.getText().insert(start, "3");
  281. });
  282. binding.keyBoard.inputButton4.setOnClickListener(v -> {
  283. int length = binding.delivererPhoneConfirm.getText().length();
  284. if (length >= 11) {
  285. ToastUtils.make(getContext(), "手机号不能超过11位! ");
  286. return;
  287. }
  288. int start = binding.delivererPhoneConfirm.getSelectionStart();
  289. binding.delivererPhoneConfirm.getText().insert(start, "4");
  290. });
  291. binding.keyBoard.inputButton5.setOnClickListener(v -> {
  292. int length = binding.delivererPhoneConfirm.getText().length();
  293. if (length >= 11) {
  294. ToastUtils.make(getContext(), "手机号不能超过11位! ");
  295. return;
  296. }
  297. int start = binding.delivererPhoneConfirm.getSelectionStart();
  298. binding.delivererPhoneConfirm.getText().insert(start, "5");
  299. });
  300. binding.keyBoard.inputButton6.setOnClickListener(v -> {
  301. int length = binding.delivererPhoneConfirm.getText().length();
  302. if (length >= 11) {
  303. ToastUtils.make(getContext(), "手机号不能超过11位! ");
  304. return;
  305. }
  306. int start = binding.delivererPhoneConfirm.getSelectionStart();
  307. binding.delivererPhoneConfirm.getText().insert(start, "6");
  308. });
  309. binding.keyBoard.inputButton7.setOnClickListener(v -> {
  310. int length = binding.delivererPhoneConfirm.getText().length();
  311. if (length >= 11) {
  312. ToastUtils.make(getContext(), "手机号不能超过11位! ");
  313. return;
  314. }
  315. int start = binding.delivererPhoneConfirm.getSelectionStart();
  316. binding.delivererPhoneConfirm.getText().insert(start, "7");
  317. });
  318. binding.keyBoard.inputButton8.setOnClickListener(v -> {
  319. int length = binding.delivererPhoneConfirm.getText().length();
  320. if (length >= 11) {
  321. ToastUtils.make(getContext(), "手机号不能超过11位! ");
  322. return;
  323. }
  324. int start = binding.delivererPhoneConfirm.getSelectionStart();
  325. binding.delivererPhoneConfirm.getText().insert(start, "8");
  326. });
  327. binding.keyBoard.inputButton9.setOnClickListener(v -> {
  328. int length = binding.delivererPhoneConfirm.getText().length();
  329. if (length >= 11) {
  330. ToastUtils.make(getContext(), "手机号不能超过11位");
  331. return;
  332. }
  333. int start = binding.delivererPhoneConfirm.getSelectionStart();
  334. binding.delivererPhoneConfirm.getText().insert(start, "9");
  335. });
  336. binding.keyBoard.inputButtonCancel.setOnClickListener(v -> {
  337. Editable text = binding.delivererPhoneConfirm.getText();
  338. int start = binding.delivererPhoneConfirm.getSelectionStart();
  339. if (text.length() > 0) {
  340. if (start > 0) {
  341. text.delete(start - 1, start);
  342. }
  343. binding.delivererPhoneConfirm.setText(text, TextView.BufferType.EDITABLE);
  344. binding.delivererPhoneConfirm.setSelection(start - 1 < 0 ? text.length() : start - 1);
  345. }
  346. });
  347. // 长按删除
  348. binding.keyBoard.inputButtonCancel.setOnLongClickListener(v -> {
  349. binding.delivererPhoneConfirm.getText().clear();
  350. return false;
  351. });
  352. }
  353. });
  354. binding.mailNo.setOnFocusChangeListener((view1, hasFocus) -> {
  355. AtomicBoolean caseSmallFlag = new AtomicBoolean(true);
  356. binding.keyBoard.inputButton0.setOnClickListener(v -> {
  357. if(!hasFocus){
  358. return;
  359. }
  360. int length = binding.mailNo.getText().length();
  361. if (length >= 16) {
  362. ToastUtils.make(getContext(), "面单号最多不能超过16位! ");
  363. return;
  364. }
  365. int start = binding.mailNo.getSelectionStart();
  366. binding.mailNo.getText().insert(start, "0");
  367. });
  368. binding.keyBoard.inputButton1.setOnClickListener(v -> {
  369. if(!hasFocus){
  370. return;
  371. }
  372. int length = binding.mailNo.getText().length();
  373. if (length >= 16) {
  374. ToastUtils.make(getContext(), "面单号最多不能超过16位! ");
  375. return;
  376. }
  377. int start = binding.mailNo.getSelectionStart();
  378. binding.mailNo.getText().insert(start, "1");
  379. });
  380. binding.keyBoard.inputButton2.setOnClickListener(v -> {
  381. if(!hasFocus){
  382. return;
  383. }
  384. int length = binding.mailNo.getText().length();
  385. if (length >= 16) {
  386. ToastUtils.make(getContext(), "面单号最多不能超过16位! ");
  387. return;
  388. }
  389. int start = binding.mailNo.getSelectionStart();
  390. binding.mailNo.getText().insert(start, "2");
  391. });
  392. binding.keyBoard.inputButton3.setOnClickListener(v -> {
  393. if(!hasFocus){
  394. return;
  395. }
  396. int length = binding.mailNo.getText().length();
  397. if (length >= 16) {
  398. ToastUtils.make(getContext(), "面单号最多不能超过16位! ");
  399. return;
  400. }
  401. int start = binding.mailNo.getSelectionStart();
  402. binding.mailNo.getText().insert(start, "3");
  403. });
  404. binding.keyBoard.inputButton4.setOnClickListener(v -> {
  405. if(!hasFocus){
  406. return;
  407. }
  408. int length = binding.mailNo.getText().length();
  409. if (length >= 16) {
  410. ToastUtils.make(getContext(), "面单号最多不能超过16位! ");
  411. return;
  412. }
  413. int start = binding.mailNo.getSelectionStart();
  414. binding.mailNo.getText().insert(start, "4");
  415. });
  416. binding.keyBoard.inputButton5.setOnClickListener(v -> {
  417. if(!hasFocus){
  418. return;
  419. }
  420. int length = binding.mailNo.getText().length();
  421. if (length >= 16) {
  422. ToastUtils.make(getContext(), "面单号最多不能超过16位! ");
  423. return;
  424. }
  425. int start = binding.mailNo.getSelectionStart();
  426. binding.mailNo.getText().insert(start, "5");
  427. });
  428. binding.keyBoard.inputButton6.setOnClickListener(v -> {
  429. if(!hasFocus){
  430. return;
  431. }
  432. int length = binding.mailNo.getText().length();
  433. if (length >= 16) {
  434. ToastUtils.make(getContext(), "面单号最多不能超过16位! ");
  435. return;
  436. }
  437. int start = binding.mailNo.getSelectionStart();
  438. binding.mailNo.getText().insert(start, "6");
  439. });
  440. binding.keyBoard.inputButton7.setOnClickListener(v -> {
  441. if(!hasFocus){
  442. return;
  443. }
  444. int length = binding.mailNo.getText().length();
  445. if (length >= 16) {
  446. ToastUtils.make(getContext(), "面单号最多不能超过16位! ");
  447. return;
  448. }
  449. int start = binding.mailNo.getSelectionStart();
  450. binding.mailNo.getText().insert(start, "7");
  451. });
  452. binding.keyBoard.inputButton8.setOnClickListener(v -> {
  453. if(!hasFocus){
  454. return;
  455. }
  456. int length = binding.mailNo.getText().length();
  457. if (length >= 16) {
  458. ToastUtils.make(getContext(), "面单号最多不能超过16位! ");
  459. return;
  460. }
  461. int start = binding.mailNo.getSelectionStart();
  462. binding.mailNo.getText().insert(start, "8");
  463. });
  464. binding.keyBoard.inputButton9.setOnClickListener(v -> {
  465. if(!hasFocus){
  466. return;
  467. }
  468. int length = binding.mailNo.getText().length();
  469. if (length >= 16) {
  470. ToastUtils.make(getContext(), "面单号最多不能超过16位! ");
  471. return;
  472. }
  473. int start = binding.mailNo.getSelectionStart();
  474. binding.mailNo.getText().insert(start, "9");
  475. });
  476. // todo:绑定字母按键
  477. binding.keyBoard.inputButtonQ.setOnClickListener(v -> {
  478. if(!hasFocus){
  479. return;
  480. }
  481. int length = binding.mailNo.getText().length();
  482. if (length >= 16) {
  483. ToastUtils.make(getContext(), "面单号最多不能超过16位! ");
  484. return;
  485. }
  486. int start = binding.mailNo.getSelectionStart();
  487. binding.mailNo.getText().insert(start, caseSmallFlag.get() ? "Q" : "q");
  488. });
  489. binding.keyBoard.inputButtonW.setOnClickListener(v -> {
  490. if(!hasFocus){
  491. return;
  492. }
  493. int length = binding.mailNo.getText().length();
  494. if (length >= 16) {
  495. ToastUtils.make(getContext(), "面单号最多不能超过16位! ");
  496. return;
  497. }
  498. int start = binding.mailNo.getSelectionStart();
  499. binding.mailNo.getText().insert(start, caseSmallFlag.get() ? "W" : "w");
  500. });
  501. binding.keyBoard.inputButtonE.setOnClickListener(v -> {
  502. if(!hasFocus){
  503. return;
  504. }
  505. int length = binding.mailNo.getText().length();
  506. if (length >= 16) {
  507. ToastUtils.make(getContext(), "面单号最多不能超过16位! ");
  508. return;
  509. }
  510. int start = binding.mailNo.getSelectionStart();
  511. binding.mailNo.getText().insert(start, caseSmallFlag.get() ? "E" : "e");
  512. });
  513. binding.keyBoard.inputButtonR.setOnClickListener(v -> {
  514. if(!hasFocus){
  515. return;
  516. }
  517. int length = binding.mailNo.getText().length();
  518. if (length >= 16) {
  519. ToastUtils.make(getContext(), "面单号最多不能超过16位! ");
  520. return;
  521. }
  522. int start = binding.mailNo.getSelectionStart();
  523. binding.mailNo.getText().insert(start, caseSmallFlag.get() ? "R" : "r");
  524. });
  525. binding.keyBoard.inputButtonT.setOnClickListener(v -> {
  526. if(!hasFocus){
  527. return;
  528. }
  529. int length = binding.mailNo.getText().length();
  530. if (length >= 16) {
  531. ToastUtils.make(getContext(), "面单号最多不能超过16位! ");
  532. return;
  533. }
  534. int start = binding.mailNo.getSelectionStart();
  535. binding.mailNo.getText().insert(start, caseSmallFlag.get() ? "T" : "t");
  536. });
  537. binding.keyBoard.inputButtonY.setOnClickListener(v -> {
  538. if(!hasFocus){
  539. return;
  540. }
  541. int length = binding.mailNo.getText().length();
  542. if (length >= 16) {
  543. ToastUtils.make(getContext(), "面单号最多不能超过16位! ");
  544. return;
  545. }
  546. int start = binding.mailNo.getSelectionStart();
  547. binding.mailNo.getText().insert(start, caseSmallFlag.get() ? "Y" : "y");
  548. });
  549. binding.keyBoard.inputButtonU.setOnClickListener(v -> {
  550. if(!hasFocus){
  551. return;
  552. }
  553. int length = binding.mailNo.getText().length();
  554. if (length >= 16) {
  555. ToastUtils.make(getContext(), "面单号最多不能超过16位! ");
  556. return;
  557. }
  558. int start = binding.mailNo.getSelectionStart();
  559. binding.mailNo.getText().insert(start, caseSmallFlag.get() ? "U" : "u");
  560. });
  561. binding.keyBoard.inputButtonI.setOnClickListener(v -> {
  562. if(!hasFocus){
  563. return;
  564. }
  565. int length = binding.mailNo.getText().length();
  566. if (length >= 16) {
  567. ToastUtils.make(getContext(), "面单号最多不能超过16位! ");
  568. return;
  569. }
  570. int start = binding.mailNo.getSelectionStart();
  571. binding.mailNo.getText().insert(start, caseSmallFlag.get() ? "I" : "i");
  572. });
  573. binding.keyBoard.inputButtonO.setOnClickListener(v -> {
  574. if(!hasFocus){
  575. return;
  576. }
  577. int length = binding.mailNo.getText().length();
  578. if (length >= 16) {
  579. ToastUtils.make(getContext(), "面单号最多不能超过16位! ");
  580. return;
  581. }
  582. int start = binding.mailNo.getSelectionStart();
  583. binding.mailNo.getText().insert(start, caseSmallFlag.get() ? "O" : "o");
  584. });
  585. binding.keyBoard.inputButtonP.setOnClickListener(v -> {
  586. if(!hasFocus){
  587. return;
  588. }
  589. int length = binding.mailNo.getText().length();
  590. if (length >= 16) {
  591. ToastUtils.make(getContext(), "面单号最多不能超过16位! ");
  592. return;
  593. }
  594. int start = binding.mailNo.getSelectionStart();
  595. binding.mailNo.getText().insert(start, caseSmallFlag.get() ? "P" : "p");
  596. });
  597. binding.keyBoard.inputButtonA.setOnClickListener(v -> {
  598. if(!hasFocus){
  599. return;
  600. }
  601. int length = binding.mailNo.getText().length();
  602. if (length >= 16) {
  603. ToastUtils.make(getContext(), "面单号最多不能超过16位! ");
  604. return;
  605. }
  606. int start = binding.mailNo.getSelectionStart();
  607. binding.mailNo.getText().insert(start, caseSmallFlag.get() ? "A" : "a");
  608. });
  609. binding.keyBoard.inputButtonS.setOnClickListener(v -> {
  610. if(!hasFocus){
  611. return;
  612. }
  613. int length = binding.mailNo.getText().length();
  614. if (length >= 16) {
  615. ToastUtils.make(getContext(), "面单号最多不能超过16位! ");
  616. return;
  617. }
  618. int start = binding.mailNo.getSelectionStart();
  619. binding.mailNo.getText().insert(start, caseSmallFlag.get() ? "S" : "s");
  620. });
  621. binding.keyBoard.inputButtonD.setOnClickListener(v -> {
  622. if(!hasFocus){
  623. return;
  624. }
  625. int length = binding.mailNo.getText().length();
  626. if (length >= 16) {
  627. ToastUtils.make(getContext(), "面单号最多不能超过16位! ");
  628. return;
  629. }
  630. int start = binding.mailNo.getSelectionStart();
  631. binding.mailNo.getText().insert(start, caseSmallFlag.get() ? "D" : "d");
  632. });
  633. binding.keyBoard.inputButtonF.setOnClickListener(v -> {
  634. if(!hasFocus){
  635. return;
  636. }
  637. int length = binding.mailNo.getText().length();
  638. if (length >= 16) {
  639. ToastUtils.make(getContext(), "面单号最多不能超过16位! ");
  640. return;
  641. }
  642. int start = binding.mailNo.getSelectionStart();
  643. binding.mailNo.getText().insert(start, caseSmallFlag.get() ? "F" : "f");
  644. });
  645. binding.keyBoard.inputButtonG.setOnClickListener(v -> {
  646. if(!hasFocus){
  647. return;
  648. }
  649. int length = binding.mailNo.getText().length();
  650. if (length >= 16) {
  651. ToastUtils.make(getContext(), "面单号最多不能超过16位! ");
  652. return;
  653. }
  654. int start = binding.mailNo.getSelectionStart();
  655. binding.mailNo.getText().insert(start, caseSmallFlag.get() ? "G" : "g");
  656. });
  657. binding.keyBoard.inputButtonH.setOnClickListener(v -> {
  658. if(!hasFocus){
  659. return;
  660. }
  661. int length = binding.mailNo.getText().length();
  662. if (length >= 16) {
  663. ToastUtils.make(getContext(), "面单号最多不能超过16位! ");
  664. return;
  665. }
  666. int start = binding.mailNo.getSelectionStart();
  667. binding.mailNo.getText().insert(start, caseSmallFlag.get() ? "H" : "h");
  668. });
  669. binding.keyBoard.inputButtonJ.setOnClickListener(v -> {
  670. if(!hasFocus){
  671. return;
  672. }
  673. int length = binding.mailNo.getText().length();
  674. if (length >= 16) {
  675. ToastUtils.make(getContext(), "面单号最多不能超过16位! ");
  676. return;
  677. }
  678. int start = binding.mailNo.getSelectionStart();
  679. binding.mailNo.getText().insert(start, caseSmallFlag.get() ? "J" : "j");
  680. });
  681. binding.keyBoard.inputButtonK.setOnClickListener(v -> {
  682. if(!hasFocus){
  683. return;
  684. }
  685. int length = binding.mailNo.getText().length();
  686. if (length >= 16) {
  687. ToastUtils.make(getContext(), "面单号最多不能超过16位! ");
  688. return;
  689. }
  690. int start = binding.mailNo.getSelectionStart();
  691. binding.mailNo.getText().insert(start, caseSmallFlag.get() ? "K" : "k");
  692. });
  693. binding.keyBoard.inputButtonL.setOnClickListener(v -> {
  694. if(!hasFocus){
  695. return;
  696. }
  697. int length = binding.mailNo.getText().length();
  698. if (length >= 16) {
  699. ToastUtils.make(getContext(), "面单号最多不能超过16位! ");
  700. return;
  701. }
  702. int start = binding.mailNo.getSelectionStart();
  703. binding.mailNo.getText().insert(start, caseSmallFlag.get() ? "L" : "l");
  704. });
  705. binding.keyBoard.inputButtonZ.setOnClickListener(v -> {
  706. if(!hasFocus){
  707. return;
  708. }
  709. int length = binding.mailNo.getText().length();
  710. if (length >= 16) {
  711. ToastUtils.make(getContext(), "面单号最多不能超过16位! ");
  712. return;
  713. }
  714. int start = binding.mailNo.getSelectionStart();
  715. binding.mailNo.getText().insert(start, caseSmallFlag.get() ? "Z" : "z");
  716. });
  717. binding.keyBoard.inputButtonX.setOnClickListener(v -> {
  718. if(!hasFocus){
  719. return;
  720. }
  721. int length = binding.mailNo.getText().length();
  722. if (length >= 16) {
  723. ToastUtils.make(getContext(), "面单号最多不能超过16位!");
  724. return;
  725. }
  726. int start = binding.mailNo.getSelectionStart();
  727. binding.mailNo.getText().insert(start, caseSmallFlag.get() ? "X" : "x");
  728. });
  729. binding.keyBoard.inputButtonC.setOnClickListener(v -> {
  730. if(!hasFocus){
  731. return;
  732. }
  733. int length = binding.mailNo.getText().length();
  734. if (length >= 16) {
  735. ToastUtils.make(getContext(), "面单号最多不能超过16位! ");
  736. return;
  737. }
  738. int start = binding.mailNo.getSelectionStart();
  739. binding.mailNo.getText().insert(start, caseSmallFlag.get() ? "C" : "c");
  740. });
  741. binding.keyBoard.inputButtonV.setOnClickListener(v -> {
  742. if(!hasFocus){
  743. return;
  744. }
  745. int length = binding.mailNo.getText().length();
  746. if (length >= 16) {
  747. ToastUtils.make(getContext(), "面单号最多不能超过16位! ");
  748. return;
  749. }
  750. int start = binding.mailNo.getSelectionStart();
  751. binding.mailNo.getText().insert(start, caseSmallFlag.get() ? "V" : "v");
  752. });
  753. binding.keyBoard.inputButtonB.setOnClickListener(v -> {
  754. if(!hasFocus){
  755. return;
  756. }
  757. int length = binding.mailNo.getText().length();
  758. if (length >= 16) {
  759. ToastUtils.make(getContext(), "面单号最多不能超过16位! ");
  760. return;
  761. }
  762. int start = binding.mailNo.getSelectionStart();
  763. binding.mailNo.getText().insert(start, caseSmallFlag.get() ? "B" : "b");
  764. });
  765. binding.keyBoard.inputButtonN.setOnClickListener(v -> {
  766. if(!hasFocus){
  767. return;
  768. }
  769. int length = binding.mailNo.getText().length();
  770. if (length >= 16) {
  771. ToastUtils.make(getContext(), "面单号最多不能超过16位! ");
  772. return;
  773. }
  774. int start = binding.mailNo.getSelectionStart();
  775. binding.mailNo.getText().insert(start, caseSmallFlag.get() ? "N" : "n");
  776. });
  777. binding.keyBoard.inputButtonM.setOnClickListener(v -> {
  778. if(!hasFocus){
  779. return;
  780. }
  781. int length = binding.mailNo.getText().length();
  782. if (length >= 16) {
  783. ToastUtils.make(getContext(), "面单号最多不能超过16位! ");
  784. return;
  785. }
  786. int start = binding.mailNo.getSelectionStart();
  787. binding.mailNo.getText().insert(start, caseSmallFlag.get() ? "M" : "m");
  788. });
  789. // 符号
  790. binding.keyBoard.symbolButton1.setOnClickListener(v -> {
  791. if(!hasFocus){
  792. return;
  793. }
  794. int length = binding.mailNo.getText().length();
  795. if (length >= 16) {
  796. ToastUtils.make(getContext(), "面单号最多不能超过16位! ");
  797. return;
  798. }
  799. int start = binding.mailNo.getSelectionStart();
  800. binding.mailNo.getText().insert(start, "-");
  801. });
  802. binding.keyBoard.symbolButton2.setOnClickListener(v -> {
  803. if(!hasFocus){
  804. return;
  805. }
  806. int length = binding.mailNo.getText().length();
  807. if (length >= 16) {
  808. ToastUtils.make(getContext(), "面单号最多不能超过16位! ");
  809. return;
  810. }
  811. int start = binding.mailNo.getSelectionStart();
  812. binding.mailNo.getText().insert(start, "/");
  813. });
  814. binding.keyBoard.symbolButton3.setOnClickListener(v -> {
  815. if(!hasFocus){
  816. return;
  817. }
  818. int length = binding.mailNo.getText().length();
  819. if (length >= 16) {
  820. ToastUtils.make(getContext(), "面单号最多不能超过16位! ");
  821. return;
  822. }
  823. int start = binding.mailNo.getSelectionStart();
  824. binding.mailNo.getText().insert(start, ":");
  825. });
  826. binding.keyBoard.symbolButton4.setOnClickListener(v -> {
  827. if(!hasFocus){
  828. return;
  829. }
  830. int length = binding.mailNo.getText().length();
  831. if (length >= 16) {
  832. ToastUtils.make(getContext(), "面单号最多不能超过16位! ");
  833. return;
  834. }
  835. int start = binding.mailNo.getSelectionStart();
  836. binding.mailNo.getText().insert(start, "+");
  837. });
  838. binding.keyBoard.symbolButton5.setOnClickListener(v -> {
  839. if(!hasFocus){
  840. return;
  841. }
  842. int length = binding.mailNo.getText().length();
  843. if (length >= 16) {
  844. ToastUtils.make(getContext(), "面单号最多不能超过16位! ");
  845. return;
  846. }
  847. int start = binding.mailNo.getSelectionStart();
  848. binding.mailNo.getText().insert(start, "(");
  849. });
  850. binding.keyBoard.symbolButton6.setOnClickListener(v -> {
  851. if(!hasFocus){
  852. return;
  853. }
  854. int length = binding.mailNo.getText().length();
  855. if (length >= 16) {
  856. ToastUtils.make(getContext(), "面单号最多不能超过16位! ");
  857. return;
  858. }
  859. int start = binding.mailNo.getSelectionStart();
  860. binding.mailNo.getText().insert(start, ")");
  861. });
  862. binding.keyBoard.symbolButton7.setOnClickListener(v -> {
  863. if(!hasFocus){
  864. return;
  865. }
  866. int length = binding.mailNo.getText().length();
  867. if (length >= 16) {
  868. ToastUtils.make(getContext(), "面单号最多不能超过16位! ");
  869. return;
  870. }
  871. int start = binding.mailNo.getSelectionStart();
  872. binding.mailNo.getText().insert(start, "#");
  873. });
  874. binding.keyBoard.symbolButton8.setOnClickListener(v -> {
  875. if(!hasFocus){
  876. return;
  877. }
  878. int length = binding.mailNo.getText().length();
  879. if (length >= 16) {
  880. ToastUtils.make(getContext(), "面单号最多不能超过16位! ");
  881. return;
  882. }
  883. int start = binding.mailNo.getSelectionStart();
  884. binding.mailNo.getText().insert(start, "@");
  885. });
  886. binding.keyBoard.symbolButton9.setOnClickListener(v -> {
  887. if(!hasFocus){
  888. return;
  889. }
  890. int length = binding.mailNo.getText().length();
  891. if (length >= 16) {
  892. ToastUtils.make(getContext(), "面单号最多不能超过16位! ");
  893. return;
  894. }
  895. int start = binding.mailNo.getSelectionStart();
  896. binding.mailNo.getText().insert(start, ".");
  897. });
  898. binding.keyBoard.symbolButton10.setOnClickListener(v -> {
  899. if(!hasFocus){
  900. return;
  901. }
  902. int length = binding.mailNo.getText().length();
  903. if (length >= 16) {
  904. ToastUtils.make(getContext(), "?");
  905. return;
  906. }
  907. int start = binding.mailNo.getSelectionStart();
  908. binding.mailNo.getText().insert(start, "!");
  909. });
  910. // 大小写按键绑定 默认大写
  911. binding.keyBoard.inputButtonCaseSmall.setOnClickListener(v -> {
  912. if (caseSmallFlag.get()) {
  913. caseSmallFlag.set(false);
  914. } else {
  915. caseSmallFlag.set(true);
  916. }
  917. binding.keyBoard.inputButtonCaseSmall.setText(caseSmallFlag.get() ? "大写" : "小写");
  918. // 设置键盘字母大小写
  919. binding.keyBoard.inputButtonQ.setText(caseSmallFlag.get() ? "Q" : "q");
  920. binding.keyBoard.inputButtonW.setText(caseSmallFlag.get() ? "W" : "w");
  921. binding.keyBoard.inputButtonE.setText(caseSmallFlag.get() ? "E" : "e");
  922. binding.keyBoard.inputButtonR.setText(caseSmallFlag.get() ? "R" : "r");
  923. binding.keyBoard.inputButtonT.setText(caseSmallFlag.get() ? "T" : "t");
  924. binding.keyBoard.inputButtonY.setText(caseSmallFlag.get() ? "Y" : "y");
  925. binding.keyBoard.inputButtonU.setText(caseSmallFlag.get() ? "U" : "u");
  926. binding.keyBoard.inputButtonI.setText(caseSmallFlag.get() ? "I" : "i");
  927. binding.keyBoard.inputButtonO.setText(caseSmallFlag.get() ? "O" : "o");
  928. binding.keyBoard.inputButtonP.setText(caseSmallFlag.get() ? "P" : "p");
  929. binding.keyBoard.inputButtonA.setText(caseSmallFlag.get() ? "A" : "a");
  930. binding.keyBoard.inputButtonS.setText(caseSmallFlag.get() ? "S" : "s");
  931. binding.keyBoard.inputButtonD.setText(caseSmallFlag.get() ? "D" : "d");
  932. binding.keyBoard.inputButtonF.setText(caseSmallFlag.get() ? "F" : "f");
  933. binding.keyBoard.inputButtonG.setText(caseSmallFlag.get() ? "G" : "g");
  934. binding.keyBoard.inputButtonH.setText(caseSmallFlag.get() ? "H" : "h");
  935. binding.keyBoard.inputButtonJ.setText(caseSmallFlag.get() ? "J" : "j");
  936. binding.keyBoard.inputButtonK.setText(caseSmallFlag.get() ? "K" : "k");
  937. binding.keyBoard.inputButtonL.setText(caseSmallFlag.get() ? "L" : "l");
  938. binding.keyBoard.inputButtonZ.setText(caseSmallFlag.get() ? "Z" : "z");
  939. binding.keyBoard.inputButtonX.setText(caseSmallFlag.get() ? "X" : "x");
  940. binding.keyBoard.inputButtonC.setText(caseSmallFlag.get() ? "C" : "c");
  941. binding.keyBoard.inputButtonV.setText(caseSmallFlag.get() ? "V" : "v");
  942. binding.keyBoard.inputButtonB.setText(caseSmallFlag.get() ? "B" : "b");
  943. binding.keyBoard.inputButtonN.setText(caseSmallFlag.get() ? "N" : "n");
  944. binding.keyBoard.inputButtonM.setText(caseSmallFlag.get() ? "M" : "m");
  945. });
  946. binding.keyBoard.inputButtonCancel.setOnClickListener(v -> {
  947. Editable text = binding.mailNo.getText();
  948. int start = binding.mailNo.getSelectionStart();
  949. if (text.length() > 0) {
  950. if (start > 0) {
  951. text.delete(start - 1, start);
  952. }
  953. binding.mailNo.setText(text, TextView.BufferType.EDITABLE);
  954. binding.mailNo.setSelection(start - 1 < 0 ? text.length() : start - 1);
  955. }
  956. });
  957. // 长按删除
  958. binding.keyBoard.inputButtonCancel.setOnLongClickListener(v -> {
  959. binding.mailNo.getText().clear();
  960. return false;
  961. });
  962. });
  963. binding.returnBtn.setOnClickListener(view1 -> {
  964. if (null != timer) {
  965. timer.cancel();
  966. }
  967. NavUtils.navigate(this, R.id.action_InputInfoKeyBoardFragment_to_chooseCabinetFragment);
  968. });
  969. // 默认选中运单号输入框
  970. if (!StringUtils.isNullOrEmpty(binding.mailNo.getText().toString())) {
  971. binding.delivererPhoneConfirm.requestFocus();
  972. } else {
  973. binding.mailNo.requestFocus();
  974. }
  975. }
  976. private void extracted(AtomicBoolean caseSmallFlag) {
  977. }
  978. public PreparedOrderResponseVo getData() {
  979. return data;
  980. }
  981. @Override
  982. public void onDestroy() {
  983. if (timer != null) {
  984. timer.cancel();
  985. timer = null;
  986. }
  987. super.onDestroy();
  988. binding = null;
  989. Log.i(TAG, TAG + "被销毁。。。");
  990. }
  991. }