InputInfoKeyBoardFragment.java 49 KB

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