package com.basic.security.fragment;
|
|
import android.content.Context;
|
import android.os.Bundle;
|
import android.os.SystemClock;
|
import android.text.TextUtils;
|
import android.view.LayoutInflater;
|
import android.view.View;
|
import android.view.ViewGroup;
|
import android.widget.AdapterView;
|
import android.widget.ArrayAdapter;
|
import android.widget.BaseAdapter;
|
import android.widget.Button;
|
import android.widget.CheckBox;
|
import android.widget.ListView;
|
import android.widget.RadioButton;
|
import android.widget.Spinner;
|
|
import com.basic.security.base.BaseApplication;
|
import com.basic.security.base.BaseFragment;
|
import com.basic.security.manager.BaseSettingManager;
|
import com.basic.security.manager.DeviceManager;
|
import com.basic.security.manager.IdentityManager;
|
import com.basic.security.manager.PersonIdentityManager;
|
import com.basic.security.model.ModelAdapter;
|
import com.basic.security.model.Person;
|
import com.basic.security.utils.ResolutionAdaptation;
|
import com.basic.security.utils.ToastUtil;
|
import com.basic.security.widget.abslistview.CommonAdapter;
|
import com.basic.security.widget.abslistview.ViewHolder;
|
import com.basic.security.widget.hlistview.HListView;
|
|
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.HashMap;
|
import java.util.HashSet;
|
import java.util.List;
|
import java.util.Map;
|
import java.util.Set;
|
|
@EFragment
|
public class PersonIdentityFragment extends BaseFragment {
|
@ViewById
|
public HListView identity_list;
|
@ViewById
|
public Button save, tempSave, deletePerson, giveUpSave;
|
@ViewById
|
public RadioButton clusterDevices, thisDevice;
|
@ViewById
|
public View next;
|
@ViewById
|
public ListView cluster_devices;
|
@ViewById
|
public View cluster_devices_parent;
|
public List<ModelAdapter> identityList = new ArrayList<>();
|
public Map<String, ModelAdapter> checkedIdentityMapByPerson = new HashMap<>();
|
public ModelAdapter checkedPerson = null;
|
public IdentityAdapter identityAdapter;
|
public ClusterDeviceAdapter clusterDeviceAdapter;
|
public Set<CheckBox> identityCheckBoxSet = new HashSet<>();
|
long lastLoadIdentityListFromDB = 0;
|
|
@Click
|
public void clusterDevices() {
|
if (clusterDevices.isChecked()) {
|
mainActivity().fragment_device_list_dialog.showDeviceListDialog();
|
}
|
}
|
|
public void loadClusterDeviceFromDb() {
|
BaseApplication.getApplication().executorService.execute(() -> {
|
clusterDeviceAdapter.deviceList.clear();
|
clusterDeviceAdapter.deviceList.addAll(DeviceManager.findList("select * from device"));
|
showClusterDevices();
|
});
|
}
|
|
@UiThread
|
public void showClusterDevices() {
|
clusterDeviceAdapter.notifyDataSetChanged();
|
}
|
|
public void loadIdentityListFromDB() {
|
BaseApplication.getApplication().executorService.execute(() -> {
|
identityList.clear();
|
identityList.addAll(IdentityManager.findIdentityList());
|
SystemClock.sleep(100);
|
showIdentityList();
|
});
|
}
|
|
@UiThread
|
public void showIdentityList() {
|
identityAdapter.notifyDataSetChanged();
|
}
|
|
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
return inflater.inflate(ResolutionAdaptation.fragment_person_identity(), container, false);
|
}
|
|
@AfterViews
|
public void afterViews() {
|
setIsTempSave(true);
|
thisDevice.setChecked(true);
|
identityAdapter = new IdentityAdapter(mainActivity(), com.basic.security.utils.ResolutionAdaptation.identity_checkbox_item(), identityList);
|
identity_list.setAdapter(identityAdapter);
|
clusterDeviceAdapter = new ClusterDeviceAdapter();
|
cluster_devices.setAdapter(clusterDeviceAdapter);
|
}
|
|
@Click
|
public void thisDevice() {
|
thisDevice.setChecked(true);
|
}
|
|
public void show() {
|
super.show();
|
if (System.currentTimeMillis() - lastLoadIdentityListFromDB > 5 * 1000) {
|
lastLoadIdentityListFromDB = System.currentTimeMillis();
|
loadIdentityListFromDB();
|
}
|
if (mainActivity().currentFragment == mainActivity().fragment_su_logged_ic_wait_face) {
|
deletePerson.setVisibility(View.VISIBLE);
|
}
|
if (mainActivity().currentFragment == mainActivity().fragment_su_logged_ic_compare_success) {
|
deletePerson.setVisibility(View.VISIBLE);
|
}
|
if (mainActivity().currentFragment == mainActivity().fragment_su_logged_ic_wait_idcard) {
|
deletePerson.setVisibility(View.VISIBLE);
|
}
|
}
|
|
@UiThread
|
public void setIsTempSave(boolean isTempSave) {
|
if (save != null && tempSave != null) {
|
boolean alwaysShowSave = mainActivity().currentFragment == mainActivity().fragment_person_manage &&
|
"已注册".equals(mainActivity().fragment_face_list.isRegister());
|
if (isTempSave && !alwaysShowSave) {
|
save.setVisibility(View.GONE);
|
tempSave.setVisibility(View.VISIBLE);
|
} else {
|
tempSave.setVisibility(View.GONE);
|
save.setVisibility(View.VISIBLE);
|
}
|
}
|
}
|
|
@Click
|
public void save() {
|
mainActivity().fragment_person_manage.savePerson();
|
FaceListFragment.treeAdapter.clearUI();
|
}
|
|
@Click
|
public void tempSave() {
|
mainActivity().fragment_person_manage.savePerson();
|
}
|
|
@Click
|
public void deletePerson() {
|
mainActivity().fragment_person_manage.deletePerson();
|
FaceListFragment.treeAdapter.clearUI();
|
}
|
|
@Click
|
public void giveUpSave() {
|
mainActivity().fragment_person_manage.giveUpSave();
|
}
|
|
public void updateIdentityListUI(ModelAdapter person) {
|
checkedPerson = person;
|
if (checkedPerson == null) {
|
checkThisDevice();
|
checkedIdentityMapByPerson.clear();
|
} else {
|
setDevice(checkedPerson.getString("all_device"));
|
checkedIdentityMapByPerson.clear();
|
checkedIdentityMapByPerson.putAll(PersonIdentityManager.findIdentityMapByPersonId(person.getString(Person.id)));
|
}
|
showIdentityList();
|
}
|
|
public void updateIdentityListUI2(ModelAdapter person) {
|
checkedPerson = person;
|
if (checkedPerson == null) {
|
checkThisDevice();
|
checkedIdentityMapByPerson.clear();
|
} else {
|
setDevice(checkedPerson.getString("all_device"));
|
checkedIdentityMapByPerson.clear();
|
checkedIdentityMapByPerson.putAll(PersonIdentityManager.findIdentityMapByPersonId(person.getString(Person.id)));
|
}
|
showIdentityList();
|
}
|
|
public void updateIdentityListUI1(ModelAdapter person) {
|
checkedPerson = person;
|
if (checkedPerson == null) {
|
checkThisDevice();
|
} else {
|
setDevice(checkedPerson.getString("all_device"));
|
}
|
showIdentityList();
|
}
|
|
@UiThread
|
public void checkThisDevice() {
|
thisDevice.setChecked(true);
|
}
|
|
@UiThread
|
public void setDevice(String all_device) {// 1 所有设备 0 当前设备
|
if ("1".equals(all_device)) {
|
clusterDevices.setChecked(true);
|
} else {
|
thisDevice.setChecked(true);
|
}
|
}
|
|
/**
|
* 保存人员信息时,如果checkedIdentityMapByPerson为null时返回FALSE会影响其他逻辑
|
* 所以写了一个checkedIdentityMapByPerson.keySet().size()方法
|
*/
|
public boolean savePersonIdentity(String personId) {
|
List<String> nameList = new ArrayList<>();
|
for (ModelAdapter identityModelAdapter : checkedIdentityMapByPerson.values()) {
|
if (identityModelAdapter != null && !TextUtils.isEmpty(identityModelAdapter.getString("name"))) {
|
nameList.add(identityModelAdapter.getString("name"));
|
}
|
}
|
if (nameList.contains("黑名单") && nameList.contains("管理员")) {
|
ToastUtil.show("管理员和黑名单不能同时选中");
|
return false;
|
}
|
if (mainActivity().currentFragment == mainActivity().fragment_su_auto_ic_compare_success
|
|| mainActivity().currentFragment == mainActivity().fragment_su_auto_nic_wait_detail
|
|| mainActivity().currentFragment == mainActivity().fragment_sign_up_success
|
|| mainActivity().currentFragment == mainActivity().fragment_su_auto_ic_wait_idcard
|
|| mainActivity().currentFragment == mainActivity().fragment_su_auto_wait_face
|
) {
|
checkedIdentityMapByPerson.clear();
|
String id = BaseSettingManager.getDefaultIdentityId();
|
if (id != null) {
|
if (IdentityManager.findIdentityById(id) == null) {
|
ToastUtil.show("自助注册默认身份出错,请联系管理员");
|
} else {
|
checkedIdentityMapByPerson.put(id, IdentityManager.findIdentityById(id));
|
}
|
}
|
}
|
Map<String, ModelAdapter> dbCheckedIdentityMapByPerson = PersonIdentityManager.findIdentityMapByPersonId(personId);
|
for (String identityId : checkedIdentityMapByPerson.keySet()) {
|
if (!dbCheckedIdentityMapByPerson.containsKey(identityId)) {
|
PersonIdentityManager.save(personId, identityId);
|
if (IdentityManager.findIdentityById(identityId) != null &&
|
"管理员".equals(IdentityManager.findIdentityById(identityId).getString("name"))) {
|
PersonIdentityManager.saveAdminIdentity(personId);
|
}
|
}
|
}
|
for (String identityId : dbCheckedIdentityMapByPerson.keySet()) {
|
if (!checkedIdentityMapByPerson.containsKey(identityId)) {
|
PersonIdentityManager.delete(personId, identityId);
|
if (IdentityManager.findIdentityById(identityId) != null &&
|
"管理员".equals(IdentityManager.findIdentityById(identityId).getString("name"))) {
|
PersonIdentityManager.delAdminIdentity(personId);
|
}
|
}
|
}
|
return true;
|
}
|
|
public String aboutDevice() {
|
if (clusterDevices.isChecked()) {
|
return "1";
|
}
|
if (thisDevice.isChecked()) {
|
return "0";
|
}
|
return null;
|
}
|
|
public int getIdentitySize() {
|
return checkedIdentityMapByPerson.values().size();
|
}
|
|
@Click
|
void next() {
|
int position = identity_list.getFirstVisiblePosition();
|
if (position + 2 > identityList.size()) {
|
position = identityList.size();
|
} else {
|
position += 2;
|
}
|
identity_list.setSelection(position);
|
}
|
|
public void notifyDataSetChanged() {
|
}
|
|
public class ClusterDeviceAdapter extends BaseAdapter {
|
public List<String> checkedDeviceList = new ArrayList<>();
|
private List<ModelAdapter> deviceList = new ArrayList<>();
|
|
public ClusterDeviceAdapter() {
|
}
|
|
public int getCount() {
|
return deviceList == null ? 0 : deviceList.size();
|
}
|
|
public Object getItem(int position) {
|
return deviceList.get(position);
|
}
|
|
public long getItemId(int position) {
|
return position;
|
}
|
|
public View getView(int position, View convertView, ViewGroup parent) {
|
ClusterDeviceAdapter.ViewHolder viewHolder;
|
if (convertView == null) {
|
viewHolder = new ClusterDeviceAdapter.ViewHolder();
|
convertView = LayoutInflater.from(getActivity()).inflate(com.basic.security.utils.ResolutionAdaptation.checkbox_spinner_item(), null);
|
viewHolder.checkBox = convertView.findViewById(com.basic.security.utils.RUtils.R_id_ck_item_spinner);
|
viewHolder.spinner = convertView.findViewById(com.basic.security.utils.RUtils.R_id_spinner_item_spinner);
|
initSpinner(viewHolder.spinner);
|
convertView.setTag(viewHolder);
|
} else {
|
viewHolder = (ClusterDeviceAdapter.ViewHolder) convertView.getTag();
|
}
|
viewHolder.checkBox.setText(deviceList.get(position).getString("name"));
|
checkedDeviceList.add(deviceList.get(position).getString("name"));
|
ClusterDeviceAdapter.ViewHolder finalViewHolder = viewHolder;
|
viewHolder.checkBox.setOnCheckedChangeListener((buttonView, isChecked) -> {
|
if (finalViewHolder.checkBox.isChecked()) {
|
checkedDeviceList.add(deviceList.get(position).getString("name"));
|
} else {
|
if (checkedDeviceList.contains(deviceList.get(position).getString("name"))) {
|
checkedDeviceList.remove(deviceList.get(position).getString("name"));
|
}
|
}
|
});
|
return convertView;
|
}
|
|
private void initSpinner(Spinner spinner) {
|
String[] signUpRuleArray = {"允许通行", "有效时间内通行", "确认通行", "拒绝通行"};
|
ArrayAdapter<String> adapter = new ArrayAdapter<String>(getContext(), com.basic.security.utils.ResolutionAdaptation.spinner_item(), signUpRuleArray);
|
spinner.setPopupBackgroundResource(com.basic.security.utils.RUtils.R_color_press_menu_text);
|
spinner.setAdapter(adapter);
|
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
|
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
|
}
|
|
public void onNothingSelected(AdapterView<?> parent) {
|
}
|
});
|
}
|
|
class ViewHolder {
|
CheckBox checkBox;
|
Spinner spinner;
|
}
|
}
|
|
public class IdentityAdapter extends CommonAdapter<ModelAdapter> {
|
public IdentityAdapter(Context context, int layoutId, List<ModelAdapter> datas) {
|
super(context, layoutId, datas);
|
}
|
|
protected void convert(ViewHolder viewHolder, ModelAdapter identity, int position) {
|
CheckBox identityCB = viewHolder.getView(com.basic.security.utils.RUtils.R_id_identity_checkbox);
|
identityCheckBoxSet.add(identityCB);
|
identityCB.setText(identity.getString("name"));
|
identityCB.setTag(identity);
|
identityCB.setChecked(checkedIdentityMapByPerson.containsKey(identity.getId()));
|
identityCB.setClickable(true);
|
if (checkedPerson != null && "1".equals(checkedPerson.getString("auto_init"))) {
|
identityCB.setClickable(false);
|
} else {
|
identityCB.setClickable(true);
|
identityCB.setOnCheckedChangeListener((buttonView, isChecked) -> {
|
if (isChecked) {
|
if (!checkedIdentityMapByPerson.containsKey(identity.getId())) {
|
checkedIdentityMapByPerson.put(identity.getId(), identity);
|
}
|
} else {
|
if (checkedIdentityMapByPerson.containsKey(identity.getId())) {
|
checkedIdentityMapByPerson.remove(identity.getId());
|
}
|
}
|
identityAdapter.notifyDataSetChanged();
|
});
|
}
|
}
|
}
|
}
|