package com.basic.security.fragment; import android.annotation.SuppressLint; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Color; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.BaseAdapter; import android.widget.Button; import android.widget.CheckBox; import android.widget.GridView; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.RelativeLayout; import android.widget.TextView; import com.basic.security.R; import com.basic.security.base.BaseFragment; import com.basic.security.manager.BaseSettingManager; import com.basic.security.manager.IdentityManager; import com.basic.security.manager.PersonManager; import com.basic.security.model.ModelAdapter; import com.basic.security.utils.ToastUtil; 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.HashMap; import java.util.List; import java.util.Map; @EFragment(R.layout.fragment_face_list) public class FaceListFragment extends BaseFragment { @ViewById public GridView face_list_show_image, person_manager_lv; @ViewById public TextView not_sign_up, not_sign_up_underline, signed_up, signed_up_underline, identity, tv_person_number, show_checked_identity; @ViewById public LinearLayout person_manager_ll_hide, identity_show, ll_show_no_register_number; @ViewById public Button person_manage_btn_sure; @ViewById public RelativeLayout face_list; public String isRegister = "未注册"; Map checkedIdentityMap = new HashMap<>(); Map checkedIdentityMapBackup = new HashMap<>(); float downY = 0; float moveY = 0; private List personList = new ArrayList<>(); private FaceListGridViewAdapter faceListGridViewAdapter; private int clickTemp = -1; // @Click public void not_sign_up() { findPersonList("未注册", new HashMap<>()); } @Click public void identity_show() {//选择某种身份 checkedIdentityMapBackup = new HashMap<>(checkedIdentityMap); person_manager_ll_hide.setVisibility(View.VISIBLE); person_manager_lv.setAdapter(new IdentityAdapter()); } @Click public void person_manage_btn_sure() { person_manager_ll_hide.setVisibility(View.GONE); if (checkedIdentityMap.size() != 0) { show_checked_identity.setVisibility(View.VISIBLE); StringBuffer sb = new StringBuffer(); for (ModelAdapter value : checkedIdentityMap.values()) { sb.append(value.getString("name") + ","); } show_checked_identity.setText("已选择:" + sb.substring(0, sb.length() - 1)); } else { show_checked_identity.setVisibility(View.GONE); } findPersonList(null, null); } @Click public void show_camera() { // 判断是否为通行模式,是的话不允许注册 if (BaseSettingManager.isPassMode()) { ToastUtil.show("通行模式不允许注册"); } else { if (BaseSettingManager.isAdminAuthSignUpModeNeedIdCard() || BaseSettingManager.isAutoSignUpIDCardMode()) { mainActivity().showFragment(mainActivity().fragment_su_logged_ic_wait_face); } else { mainActivity().showFragment(mainActivity().fragment_su_logged_nic_wait_face); } } } @Click public void signed_up() { show_checked_identity.setVisibility(View.GONE); findPersonList("已注册", new HashMap<>()); // 对比"/sdcard/1.jpg", "/sdcard/2.jpg"得分 // FaceId.testSdk("/sdcard/1.jpg", "/sdcard/2.jpg"); // // 对比同一人注册多次的得分 // float score = FaceId.instance.compareFeature(personList.get(0).getBlob("camera_image_feature"), // personList.get(1).getBlob("camera_image_feature")); // System.out.println("faceList score =" + score); } // 下拉进入自助注册页面 @SuppressLint("ClickableViewAccessibility") @Click public void face_list() { face_list.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: downY = event.getY(); break; case MotionEvent.ACTION_MOVE: break; case MotionEvent.ACTION_UP: moveY = event.getY() - downY; break; } return false; } }); if (Math.abs(moveY) > 240) { show_camera(); } } @UiThread public void switchUnderline() { if ("未注册".equals(isRegister)) { ll_show_no_register_number.setVisibility(View.VISIBLE); identity_show.setVisibility(View.GONE); signed_up.setTextColor(Color.parseColor("#ffffff")); signed_up_underline.setVisibility(View.INVISIBLE); not_sign_up_underline.setVisibility(View.VISIBLE); not_sign_up.setTextColor(Color.parseColor("#D5FCFD")); } else { ll_show_no_register_number.setVisibility(View.GONE); identity_show.setVisibility(View.VISIBLE); signed_up.setTextColor(Color.parseColor("#D5FCFD")); signed_up_underline.setVisibility(View.VISIBLE); not_sign_up_underline.setVisibility(View.INVISIBLE); not_sign_up.setTextColor(Color.parseColor("#ffffff")); } } public void findPersonList(String isRegisterIgnoreNull, Map checkedIdentityMapIgnoreNull) { findPersonList(isRegisterIgnoreNull, checkedIdentityMapIgnoreNull, null); } /** * @param isRegisterIgnoreNull 如果为null,不修改 * @param checkedIdentityMapIgnoreNull 如果为null,不修改 */ // @UiThread public void findPersonList(String isRegisterIgnoreNull, Map checkedIdentityMapIgnoreNull, ModelAdapter selectedPersonDocument) { mainActivity().runOnUiThread(new Runnable() { @Override public void run() { if (isRegisterIgnoreNull != null) { FaceListFragment.this.isRegister = isRegisterIgnoreNull; } if (checkedIdentityMapIgnoreNull != null) { FaceListFragment.this.checkedIdentityMap = checkedIdentityMapIgnoreNull; } clickTemp = -1; switchUnderline(); findPersonList(selectedPersonDocument); faceListGridViewAdapter = new FaceListGridViewAdapter(); face_list_show_image.setAdapter(faceListGridViewAdapter); if (personList.size() != 0) { // 有人员信息时默认选中第一个 setDefaultAndSelectedPerson(0); } else { mainActivity().fragment_person_manage.personChanged(null, false); } face_list_show_image.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView adapterView, View view, int position, long l) { findPersonList(); try { setDefaultAndSelectedPerson(position); } catch (Exception e) { e.printStackTrace(); } } }); } }); } /** * 默认或者选中的人员信息 * * @param position */ private void setDefaultAndSelectedPerson(int position) { if (position < 0) { mainActivity().fragment_person_manage.personChanged(null); } else { mainActivity().fragment_person_manage.personChanged(personList.get(position)); isNeedIDCard(position); } faceListGridViewAdapter.setSelection(position); faceListGridViewAdapter.notifyDataSetChanged(); } private void isNeedIDCard(int position) { if ("未验证身份证".equals(personList.get(position).getString("verify_status"))) { mainActivity().fragment_person_manage.setNeedVerifyIDCard(true); } else { mainActivity().fragment_person_manage.setNeedVerifyIDCard(false); } } private void findPersonList(ModelAdapter selectedPersonDocument) { personList = PersonManager.getPersonList(this.isRegister); if (this.checkedIdentityMap != null && this.checkedIdentityMap.size() != 0) { // 获取含有特定身份的所有人员 personList = PersonManager.getIdentityPersonList(personList, this.checkedIdentityMap); } if (!TextUtils.isEmpty(this.isRegister) && "未注册".equals(this.isRegister)) { tv_person_number.setText(personList.size() + " 人"); } if (selectedPersonDocument != null) { // personList.clear(); // personList.add(PersonManager.findById(personId)); ModelAdapter selectedPerson = null; for (ModelAdapter person : personList) { if (selectedPersonDocument.getId().equals(person.getId())) { selectedPerson = person; break; } } if (selectedPerson != null) { personList.remove(selectedPerson); } mainActivity().fragment_person_manage.selectedPersonDocument = selectedPersonDocument; personList.add(0, selectedPersonDocument); } } private void findPersonList() { findPersonList(null); personList = PersonManager.getPersonList(this.isRegister); if (this.checkedIdentityMap != null && this.checkedIdentityMap.size() != 0) { // 获取含有特定身份的所有人员 personList = PersonManager.getIdentityPersonList(personList, this.checkedIdentityMap); } if (!TextUtils.isEmpty(this.isRegister) && "未注册".equals(this.isRegister)) { tv_person_number.setText(personList.size() + " 人"); } } public void hidePersonIdentityPopupFromNotSureButton() { if (person_manager_ll_hide.getVisibility() == View.VISIBLE) { person_manager_ll_hide.setVisibility(View.GONE); checkedIdentityMap = checkedIdentityMapBackup; } } // 此方法删除或者未注册中人员减少后会选中前一个,如果是第一个会选中后一个 public void findNextPosition(ModelAdapter modelAdapter) { try { int position = personList.indexOf(modelAdapter); findPersonList(); if (position >= personList.size()) { position = personList.size() - 1; } setDefaultAndSelectedPerson(position); } catch (Exception e) { e.printStackTrace(); } } private class FaceListGridViewAdapter extends BaseAdapter { public void setSelection(int position) { clickTemp = position; } @Override public int getCount() { return personList == null ? 0 : personList.size(); } @Override public Object getItem(int position) { return personList.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder viewHolder; if (convertView == null) { //加载子布局 convertView = LayoutInflater.from(getContext()).inflate(R.layout.face_view, null); viewHolder = new ViewHolder(); viewHolder.imageView = convertView.findViewById(R.id.face); viewHolder.imageView_checked = convertView.findViewById(R.id.face_checked); convertView.setTag(viewHolder); } else { viewHolder = (ViewHolder) convertView.getTag(); } byte[] blob = personList.get(position).getBlob("camera_image_path"); Bitmap bitmap = null; if (blob != null) { try { byte[] data = blob; if (data.length != 0) { bitmap = BitmapFactory.decodeByteArray(data, 0, data.length); } } catch (Exception e) { e.printStackTrace(); bitmap = BitmapFactory.decodeResource(mainActivity().getResources(), R.drawable.u1280); } } else { bitmap = BitmapFactory.decodeResource(mainActivity().getResources(), R.drawable.u1280); } viewHolder.imageView.setImageBitmap(bitmap); if (clickTemp == position) { viewHolder.imageView_checked.setVisibility(View.VISIBLE); } else { viewHolder.imageView_checked.setVisibility(View.GONE); } return convertView; } class ViewHolder { ImageView imageView; RelativeLayout imageView_checked; } } private class IdentityAdapter extends BaseAdapter { private List identityList; public IdentityAdapter() { identityList = IdentityManager.findIdentityList(); } @Override public int getCount() { return identityList == null ? 0 : identityList.size(); } @Override public Object getItem(int position) { return identityList.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { View view; ViewHolder viewHolder; if (convertView == null) { //加载子布局 view = LayoutInflater.from(getContext()).inflate(R.layout.item_identity_list, null); viewHolder = new ViewHolder(); viewHolder.checkBox = view.findViewById(R.id.item_ck); view.setTag(viewHolder); } else { view = convertView; viewHolder = (ViewHolder) view.getTag(); } final ModelAdapter singleIdentityInAllIdentity = identityList.get(position); viewHolder.checkBox.setText(identityList.get(position).getString("name")); if (checkedIdentityMap.containsKey(singleIdentityInAllIdentity.getId())) { viewHolder.checkBox.setChecked(true); } else { viewHolder.checkBox.setChecked(false); } viewHolder.checkBox.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (checkedIdentityMap.containsKey(singleIdentityInAllIdentity.getId())) { checkedIdentityMap.remove(singleIdentityInAllIdentity.getId()); } else { checkedIdentityMap.put(singleIdentityInAllIdentity.getId(), singleIdentityInAllIdentity); } } }); return view; } class ViewHolder { CheckBox checkBox; } } // 在隐藏页面时,是否需要回收bitmap,以防止oom /*@Override public void hide() { super.hide(); if(bitmap != null && !bitmap.isRecycled()){ // 回收并且置为null bitmap.recycle(); bitmap = null; } }*/ }