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.
pocketcommunityclient/app/src/main/java/com/community/pocket/ui/main/ui/visitor/appointment/VisitorAppointmentFragment....

248 lines
8.8 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.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<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(), new Observer<VisitorFormState>() {
@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<VisitorResponse>() {
@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<VisitorPeopleResponse>() {
@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<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));
}
}