package com.community.pocket.ui.main.ui.visitor.appointment; import android.os.Build; import android.os.Bundle; import android.os.Message; import android.text.Editable; import android.text.TextWatcher; import android.text.format.DateFormat; import android.view.View; import android.widget.ArrayAdapter; import android.widget.AutoCompleteTextView; import android.widget.Button; import android.widget.EditText; import android.widget.LinearLayout; import android.widget.RadioButton; import android.widget.Spinner; import android.widget.TextView; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.RequiresApi; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; import com.community.pocket.R; import com.community.pocket.data.adapter.VisitorAdpter; import com.community.pocket.data.model.VisitorPeople; import com.community.pocket.ui.BaseFragment; import com.community.pocket.ui.listener.MyTextChange; import com.community.pocket.ui.main.ui.share.MyAutoCompleteTextView; import com.community.pocket.ui.main.ui.share.Response; import com.community.pocket.ui.main.ui.visitor.VisitorFragment; import com.community.pocket.util.Param; import com.community.pocket.util.PropertiesUtil; import org.xutils.view.annotation.ContentView; import org.xutils.view.annotation.Event; import org.xutils.view.annotation.ViewInject; import java.util.List; import java.util.Objects; /** * 访客预约界面 */ @ContentView(R.layout.visitor_appointment_fragment) public class VisitorAppointmentFragment extends BaseFragment { //搜索预约住户 @ViewInject(R.id.appointment) private AutoCompleteTextView appointment; @ViewInject(R.id.chooseDate) private EditText chooseDate; //日期格式提示 @ViewInject(R.id.tip) private TextView tip; private String today; //预约时间 @ViewInject(R.id.choose_time) private Spinner chooseTime; //备注信息 @ViewInject(R.id.notes) private EditText notes; //提交按钮 @ViewInject(R.id.submit) private Button submit; //预约时间layout @ViewInject(R.id.choose_time_layout) private LinearLayout chooseTimeLayout; private VisitorViewModel appointmentViewModel; //动态更新搜索框数据源 private MyAutoCompleteTextView myAutoCompleteTextView; //预约人数据呀 private VisitorAdpter visitorAdpter; //预约时间数据 private ArrayAdapter timeAdpter; //是否外来人口预约 @ViewInject(R.id.is_outpeople) private RadioButton radioButton; @RequiresApi(api = Build.VERSION_CODES.KITKAT) @Override public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); appointmentViewModel = new ViewModelProvider(this, new ViewModelProvider.NewInstanceFactory()).get(VisitorViewModel.class); myAutoCompleteTextView = new MyAutoCompleteTextView(appointment, appointmentViewModel); //监听访客预约表单校验状态 appointmentViewModel.getVisitorFormState().observe(getViewLifecycleOwner(), new Observer() { @Override public void onChanged(VisitorFormState visitorFormState) { if (visitorFormState == null) { return; } submit.setEnabled(visitorFormState.isDataValid()); if (visitorFormState.getAppointmentError() != null) { appointment.setError(getString(visitorFormState.getAppointmentError(), PropertiesUtil.getIntValue("username.length"))); } if (visitorFormState.getDateError() != null) { if (visitorFormState.getDateError() == R.string.visitor_invalid_date) { chooseDate.setError(getString(visitorFormState.getDateError(), today)); } else { chooseDate.setError(getString(visitorFormState.getDateError())); } } if (visitorFormState.getNotesError() != null) { notes.setError(getString(visitorFormState.getNotesError())); } } }); //监听预约请求结果 appointmentViewModel.getVisitorResponse().observe(getViewLifecycleOwner(), new Observer() { @Override public void onChanged(VisitorResponse visitorResponse) { if (visitorResponse == null) { return; } visitorResponse.toast(getContext()); if (visitorResponse.getResult() == Response.Result.OK) { VisitorFragment visitorFragment = getParentFragment(2); Button button = Objects.requireNonNull(visitorFragment.getView()).findViewById(R.id.visitor_reservation); visitorFragment.reservation(button); } } }); //检索预约人请求结果 appointmentViewModel.getSearchPeopleReq().observe(getViewLifecycleOwner(), new Observer() { @Override public void onChanged(VisitorPeopleResponse visitorResponse) { if (visitorResponse == null) { return; } visitorResponse.toast(getContext()); if (visitorResponse.getResult() == Response.Result.OK) { if (!visitorResponse.getVisitorPeopleList().isEmpty()) { initSearch(visitorResponse.getVisitorPeopleList()); } } } }); appointment.addTextChangedListener(new MyTextChange() { @Override public void afterTextChanged(Editable s) { chooseTimeLayout.setVisibility(View.GONE); if (timeAdpter != null) { timeAdpter.clear(); } if (s.toString().equals(appointment.getTag(R.string.visitor_tag))) { return; } if (visitorAdpter != null && visitorAdpter.containsKey(s.toString())) { appointmentViewModel.appointmentDataChanged(appointment.getText(), chooseDate.getText(), today, notes.getText()); initTime(s); chooseTimeLayout.setVisibility(View.VISIBLE); return; } appointment.setTag(R.string.visitor_tag, s.toString()); Message message = new Message(); Bundle bundle = new Bundle(); bundle.putBoolean(Param.isOutPeople.name(), radioButton.isChecked()); message.setData(bundle); myAutoCompleteTextView.searchHandler(message); } }); TextWatcher textWatcher = new MyTextChange() { @Override public void afterTextChanged(Editable s) { appointmentViewModel.appointmentDataChanged(appointment.getText(), chooseDate.getText(), today, notes.getText()); } }; chooseDate.addTextChangedListener(textWatcher); notes.addTextChangedListener(textWatcher); initTip(); } /** * 搜索框 */ @RequiresApi(api = Build.VERSION_CODES.KITKAT) private void initSearch(List arrays) { // 设置适配器 if (visitorAdpter == null) { visitorAdpter = new VisitorAdpter(arrays, getContext()); // 将适配器与当前AutoCompleteTextView控件绑定 appointment.setAdapter(visitorAdpter); } else { visitorAdpter.addAll(arrays); } myAutoCompleteTextView.refreshDropList(); } @RequiresApi(api = Build.VERSION_CODES.KITKAT) private void initTime(Editable e) { if (timeAdpter == null) { timeAdpter = new ArrayAdapter<>(Objects.requireNonNull(getContext()), android.R.layout.simple_list_item_1, visitorAdpter.getTime(e.toString())); chooseTime.setAdapter(timeAdpter); } else { timeAdpter.clear(); timeAdpter.addAll(visitorAdpter.getTime(e.toString())); } } /** * 提交预约信息 */ @Event(value = R.id.submit) private void submit(View view) { appointmentViewModel.appointment(appointment.getText().toString(), chooseDate.getText().toString(), chooseTime.getSelectedItem().toString(), notes.getText().toString(), radioButton.isChecked()); } //初始化日期提示 private void initTip() { String format = PropertiesUtil.getValue("date.pattern"); today = DateFormat.format(format, System.currentTimeMillis()).toString(); tip.setText(getString(R.string.dateformat_tip, format, today)); } }