package com.emato.ich.fragment; import android.os.Bundle; import android.text.Editable; import android.util.Log; 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 androidx.navigation.fragment.NavHostFragment; import com.emato.ich.MainActivity; import com.emato.ich.R; import com.emato.ich.api.ICSPClient; import com.emato.ich.api.ICSPResponseCodeEnum; import com.emato.ich.databinding.FragmentSendBinding; import com.emato.ich.entity.vo.ResponseData; import com.emato.ich.entity.vo.ResponseTokenVo; import com.emato.ich.local.LocalStorage; import com.emato.ich.utils.BaseUtils; import com.emato.ich.utils.StringUtils; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; import com.google.android.material.snackbar.Snackbar; import org.jetbrains.annotations.NotNull; import java.io.IOException; import java.util.regex.Pattern; import okhttp3.Call; import okhttp3.Callback; import okhttp3.Response; public class SendFragment extends Fragment { private static final String TAG = SendFragment.class.getName(); private FragmentSendBinding binding; @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) { binding = FragmentSendBinding.inflate(inflater, container, false); return binding.getRoot(); } public void onViewCreated(@NonNull View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); binding.inputButtonConfirm.setOnClickListener(view1 -> { // 登录逻辑 editTextTextPersonName4 手机 editTextTextPersonName5 密码 String sendPhone = binding.editTextTextPersonName4.getText().toString(); String password = binding.editTextTextPersonName5.getText().toString(); 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}$"); Pattern pwdPattern = Pattern.compile("^[0-9]{8,16}$"); if (phonePattern.matcher(sendPhone).matches() && pwdPattern.matcher(password).matches()) { ICSPClient.login(sendPhone, password, new Callback() { @Override public void onFailure(@NotNull Call call, @NotNull IOException e) { // TODO 登录失败处理 Snackbar.make(view1, "登录失败!网络异常!", Snackbar.LENGTH_LONG).show(); Log.e(TAG, "onFailure: 登录失败! call: " + call.timeout().toString(), e); } @Override public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException { ((MainActivity) getActivity()).runOnUiThread(() -> { String responseStr = ICSPClient.isSuccessfulAndParseResponse(response); if (!StringUtils.isNullOrEmpty(responseStr)) { try { ResponseData responseData = new ObjectMapper().readValue(responseStr, new TypeReference>() {}); ResponseTokenVo data = responseData.getData(); if (responseData.getCode().equals(ICSPResponseCodeEnum.OK.getCode())) { LocalStorage.Session session = new LocalStorage.Session(); session.setPhone(sendPhone); session.setTime(System.currentTimeMillis()); session.setToken(data.getToken()); LocalStorage.getInstance().setSession(session); // 登录成功 Snackbar.make(view1, "登录成功!", Snackbar.LENGTH_LONG).show(); NavHostFragment.findNavController(SendFragment.this).navigate(R.id.action_sendFragment_to_sendMainFragment); } else { ICSPResponseCodeEnum.responseHint(view, responseData); Log.w(TAG, "onResponse: " + responseData.getMsg()); } } catch (JsonProcessingException e) { Log.e(TAG, "onViewCreated: 解析登录响应信息错误! response body: " + responseStr, e); Snackbar.make(view1, "登录失败!", Snackbar.LENGTH_LONG).show(); } catch (ClassCastException e) { Log.e(TAG, "onResponse: 解析登录响应信息类型转换错误! response body: " + responseStr, e); Snackbar.make(view1, "登录失败!", Snackbar.LENGTH_LONG).show(); } catch (RuntimeException e) { Log.e(TAG, "onResponse: 登录失败! ", e); Snackbar.make(view1, "登录失败!", Snackbar.LENGTH_LONG).show(); } } else { // 登录失败 Snackbar.make(view1, "登录失败!手机号或密码错误!", Snackbar.LENGTH_LONG).show(); } }); } }); } else if (!phonePattern.matcher(sendPhone).matches()){ Snackbar.make(view1, "请输入正确的手机号!", Snackbar.LENGTH_LONG).show(); } else if (!pwdPattern.matcher(password).matches()) { Snackbar.make(view1, "密码格式错误!请输入8-16位的数字!", Snackbar.LENGTH_LONG).show(); } }); // 数字输入 5 手机号 4 密码 binding.editTextTextPersonName5.setOnFocusChangeListener((view1, hasFocus) -> { if (hasFocus) { binding.inputButton0.setOnClickListener(v -> { int start = binding.editTextTextPersonName5.getSelectionStart(); binding.editTextTextPersonName5.getText().insert(start, "0"); }); binding.inputButton1.setOnClickListener(v -> { int start = binding.editTextTextPersonName5.getSelectionStart(); binding.editTextTextPersonName5.getText().insert(start, "1"); }); binding.inputButton2.setOnClickListener(v -> { int start = binding.editTextTextPersonName5.getSelectionStart(); binding.editTextTextPersonName5.getText().insert(start, "2"); }); binding.inputButton3.setOnClickListener(v -> { int start = binding.editTextTextPersonName5.getSelectionStart(); binding.editTextTextPersonName5.getText().insert(start, "3"); }); binding.inputButton4.setOnClickListener(v -> { int start = binding.editTextTextPersonName5.getSelectionStart(); binding.editTextTextPersonName5.getText().insert(start, "4"); }); binding.inputButton5.setOnClickListener(v -> { int start = binding.editTextTextPersonName5.getSelectionStart(); binding.editTextTextPersonName5.getText().insert(start, "5"); }); binding.inputButton6.setOnClickListener(v -> { int start = binding.editTextTextPersonName5.getSelectionStart(); binding.editTextTextPersonName5.getText().insert(start, "6"); }); binding.inputButton7.setOnClickListener(v -> { int start = binding.editTextTextPersonName5.getSelectionStart(); binding.editTextTextPersonName5.getText().insert(start, "7"); }); binding.inputButton8.setOnClickListener(v -> { int start = binding.editTextTextPersonName5.getSelectionStart(); binding.editTextTextPersonName5.getText().insert(start, "8"); }); binding.inputButton9.setOnClickListener(v -> { int start = binding.editTextTextPersonName5.getSelectionStart(); binding.editTextTextPersonName5.getText().insert(start, "9"); }); binding.inputButtonCancel.setOnClickListener(v -> { Editable text = binding.editTextTextPersonName5.getText(); if (text.length() > 0) { text.delete(text.length()-1, text.length()); binding.editTextTextPersonName5.setText(text, TextView.BufferType.EDITABLE); binding.editTextTextPersonName5.setSelection(binding.editTextTextPersonName5.getText().length()); } }); } }); binding.editTextTextPersonName4.setOnFocusChangeListener((view1, hasFocus) -> { if (hasFocus) { binding.inputButton0.setOnClickListener(v -> { int start = binding.editTextTextPersonName4.getSelectionStart(); binding.editTextTextPersonName4.getText().insert(start, "0"); }); binding.inputButton1.setOnClickListener(v -> { int start = binding.editTextTextPersonName4.getSelectionStart(); binding.editTextTextPersonName4.getText().insert(start, "1"); }); binding.inputButton2.setOnClickListener(v -> { int start = binding.editTextTextPersonName4.getSelectionStart(); binding.editTextTextPersonName4.getText().insert(start, "2"); }); binding.inputButton3.setOnClickListener(v -> { int start = binding.editTextTextPersonName4.getSelectionStart(); binding.editTextTextPersonName4.getText().insert(start, "3"); }); binding.inputButton4.setOnClickListener(v -> { int start = binding.editTextTextPersonName4.getSelectionStart(); binding.editTextTextPersonName4.getText().insert(start, "4"); }); binding.inputButton5.setOnClickListener(v -> { int start = binding.editTextTextPersonName4.getSelectionStart(); binding.editTextTextPersonName4.getText().insert(start, "5"); }); binding.inputButton6.setOnClickListener(v -> { int start = binding.editTextTextPersonName4.getSelectionStart(); binding.editTextTextPersonName4.getText().insert(start, "6"); }); binding.inputButton7.setOnClickListener(v -> { int start = binding.editTextTextPersonName4.getSelectionStart(); binding.editTextTextPersonName4.getText().insert(start, "7"); }); binding.inputButton8.setOnClickListener(v -> { int start = binding.editTextTextPersonName4.getSelectionStart(); binding.editTextTextPersonName4.getText().insert(start, "8"); }); binding.inputButton9.setOnClickListener(v -> { int start = binding.editTextTextPersonName4.getSelectionStart(); binding.editTextTextPersonName4.getText().insert(start, "9"); }); binding.inputButtonCancel.setOnClickListener(v -> { Editable text = binding.editTextTextPersonName4.getText(); if (text.length() > 0) { text.delete(text.length()-1, text.length()); binding.editTextTextPersonName4.setText(text, TextView.BufferType.EDITABLE); binding.editTextTextPersonName4.setSelection(binding.editTextTextPersonName4.getText().length()); } }); } }); binding.returnBtn.setOnClickListener(view1 -> NavHostFragment.findNavController(SendFragment.this) .navigate(R.id.action_sendFragment_to_mainFragment)); } @Override public void onDestroyView() { super.onDestroyView(); binding = null; } }