You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
238 lines
8.2 KiB
238 lines
8.2 KiB
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.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<String> 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(), 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(), visitorResponse -> {
|
|
if (visitorResponse == null) {
|
|
return;
|
|
}
|
|
|
|
visitorResponse.toast(getContext());
|
|
|
|
if (visitorResponse.getResult() == Response.Result.OK) {
|
|
VisitorFragment visitorFragment = getParentFragment(VisitorFragment.class);
|
|
Button button = Objects.requireNonNull(visitorFragment.getView()).findViewById(R.id.visitor_reservation);
|
|
visitorFragment.reservation(button);
|
|
}
|
|
});
|
|
|
|
//检索预约人请求结果
|
|
appointmentViewModel.getSearchPeopleReq().observe(getViewLifecycleOwner(), 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<VisitorPeople> 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));
|
|
}
|
|
|
|
}
|
|
|