package com.emato.ich.fragment; import android.os.Bundle; import android.os.CountDownTimer; import android.text.Editable; import android.text.InputType; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.fragment.app.Fragment; import com.cherry.sdk.controller.utils.ScanGunKeyEventHelper; import com.emato.ich.MainActivity; import com.emato.ich.R; import com.emato.ich.api.ICSPClient; import com.emato.ich.contant.ICSPConstant; import com.emato.ich.contant.ScanGunConstant; import com.emato.ich.databinding.FragmentPaymentBinding; import com.emato.ich.databinding.FragmentPaymentBinding; import com.emato.ich.entity.vo.PreparedOrderResponseVo; import com.emato.ich.entity.vo.PreparedOrderVo; import com.emato.ich.entity.vo.ResponseData; import com.emato.ich.local.LocalStorage; import com.emato.ich.utils.BaseUtils; import com.emato.ich.utils.JacksonUtils; import com.emato.ich.utils.Log; import com.emato.ich.utils.LoggingUtils; import com.emato.ich.utils.NavUtils; import com.emato.ich.utils.StringUtils; import com.emato.ich.utils.TimeOutUtils; import com.emato.ich.utils.ToastUtils; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; import org.jetbrains.annotations.NotNull; import org.json.JSONObject; import java.io.IOException; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicInteger; import java.util.regex.Matcher; import java.util.regex.Pattern; import okhttp3.Call; import okhttp3.Callback; import okhttp3.Response; /** * 扫描付款码支付 */ public class PaymentFragment extends Fragment { private static final String TAG = PaymentFragment.class.getName(); private FragmentPaymentBinding binding; private PreparedOrderResponseVo data; private final AtomicInteger paymentNoLock = new AtomicInteger(1); private final AtomicInteger submitLock = new AtomicInteger(1); private CountDownTimer timer; private long start; @Nullable @org.jetbrains.annotations.Nullable @Override public View onCreateView(@NonNull @NotNull LayoutInflater inflater, @Nullable @org.jetbrains.annotations.Nullable ViewGroup container, @Nullable @org.jetbrains.annotations.Nullable Bundle savedInstanceState) { start = System.currentTimeMillis(); binding = FragmentPaymentBinding.inflate(inflater, container, false); return binding.getRoot(); } public void onViewCreated(@NonNull View view, Bundle savedInstanceState) { long end = System.currentTimeMillis(); Log.i(TAG, TAG + "页面渲染速度为" + (end - start) + "ms。"); BaseUtils.disableEditText(binding.paymentNo); try { MainActivity activity = (MainActivity) getActivity(); timer = TimeOutUtils.timeout(activity, PaymentFragment.this, binding.timeout, 90); timer.start(); String payAmount = activity.getBundleMap().get(SendKeyBoardFragment.class.getName()).getString("payAmount"); binding.paymentMoney.setText(payAmount); } catch (Exception e) { Log.e(TAG, "onViewCreated: 倒计时出现异常! ", e); LoggingUtils.sendErrorLog("业务异常: 输入投递信息页面倒计时出现异常! ", e); } Bundle arguments = null; String sectionType = null; try { MainActivity activity = (MainActivity) getActivity(); binding.paymentNo.setInputType(InputType.TYPE_NULL); // 扫描枪监听 扫描付款码 activity.scanGunKeyEventHelper = new ScanGunKeyEventHelper(s -> { // 扫码成功回调 Log.d(TAG, "onScanSuccess: " + s); if (!StringUtils.isNullOrEmpty(s)) { for (String pattern : ScanGunConstant.getPatterns()) { Matcher matcher = Pattern.compile(pattern).matcher(s); if (!matcher.matches()) { ToastUtils.make(getContext(), "请将条形码置于扫码枪前! "); return; } } } if (paymentNoLock.get() == 1) { // 禁用软件盘 Editable text = binding.paymentNo.getText(); text.clear(); binding.paymentNo.setText(s); paymentNoLock.incrementAndGet(); // TODO 预定义,实际参数可能不一致 oms获取用户手机号 自动填充 ICSPClient.delivererPay(LocalStorage.getInstance().getSession().getToken(), s, new Callback() { @Override public void onFailure(@NotNull Call call, @NotNull IOException e) { // 请求失败 Log.e(TAG, "onFailure: 投递员付款! 网络异常! ", e); LoggingUtils.sendErrorLog("业务异常: 投递员付款! 网络异常! ", e); ToastUtils.make(getContext(), "服务器异常! 请联系管理员!"); paymentNoLock.set(1); } @Override public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException { getActivity().runOnUiThread(() -> { String parseResponse = ICSPClient.isSuccessfulAndParseResponse(response); if (!StringUtils.isNullOrEmpty(parseResponse)) { try { ResponseData responseData = JacksonUtils.objectmapper.readValue(parseResponse, ResponseData.class); if (null != responseData && ICSPConstant.OK.equals(responseData.getCode())) { NavUtils.navigate(PaymentFragment.this, R.id.action_paymentFragment_to_InputInfoKeyBoardFragment); } else { ToastUtils.make(getContext(), responseData.getMsg()); } } catch (JsonProcessingException e) { Log.e(TAG, "onResponse: 服务器响应错误! 自动获取用户手机号失败! ", e); ToastUtils.make(getContext(), "网络异常! 请手动输入手机号! "); LoggingUtils.sendErrorLog("业务异常: 服务器响应错误! 自动获取用户手机号失败! ", e); } catch (RuntimeException e) { Log.e(TAG, "onResponse: 获取用户手机号未知错误! ", e); ToastUtils.make(getContext(), "未查询到手机号! 请手动输入! "); LoggingUtils.sendErrorLog("业务异常: 获取用户手机号未知错误! ", e); } catch (Exception e) { Log.e(TAG, "onResponse: 获取用户手机号未知错误! ", e); ToastUtils.make(getContext(), "未查询到手机号! 请手动输入! "); LoggingUtils.sendErrorLog("业务异常: 获取用户手机号未知错误! ", e); } } else { ToastUtils.make(getContext(), "服务器异常!请稍后重试!"); } paymentNoLock.set(1); }); } }); } }); binding.keyBoard.inputButtonConfirm.setOnClickListener(v -> { String s = binding.paymentNo.getText().toString(); if (paymentNoLock.get() == 1) { // 禁用软件盘 Editable text = binding.paymentNo.getText(); text.clear(); binding.paymentNo.setText(s); paymentNoLock.incrementAndGet(); // TODO 预定义,实际参数可能不一致 oms获取用户手机号 自动填充 ICSPClient.delivererPay(LocalStorage.getInstance().getSession().getToken(), s, new Callback() { @Override public void onFailure(@NotNull Call call, @NotNull IOException e) { // 请求失败 Log.e(TAG, "onFailure: 投递员付款! 网络异常! ", e); LoggingUtils.sendErrorLog("业务异常: 投递员付款! 网络异常! ", e); ToastUtils.make(getContext(), "服务器异常! 请联系管理员!"); paymentNoLock.set(1); } @Override public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException { getActivity().runOnUiThread(() -> { String parseResponse = ICSPClient.isSuccessfulAndParseResponse(response); if (!StringUtils.isNullOrEmpty(parseResponse)) { try { ResponseData responseData = JacksonUtils.objectmapper.readValue(parseResponse, ResponseData.class); if (null != responseData && ICSPConstant.OK.equals(responseData.getCode())) { NavUtils.navigate(PaymentFragment.this, R.id.action_paymentFragment_to_InputInfoKeyBoardFragment); } else { ToastUtils.make(getContext(), responseData.getMsg()); } } catch (JsonProcessingException e) { Log.e(TAG, "onResponse: 服务器响应错误! 自动获取用户手机号失败! ", e); ToastUtils.make(getContext(), "网络异常! 请手动输入手机号! "); LoggingUtils.sendErrorLog("业务异常: 服务器响应错误! 自动获取用户手机号失败! ", e); } catch (RuntimeException e) { Log.e(TAG, "onResponse: 获取用户手机号未知错误! ", e); ToastUtils.make(getContext(), "未查询到手机号! 请手动输入! "); LoggingUtils.sendErrorLog("业务异常: 获取用户手机号未知错误! ", e); } catch (Exception e) { Log.e(TAG, "onResponse: 获取用户手机号未知错误! ", e); ToastUtils.make(getContext(), "未查询到手机号! 请手动输入! "); LoggingUtils.sendErrorLog("业务异常: 获取用户手机号未知错误! ", e); } } else { ToastUtils.make(getContext(), "服务器异常!请稍后重试!"); } paymentNoLock.set(1); }); } }); } }); } catch (RuntimeException e) { Log.e(TAG, "onViewCreated: InputInfoFragment页面获取ChooseCabinetFragment传值错误! ", e); LoggingUtils.sendErrorLog("业务异常: InputInfoFragment页面获取ChooseCabinetFragment传值错误! ", e); } // TODO 离线逻辑, 暂时不做 // 数字输入 5 手机号 4 付款码 binding.paymentNo.setOnFocusChangeListener((view1, hasFocus) -> { AtomicBoolean caseSmallFlag = new AtomicBoolean(true); binding.keyBoard.inputButton0.setOnClickListener(v -> { if(!hasFocus){ return; } int length = binding.paymentNo.getText().length(); if (length >= 32) { ToastUtils.make(getContext(), "付款码最多不能超过32位! "); return; } int start = binding.paymentNo.getSelectionStart(); binding.paymentNo.getText().insert(start, "0"); }); binding.keyBoard.inputButton1.setOnClickListener(v -> { if(!hasFocus){ return; } int length = binding.paymentNo.getText().length(); if (length >= 32) { ToastUtils.make(getContext(), "付款码最多不能超过32位! "); return; } int start = binding.paymentNo.getSelectionStart(); binding.paymentNo.getText().insert(start, "1"); }); binding.keyBoard.inputButton2.setOnClickListener(v -> { if(!hasFocus){ return; } int length = binding.paymentNo.getText().length(); if (length >= 32) { ToastUtils.make(getContext(), "付款码最多不能超过32位! "); return; } int start = binding.paymentNo.getSelectionStart(); binding.paymentNo.getText().insert(start, "2"); }); binding.keyBoard.inputButton3.setOnClickListener(v -> { if(!hasFocus){ return; } int length = binding.paymentNo.getText().length(); if (length >= 32) { ToastUtils.make(getContext(), "付款码最多不能超过32位! "); return; } int start = binding.paymentNo.getSelectionStart(); binding.paymentNo.getText().insert(start, "3"); }); binding.keyBoard.inputButton4.setOnClickListener(v -> { if(!hasFocus){ return; } int length = binding.paymentNo.getText().length(); if (length >= 32) { ToastUtils.make(getContext(), "付款码最多不能超过32位! "); return; } int start = binding.paymentNo.getSelectionStart(); binding.paymentNo.getText().insert(start, "4"); }); binding.keyBoard.inputButton5.setOnClickListener(v -> { if(!hasFocus){ return; } int length = binding.paymentNo.getText().length(); if (length >= 32) { ToastUtils.make(getContext(), "付款码最多不能超过32位! "); return; } int start = binding.paymentNo.getSelectionStart(); binding.paymentNo.getText().insert(start, "5"); }); binding.keyBoard.inputButton6.setOnClickListener(v -> { if(!hasFocus){ return; } int length = binding.paymentNo.getText().length(); if (length >= 32) { ToastUtils.make(getContext(), "付款码最多不能超过32位! "); return; } int start = binding.paymentNo.getSelectionStart(); binding.paymentNo.getText().insert(start, "6"); }); binding.keyBoard.inputButton7.setOnClickListener(v -> { if(!hasFocus){ return; } int length = binding.paymentNo.getText().length(); if (length >= 32) { ToastUtils.make(getContext(), "付款码最多不能超过32位! "); return; } int start = binding.paymentNo.getSelectionStart(); binding.paymentNo.getText().insert(start, "7"); }); binding.keyBoard.inputButton8.setOnClickListener(v -> { if(!hasFocus){ return; } int length = binding.paymentNo.getText().length(); if (length >= 32) { ToastUtils.make(getContext(), "付款码最多不能超过32位! "); return; } int start = binding.paymentNo.getSelectionStart(); binding.paymentNo.getText().insert(start, "8"); }); binding.keyBoard.inputButton9.setOnClickListener(v -> { if(!hasFocus){ return; } int length = binding.paymentNo.getText().length(); if (length >= 32) { ToastUtils.make(getContext(), "付款码最多不能超过32位! "); return; } int start = binding.paymentNo.getSelectionStart(); binding.paymentNo.getText().insert(start, "9"); }); // todo:绑定字母按键 binding.keyBoard.inputButtonQ.setOnClickListener(v -> { if(!hasFocus){ return; } int length = binding.paymentNo.getText().length(); if (length >= 32) { ToastUtils.make(getContext(), "付款码最多不能超过32位! "); return; } int start = binding.paymentNo.getSelectionStart(); binding.paymentNo.getText().insert(start, caseSmallFlag.get() ? "Q" : "q"); }); binding.keyBoard.inputButtonW.setOnClickListener(v -> { if(!hasFocus){ return; } int length = binding.paymentNo.getText().length(); if (length >= 32) { ToastUtils.make(getContext(), "付款码最多不能超过32位! "); return; } int start = binding.paymentNo.getSelectionStart(); binding.paymentNo.getText().insert(start, caseSmallFlag.get() ? "W" : "w"); }); binding.keyBoard.inputButtonE.setOnClickListener(v -> { if(!hasFocus){ return; } int length = binding.paymentNo.getText().length(); if (length >= 32) { ToastUtils.make(getContext(), "付款码最多不能超过32位! "); return; } int start = binding.paymentNo.getSelectionStart(); binding.paymentNo.getText().insert(start, caseSmallFlag.get() ? "E" : "e"); }); binding.keyBoard.inputButtonR.setOnClickListener(v -> { if(!hasFocus){ return; } int length = binding.paymentNo.getText().length(); if (length >= 32) { ToastUtils.make(getContext(), "付款码最多不能超过32位! "); return; } int start = binding.paymentNo.getSelectionStart(); binding.paymentNo.getText().insert(start, caseSmallFlag.get() ? "R" : "r"); }); binding.keyBoard.inputButtonT.setOnClickListener(v -> { if(!hasFocus){ return; } int length = binding.paymentNo.getText().length(); if (length >= 32) { ToastUtils.make(getContext(), "付款码最多不能超过32位! "); return; } int start = binding.paymentNo.getSelectionStart(); binding.paymentNo.getText().insert(start, caseSmallFlag.get() ? "T" : "t"); }); binding.keyBoard.inputButtonY.setOnClickListener(v -> { if(!hasFocus){ return; } int length = binding.paymentNo.getText().length(); if (length >= 32) { ToastUtils.make(getContext(), "付款码最多不能超过32位! "); return; } int start = binding.paymentNo.getSelectionStart(); binding.paymentNo.getText().insert(start, caseSmallFlag.get() ? "Y" : "y"); }); binding.keyBoard.inputButtonU.setOnClickListener(v -> { if(!hasFocus){ return; } int length = binding.paymentNo.getText().length(); if (length >= 32) { ToastUtils.make(getContext(), "付款码最多不能超过32位! "); return; } int start = binding.paymentNo.getSelectionStart(); binding.paymentNo.getText().insert(start, caseSmallFlag.get() ? "U" : "u"); }); binding.keyBoard.inputButtonI.setOnClickListener(v -> { if(!hasFocus){ return; } int length = binding.paymentNo.getText().length(); if (length >= 32) { ToastUtils.make(getContext(), "付款码最多不能超过32位! "); return; } int start = binding.paymentNo.getSelectionStart(); binding.paymentNo.getText().insert(start, caseSmallFlag.get() ? "I" : "i"); }); binding.keyBoard.inputButtonO.setOnClickListener(v -> { if(!hasFocus){ return; } int length = binding.paymentNo.getText().length(); if (length >= 32) { ToastUtils.make(getContext(), "付款码最多不能超过32位! "); return; } int start = binding.paymentNo.getSelectionStart(); binding.paymentNo.getText().insert(start, caseSmallFlag.get() ? "O" : "o"); }); binding.keyBoard.inputButtonP.setOnClickListener(v -> { if(!hasFocus){ return; } int length = binding.paymentNo.getText().length(); if (length >= 32) { ToastUtils.make(getContext(), "付款码最多不能超过32位! "); return; } int start = binding.paymentNo.getSelectionStart(); binding.paymentNo.getText().insert(start, caseSmallFlag.get() ? "P" : "p"); }); binding.keyBoard.inputButtonA.setOnClickListener(v -> { if(!hasFocus){ return; } int length = binding.paymentNo.getText().length(); if (length >= 32) { ToastUtils.make(getContext(), "付款码最多不能超过32位! "); return; } int start = binding.paymentNo.getSelectionStart(); binding.paymentNo.getText().insert(start, caseSmallFlag.get() ? "A" : "a"); }); binding.keyBoard.inputButtonS.setOnClickListener(v -> { if(!hasFocus){ return; } int length = binding.paymentNo.getText().length(); if (length >= 32) { ToastUtils.make(getContext(), "付款码最多不能超过32位! "); return; } int start = binding.paymentNo.getSelectionStart(); binding.paymentNo.getText().insert(start, caseSmallFlag.get() ? "S" : "s"); }); binding.keyBoard.inputButtonD.setOnClickListener(v -> { if(!hasFocus){ return; } int length = binding.paymentNo.getText().length(); if (length >= 32) { ToastUtils.make(getContext(), "付款码最多不能超过32位! "); return; } int start = binding.paymentNo.getSelectionStart(); binding.paymentNo.getText().insert(start, caseSmallFlag.get() ? "D" : "d"); }); binding.keyBoard.inputButtonF.setOnClickListener(v -> { if(!hasFocus){ return; } int length = binding.paymentNo.getText().length(); if (length >= 32) { ToastUtils.make(getContext(), "付款码最多不能超过32位! "); return; } int start = binding.paymentNo.getSelectionStart(); binding.paymentNo.getText().insert(start, caseSmallFlag.get() ? "F" : "f"); }); binding.keyBoard.inputButtonG.setOnClickListener(v -> { if(!hasFocus){ return; } int length = binding.paymentNo.getText().length(); if (length >= 32) { ToastUtils.make(getContext(), "付款码最多不能超过32位! "); return; } int start = binding.paymentNo.getSelectionStart(); binding.paymentNo.getText().insert(start, caseSmallFlag.get() ? "G" : "g"); }); binding.keyBoard.inputButtonH.setOnClickListener(v -> { if(!hasFocus){ return; } int length = binding.paymentNo.getText().length(); if (length >= 32) { ToastUtils.make(getContext(), "付款码最多不能超过32位! "); return; } int start = binding.paymentNo.getSelectionStart(); binding.paymentNo.getText().insert(start, caseSmallFlag.get() ? "H" : "h"); }); binding.keyBoard.inputButtonJ.setOnClickListener(v -> { if(!hasFocus){ return; } int length = binding.paymentNo.getText().length(); if (length >= 32) { ToastUtils.make(getContext(), "付款码最多不能超过32位! "); return; } int start = binding.paymentNo.getSelectionStart(); binding.paymentNo.getText().insert(start, caseSmallFlag.get() ? "J" : "j"); }); binding.keyBoard.inputButtonK.setOnClickListener(v -> { if(!hasFocus){ return; } int length = binding.paymentNo.getText().length(); if (length >= 32) { ToastUtils.make(getContext(), "付款码最多不能超过32位! "); return; } int start = binding.paymentNo.getSelectionStart(); binding.paymentNo.getText().insert(start, caseSmallFlag.get() ? "K" : "k"); }); binding.keyBoard.inputButtonL.setOnClickListener(v -> { if(!hasFocus){ return; } int length = binding.paymentNo.getText().length(); if (length >= 32) { ToastUtils.make(getContext(), "付款码最多不能超过32位! "); return; } int start = binding.paymentNo.getSelectionStart(); binding.paymentNo.getText().insert(start, caseSmallFlag.get() ? "L" : "l"); }); binding.keyBoard.inputButtonZ.setOnClickListener(v -> { if(!hasFocus){ return; } int length = binding.paymentNo.getText().length(); if (length >= 32) { ToastUtils.make(getContext(), "付款码最多不能超过32位! "); return; } int start = binding.paymentNo.getSelectionStart(); binding.paymentNo.getText().insert(start, caseSmallFlag.get() ? "Z" : "z"); }); binding.keyBoard.inputButtonX.setOnClickListener(v -> { if(!hasFocus){ return; } int length = binding.paymentNo.getText().length(); if (length >= 32) { ToastUtils.make(getContext(), "付款码最多不能超过32位!"); return; } int start = binding.paymentNo.getSelectionStart(); binding.paymentNo.getText().insert(start, caseSmallFlag.get() ? "X" : "x"); }); binding.keyBoard.inputButtonC.setOnClickListener(v -> { if(!hasFocus){ return; } int length = binding.paymentNo.getText().length(); if (length >= 32) { ToastUtils.make(getContext(), "付款码最多不能超过32位! "); return; } int start = binding.paymentNo.getSelectionStart(); binding.paymentNo.getText().insert(start, caseSmallFlag.get() ? "C" : "c"); }); binding.keyBoard.inputButtonV.setOnClickListener(v -> { if(!hasFocus){ return; } int length = binding.paymentNo.getText().length(); if (length >= 32) { ToastUtils.make(getContext(), "付款码最多不能超过32位! "); return; } int start = binding.paymentNo.getSelectionStart(); binding.paymentNo.getText().insert(start, caseSmallFlag.get() ? "V" : "v"); }); binding.keyBoard.inputButtonB.setOnClickListener(v -> { if(!hasFocus){ return; } int length = binding.paymentNo.getText().length(); if (length >= 32) { ToastUtils.make(getContext(), "付款码最多不能超过32位! "); return; } int start = binding.paymentNo.getSelectionStart(); binding.paymentNo.getText().insert(start, caseSmallFlag.get() ? "B" : "b"); }); binding.keyBoard.inputButtonN.setOnClickListener(v -> { if(!hasFocus){ return; } int length = binding.paymentNo.getText().length(); if (length >= 32) { ToastUtils.make(getContext(), "付款码最多不能超过32位! "); return; } int start = binding.paymentNo.getSelectionStart(); binding.paymentNo.getText().insert(start, caseSmallFlag.get() ? "N" : "n"); }); binding.keyBoard.inputButtonM.setOnClickListener(v -> { if(!hasFocus){ return; } int length = binding.paymentNo.getText().length(); if (length >= 32) { ToastUtils.make(getContext(), "付款码最多不能超过32位! "); return; } int start = binding.paymentNo.getSelectionStart(); binding.paymentNo.getText().insert(start, caseSmallFlag.get() ? "M" : "m"); }); // 符号 binding.keyBoard.symbolButton1.setOnClickListener(v -> { if(!hasFocus){ return; } int length = binding.paymentNo.getText().length(); if (length >= 32) { ToastUtils.make(getContext(), "付款码最多不能超过32位! "); return; } int start = binding.paymentNo.getSelectionStart(); binding.paymentNo.getText().insert(start, "-"); }); binding.keyBoard.symbolButton2.setOnClickListener(v -> { if(!hasFocus){ return; } int length = binding.paymentNo.getText().length(); if (length >= 32) { ToastUtils.make(getContext(), "付款码最多不能超过32位! "); return; } int start = binding.paymentNo.getSelectionStart(); binding.paymentNo.getText().insert(start, "/"); }); binding.keyBoard.symbolButton3.setOnClickListener(v -> { if(!hasFocus){ return; } int length = binding.paymentNo.getText().length(); if (length >= 32) { ToastUtils.make(getContext(), "付款码最多不能超过32位! "); return; } int start = binding.paymentNo.getSelectionStart(); binding.paymentNo.getText().insert(start, ":"); }); binding.keyBoard.symbolButton4.setOnClickListener(v -> { if(!hasFocus){ return; } int length = binding.paymentNo.getText().length(); if (length >= 32) { ToastUtils.make(getContext(), "付款码最多不能超过32位! "); return; } int start = binding.paymentNo.getSelectionStart(); binding.paymentNo.getText().insert(start, "+"); }); binding.keyBoard.symbolButton5.setOnClickListener(v -> { if(!hasFocus){ return; } int length = binding.paymentNo.getText().length(); if (length >= 32) { ToastUtils.make(getContext(), "付款码最多不能超过32位! "); return; } int start = binding.paymentNo.getSelectionStart(); binding.paymentNo.getText().insert(start, "("); }); binding.keyBoard.symbolButton6.setOnClickListener(v -> { if(!hasFocus){ return; } int length = binding.paymentNo.getText().length(); if (length >= 32) { ToastUtils.make(getContext(), "付款码最多不能超过32位! "); return; } int start = binding.paymentNo.getSelectionStart(); binding.paymentNo.getText().insert(start, ")"); }); binding.keyBoard.symbolButton7.setOnClickListener(v -> { if(!hasFocus){ return; } int length = binding.paymentNo.getText().length(); if (length >= 32) { ToastUtils.make(getContext(), "付款码最多不能超过32位! "); return; } int start = binding.paymentNo.getSelectionStart(); binding.paymentNo.getText().insert(start, "#"); }); binding.keyBoard.symbolButton8.setOnClickListener(v -> { if(!hasFocus){ return; } int length = binding.paymentNo.getText().length(); if (length >= 32) { ToastUtils.make(getContext(), "付款码最多不能超过32位! "); return; } int start = binding.paymentNo.getSelectionStart(); binding.paymentNo.getText().insert(start, "@"); }); binding.keyBoard.symbolButton9.setOnClickListener(v -> { if(!hasFocus){ return; } int length = binding.paymentNo.getText().length(); if (length >= 32) { ToastUtils.make(getContext(), "付款码最多不能超过32位! "); return; } int start = binding.paymentNo.getSelectionStart(); binding.paymentNo.getText().insert(start, "."); }); binding.keyBoard.symbolButton10.setOnClickListener(v -> { if(!hasFocus){ return; } int length = binding.paymentNo.getText().length(); if (length >= 32) { ToastUtils.make(getContext(), "?"); return; } int start = binding.paymentNo.getSelectionStart(); binding.paymentNo.getText().insert(start, "!"); }); // 大小写按键绑定 默认大写 binding.keyBoard.inputButtonCaseSmall.setOnClickListener(v -> { if (caseSmallFlag.get()) { caseSmallFlag.set(false); } else { caseSmallFlag.set(true); } binding.keyBoard.inputButtonCaseSmall.setText(caseSmallFlag.get() ? "大写" : "小写"); // 设置键盘字母大小写 binding.keyBoard.inputButtonQ.setText(caseSmallFlag.get() ? "Q" : "q"); binding.keyBoard.inputButtonW.setText(caseSmallFlag.get() ? "W" : "w"); binding.keyBoard.inputButtonE.setText(caseSmallFlag.get() ? "E" : "e"); binding.keyBoard.inputButtonR.setText(caseSmallFlag.get() ? "R" : "r"); binding.keyBoard.inputButtonT.setText(caseSmallFlag.get() ? "T" : "t"); binding.keyBoard.inputButtonY.setText(caseSmallFlag.get() ? "Y" : "y"); binding.keyBoard.inputButtonU.setText(caseSmallFlag.get() ? "U" : "u"); binding.keyBoard.inputButtonI.setText(caseSmallFlag.get() ? "I" : "i"); binding.keyBoard.inputButtonO.setText(caseSmallFlag.get() ? "O" : "o"); binding.keyBoard.inputButtonP.setText(caseSmallFlag.get() ? "P" : "p"); binding.keyBoard.inputButtonA.setText(caseSmallFlag.get() ? "A" : "a"); binding.keyBoard.inputButtonS.setText(caseSmallFlag.get() ? "S" : "s"); binding.keyBoard.inputButtonD.setText(caseSmallFlag.get() ? "D" : "d"); binding.keyBoard.inputButtonF.setText(caseSmallFlag.get() ? "F" : "f"); binding.keyBoard.inputButtonG.setText(caseSmallFlag.get() ? "G" : "g"); binding.keyBoard.inputButtonH.setText(caseSmallFlag.get() ? "H" : "h"); binding.keyBoard.inputButtonJ.setText(caseSmallFlag.get() ? "J" : "j"); binding.keyBoard.inputButtonK.setText(caseSmallFlag.get() ? "K" : "k"); binding.keyBoard.inputButtonL.setText(caseSmallFlag.get() ? "L" : "l"); binding.keyBoard.inputButtonZ.setText(caseSmallFlag.get() ? "Z" : "z"); binding.keyBoard.inputButtonX.setText(caseSmallFlag.get() ? "X" : "x"); binding.keyBoard.inputButtonC.setText(caseSmallFlag.get() ? "C" : "c"); binding.keyBoard.inputButtonV.setText(caseSmallFlag.get() ? "V" : "v"); binding.keyBoard.inputButtonB.setText(caseSmallFlag.get() ? "B" : "b"); binding.keyBoard.inputButtonN.setText(caseSmallFlag.get() ? "N" : "n"); binding.keyBoard.inputButtonM.setText(caseSmallFlag.get() ? "M" : "m"); }); binding.keyBoard.inputButtonCancel.setOnClickListener(v -> { Editable text = binding.paymentNo.getText(); int start = binding.paymentNo.getSelectionStart(); if (text.length() > 0) { if (start > 0) { text.delete(start - 1, start); } binding.paymentNo.setText(text, TextView.BufferType.EDITABLE); binding.paymentNo.setSelection(start - 1 < 0 ? text.length() : start - 1); } }); // 长按删除 binding.keyBoard.inputButtonCancel.setOnLongClickListener(v -> { binding.paymentNo.getText().clear(); return false; }); }); binding.returnBtn.setOnClickListener(view1 -> { if (null != timer) { timer.cancel(); } NavUtils.navigate(this, R.id.action_paymentFragment_to_mainFragment); }); // 默认选中运单号输入框 binding.paymentNo.requestFocus(); } private void extracted(AtomicBoolean caseSmallFlag) { } public PreparedOrderResponseVo getData() { return data; } @Override public void onDestroy() { if (timer != null) { timer.cancel(); timer = null; } super.onDestroy(); binding = null; Log.i(TAG, TAG + "被销毁。。。"); } }