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<String, ModelAdapter> checkedIdentityMap = new HashMap<>();
|
Map<String, ModelAdapter> checkedIdentityMapBackup = new HashMap<>();
|
float downY = 0;
|
float moveY = 0;
|
private List<ModelAdapter> 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<String, ModelAdapter> checkedIdentityMapIgnoreNull) {
|
findPersonList(isRegisterIgnoreNull, checkedIdentityMapIgnoreNull, null);
|
}
|
|
/**
|
* @param isRegisterIgnoreNull 如果为null,不修改
|
* @param checkedIdentityMapIgnoreNull 如果为null,不修改
|
*/
|
// @UiThread
|
public void findPersonList(String isRegisterIgnoreNull, Map<String, ModelAdapter> 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<ModelAdapter> 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;
|
}
|
}*/
|
}
|