package com.basic.security.fragment; import android.graphics.BitmapFactory; import android.support.annotation.NonNull; import android.text.Editable; import android.text.TextUtils; import android.text.TextWatcher; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.BaseAdapter; import android.widget.Button; import android.widget.EditText; import android.widget.ImageView; import android.widget.ListView; import android.widget.ProgressBar; import android.widget.Spinner; import android.widget.TextView; import com.basic.security.R; import com.basic.security.base.BaseFragment; import com.basic.security.manager.IdentityManager; import com.basic.security.manager.PersonManager; import com.basic.security.manager.impl.cblite.VisitManager; import com.basic.security.model.ModelAdapter; import com.basic.security.utils.DateEditUtil; import com.basic.security.utils.DateUtil; import com.basic.security.utils.KeyboardUtil; import com.basic.security.utils.ToastUtil; import com.basic.security.utils.abslistview.CommonAdapter; import com.basic.security.utils.abslistview.ViewHolder; import com.scwang.smartrefresh.layout.SmartRefreshLayout; import com.scwang.smartrefresh.layout.api.RefreshLayout; import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener; import com.scwang.smartrefresh.layout.listener.OnRefreshListener; import org.androidannotations.annotations.AfterViews; import org.androidannotations.annotations.Click; import org.androidannotations.annotations.EFragment; import org.androidannotations.annotations.UiThread; import org.androidannotations.annotations.ViewById; import java.util.ArrayList; import java.util.List; @EFragment(R.layout.fragment_visit_record_list) public class VisitRecordListFragment extends BaseFragment { private static final int LOAD_FROM_ZERO = 0; @ViewById EditText search_text, identity_select; @ViewById View icon_search, empty; @ViewById Button search; @ViewById ImageView registerPic, idCardPic; @ViewById TextView name, id_card_number, phone, register_time, register_type, last_visit_time, date_text; @ViewById ListView visit_record_list; @ViewById SmartRefreshLayout refresh_layout; @ViewById ProgressBar loading; @ViewById Spinner visit_record_spinner; private int pageSize = 20; private CommonAdapter adapter; private List record_list = new ArrayList<>(); private long startTime, endTime; private String key = ""; private String selectIdentity = "全部"; private TextWatcher watcher = new TextWatcher() { public void beforeTextChanged(CharSequence s, int start, int count, int after) { } public void onTextChanged(CharSequence s, int start, int before, int count) { } public void afterTextChanged(Editable s) { key = search_text.getText().toString().trim(); loadTask(LOAD_FROM_ZERO); } }; @Click void search() { loadTask(LOAD_FROM_ZERO); } @Click void date_text() { DateEditUtil.selectTime(startTime, endTime, true, new DateEditUtil.CallBack() { @Override public void notify(long start_time, long end_time) { startTime = start_time; endTime = end_time; setTimeToView(); } }); } @Override public void show() { search_text.removeTextChangedListener(watcher); startTime = System.currentTimeMillis() - 7 * 24 * 3600 * 1000; endTime = System.currentTimeMillis(); setTimeToView(); search_text.setText(""); registerPic.setImageBitmap(BitmapFactory.decodeResource(mainActivity().getResources(), R.drawable.no_pic)); idCardPic.setImageBitmap(BitmapFactory.decodeResource(mainActivity().getResources(), R.drawable.no_pic)); name.setText(""); id_card_number.setText(""); phone.setText(""); register_time.setText(""); register_type.setText(""); last_visit_time.setText(""); key = ""; selectIdentity = "全部"; search_text.addTextChangedListener(watcher); empty.setVisibility(View.GONE); initIdentitySpinner(); adapter.notifyDataSetChanged(); } private void initIdentitySpinner() { List identityList = IdentityManager.findIdentityList(); List ruleListName = new ArrayList<>(); ruleListName.clear(); ruleListName.add("全部"); for (int i = 0; i < identityList.size(); i++) { ruleListName.add(identityList.get(i).getString("name")); } SpinnerAdapter spinnerAdapter = new SpinnerAdapter(ruleListName); visit_record_spinner.setAdapter(spinnerAdapter); visit_record_spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView parent, View view, int position, long id) { if (!"全部".equals(ruleListName.get(position))) { selectIdentity = ruleListName.get(position); loadTask(LOAD_FROM_ZERO); } } @Override public void onNothingSelected(AdapterView parent) { } }); } private void setTimeToView() { StringBuilder builder = new StringBuilder(); builder.append(DateUtil.formatTime(startTime, "yyyy/MM/dd HH:mm")) .append(" — ") .append(DateUtil.formatTime(endTime, "yyyy/MM/dd HH:mm")); date_text.setText(builder.toString()); } @AfterViews void init() { search_text.addTextChangedListener(watcher); adapter = new CommonAdapter(mainActivity(), R.layout.visit_record_item, record_list) { @Override protected void convert(ViewHolder vh, ModelAdapter item, int position) { TextView visitTime = vh.getView(R.id.visit_time); TextView device_name = vh.getView(R.id.device_name); TextView name = vh.getView(R.id.name); TextView id_number = vh.getView(R.id.id_number); TextView phone = vh.getView(R.id.phone); TextView identity = vh.getView(R.id.identity); if (item == null) { return; } visitTime.setText(DateUtil.formatTime(Long.parseLong(item.getString("visit_time")), "yyyy/MM/dd HH:mm:ss")); device_name.setText(item.getString("device_name") == null ? "" : item.getString("device_name").trim()); name.setText(item.getString("person_name") == null ? "" : item.getString("person_name").trim()); id_number.setText(item.getString("person_id_number") == null ? "" : item.getString("person_id_number").trim()); phone.setText(item.getString("person_phone") == null ? "" : item.getString("person_phone").trim()); identity.setText(item.getString("person_type") == null ? "" : item.getString("person_type").trim()); // 之前的校验结果 暂时废弃 不要删除 // String verify_result = item.getString("verify_result"); // switch (verify_result) { // case "0": // verifyResult.setFaceDetailUI("通过"); // verifyResult.setTextColor(getResources().getColor(R.color.colorGreen)); // break; // case "1": // verifyResult.setFaceDetailUI("不通过"); // verifyResult.setTextColor(getResources().getColor(R.color.colorRed)); // break; // case "2": // verifyResult.setFaceDetailUI("黑名单"); // verifyResult.setTextColor(getResources().getColor(R.color.colorRed)); // break; // case "3": // verifyResult.setFaceDetailUI("管理员"); // verifyResult.setTextColor(getResources().getColor(R.color.colorGreen)); // break; // default: // verifyResult.setFaceDetailUI("访问记录异常"); // verifyResult.setTextColor(getResources().getColor(R.color.colorRed)); // break; // } } }; visit_record_list.setAdapter(adapter); visit_record_list.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView parent, View view, int position, long id) { KeyboardUtil.hideSoftKeyboard(); loadPersonByID(position); } }); refresh_layout.setOnRefreshListener(new OnRefreshListener() { @Override public void onRefresh(@NonNull RefreshLayout refreshLayout) { loadTask(LOAD_FROM_ZERO); } }); refresh_layout.setOnLoadMoreListener(new OnLoadMoreListener() { @Override public void onLoadMore(@NonNull RefreshLayout refreshLayout) { loadTask(record_list.size()); } }); } @UiThread public void loadPersonByIDUIThread(int position, ModelAdapter document) { name.setText(document.getString("name")); id_card_number.setText(document.getString("id_card_number")); phone.setText(document.getString("phone")); try { register_time.setText(DateUtil.formatTime(Long.parseLong(document.getString("sign_up_time")), "yyyy-MM-dd HH:mm:ss")); } catch (Exception e) { e.printStackTrace(); register_time.setText(""); } String type = document.getString("sign_up_method"); if ("自助注册".equals(type)) { if ("不需要验证身份证".equals(document.getString("verify_status"))) { type = type + "-普通验证"; } else { type = type + "-身份证验证"; } } else if ("管理员注册".equals(type)) { if ("不需要验证身份证".equals(document.getString("verify_status"))) { type = "人工注册-普通验证"; } else { type = "人工注册-身份证验证"; } } register_type.setText(type); last_visit_time.setText(document.getString("lastTime")); if (document.getBlob("camera_image_path") != null && document.getBlob("camera_image_path") != null) { byte[] data = document.getBlob("camera_image_path"); registerPic.setImageBitmap(BitmapFactory.decodeByteArray(data, 0, data.length)); } else { registerPic.setImageBitmap(BitmapFactory.decodeResource(mainActivity().getResources(), R.drawable.no_pic)); } if (document.getBlob("id_card_image_path") != null && document.getBlob("id_card_image_path") != null) { byte[] data = document.getBlob("id_card_image_path"); idCardPic.setImageBitmap(BitmapFactory.decodeByteArray(data, 0, data.length)); } else { idCardPic.setImageBitmap(BitmapFactory.decodeResource(mainActivity().getResources(), R.drawable.no_pic)); } } private void loadPersonByID(int position) { String personId = record_list.get(position).getString("person_id"); if (!TextUtils.isEmpty(personId)) { ModelAdapter document = PersonManager.findPersonById(personId); if (document != null) { ModelAdapter d = document; String lastTime = VisitManager.getLastVisitTime(document.getId()); if (TextUtils.isEmpty(lastTime)) { d.setString("lastTime", "暂无"); } else { d.setString("lastTime", DateUtil.formatTime(Long.parseLong(lastTime), "yyyy-MM-dd HH:mm:ss")); } loadPersonByIDUIThread(position, d); } else { ToastUtil.show("此人已被删除"); } } else { ToastUtil.show("查无此人"); } // // // Observable.create( // new ObservableOnSubscribe() { // @Override // public void subscribe(ObservableEmitter emitter) throws Exception { // // // } // }) // .subscribeOn(Schedulers.io()) // .observeOn(AndroidSchedulers.mainThread()) // .subscribe(new Observer() { // @Override // public void onSubscribe(Disposable d) {} // // @Override // public void onNext(Document document) { // // } // // @Override // public void onError(Throwable e) { // ToastUtil.show("数据库中无此人(可能已被删除)"); // name.setFaceDetailUI(""); // id_card_number.setFaceDetailUI(""); // phone.setFaceDetailUI(""); // register_time.setFaceDetailUI(""); // register_type.setFaceDetailUI(""); // last_visit_time.setFaceDetailUI(""); // registerPic.setImageBitmap(BitmapFactory.decodeResource(mainActivity().getResources(), R.drawable.no_pic)); // idCardPic.setImageBitmap(BitmapFactory.decodeResource(mainActivity().getResources(), R.drawable.no_pic)); // } // // @Override // public void onComplete() {} // } // ); } @UiThread public void loadTaskCompleteUIThread(int start, List result) { try { if (result.size() == 0) { if (mainActivity().currentFragment == mainActivity().fragment_visit_record_list) { // if (start == LOAD_FROM_ZERO) { // ToastUtil.show("无符合条件的访问记录"); // } else { // ToastUtil.show("无更多符合条件的访问记录"); // } } } if (start == LOAD_FROM_ZERO) { record_list.clear(); refresh_layout.finishRefresh(); } else { refresh_layout.finishLoadMore(); } record_list.addAll(result); if (record_list.size() > 0) { empty.setVisibility(View.GONE); } else { empty.setVisibility(View.VISIBLE); } adapter.notifyDataSetChanged(); loading.setVisibility(View.GONE); if (start == LOAD_FROM_ZERO) { visit_record_list.setSelection(0); } } catch (Exception e) { System.out.println("VisitRecordListFragment.loadTaskCompleteUIThread " + e.getMessage()); } } public void loadTask(int start) { synchronized (this) { if (loading.getVisibility() == View.VISIBLE) { return; } else { loading.setVisibility(View.VISIBLE); } } List result = new ArrayList<>(); result.addAll(VisitManager.queryVisitRecords(selectIdentity, key, true, startTime, endTime, start, pageSize)); loadTaskCompleteUIThread(start, result); // Observable.create( // new ObservableOnSubscribe() { // @Override // public void subscribe(ObservableEmitter emitter) throws Exception { // // // emitter.onComplete(); // } // }) // .subscribeOn(Schedulers.io()) // .observeOn(AndroidSchedulers.mainThread()) // .subscribe(new Observer() { // public void onSubscribe(Disposable d) {} // public void onNext(String s) {} // public void onError(Throwable e) { // ToastUtil.show("加载失败" + e.getMessage()); // } // public void onComplete() { // // } // } // ); } private class SpinnerAdapter extends BaseAdapter { private List ruleListName; public SpinnerAdapter(List ruleListName) { this.ruleListName = ruleListName; } @Override public int getCount() { return ruleListName == null ? 0 : ruleListName.size(); } @Override public Object getItem(int position) { return ruleListName.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder viewHolder = null; if (convertView == null) { viewHolder = new ViewHolder(); convertView = LayoutInflater.from(getActivity()).inflate(R.layout.spinner_identity_item, null); viewHolder.identity_name = convertView.findViewById(R.id.tv_spinner_text); convertView.setTag(viewHolder); } else { viewHolder = (ViewHolder) convertView.getTag(); } viewHolder.identity_name.setText(ruleListName.get(position)); return convertView; } class ViewHolder { TextView identity_name; } } }