package com.basic.security.fragment; import android.annotation.SuppressLint; import android.os.Bundle; 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.EditText; import android.widget.GridView; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.ListView; import android.widget.RadioButton; import android.widget.RelativeLayout; import android.widget.ScrollView; import android.widget.Spinner; import android.widget.TextView; import com.basic.security.base.BaseFragment; import com.basic.security.manager.BusinessDetailManager; import com.basic.security.manager.BusinessListManager; import com.basic.security.manager.BusinessManager; import com.basic.security.manager.TimeManager; 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.ResolutionAdaptation; import com.basic.security.utils.SocketUtil; import com.basic.security.utils.ToastUtil; import org.androidannotations.annotations.Click; import org.androidannotations.annotations.EFragment; import org.androidannotations.annotations.ViewById; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Objects; /** * 新建业务表名称页面 */ @EFragment public class RuleDetailFragment extends BaseFragment { @ViewById public RelativeLayout rl_check_hint; @ViewById public ScrollView scrollView; @ViewById EditText et_business_name, et_only_allow_start, et_only_allow_end, et_search_device, et_access_hint, et_not_reached_time_hint, et_not_reached_time_remind, et_confirm_pass_hint; @ViewById RadioButton rb_only_allow, rb_choose_from_time_rule, rb_check_all_device; @ViewById LinearLayout ll_choose_from_time_rule; @ViewById ListView lv_choose_from_time_rule, lv_choose_from_all_device; @ViewById ImageView iv_search_device, iv_access_hint_check, iv_access_hint_show, iv_not_reached_time_check, iv_not_reached_time_show, iv_confirm_pass_check, iv_confirm_pass_show; @ViewById Button btn_reset, btn_save_business, btn_check_message_save, btn_check_message_cancel; @ViewById CheckBox ck_access_table_name, ck_access_identity, ck_access_name, ck_confirm_pass_identity, ck_confirm_pass_name; @ViewById GridView gv_hint; @ViewById Spinner time_unit; private AllDeviceAdapter allDeviceAdapter; private ModelAdapter business; private boolean createNew; private String checkedTimeRuleId = ""; private Map checkDeviceMap = new HashMap<>(); private List applyDeviceList; private String remindTime = "分钟"; private List allTimeRule; private TimeRuleAdapter timeRuleAdapter; private int intTag = -1; private int intAccessPassTag = 0; private int intNotReachTimeTag = 1; private int intConfirmPassTag = 2; private List mList = new ArrayList<>(); private List currentCheckedMessages = new ArrayList<>(); private boolean showData = false; private int temple = -1; public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(ResolutionAdaptation.fragment_rule_detail(), container, false); } @Click void rb_only_allow() { rb_only_allow.setChecked(true); rb_choose_from_time_rule.setChecked(false); ll_choose_from_time_rule.setVisibility(View.GONE); } @Click void rb_choose_from_time_rule() { rb_only_allow.setChecked(false); rb_choose_from_time_rule.setChecked(true); ll_choose_from_time_rule.setVisibility(View.VISIBLE); } @Click void et_only_allow_start() { KeyboardUtil.hideSoftKeyboard(); DateEditUtil.showStartAndEndDate(et_only_allow_start, et_only_allow_end); } @Click void et_only_allow_end() { KeyboardUtil.hideSoftKeyboard(); DateEditUtil.showDate(et_only_allow_end); } @Click void rb_check_all_device() { rb_check_all_device.setChecked(true); allDeviceAdapter.checked(true); allDeviceAdapter.notifyDataSetChanged(); } @Click void btn_reset() { rb_check_all_device.setChecked(false); allDeviceAdapter.checked(false); allDeviceAdapter.notifyDataSetChanged(); } @Click void iv_access_hint_check() { KeyboardUtil.hideSoftKeyboard(); intTag = intAccessPassTag; showPopupWindow(intTag); } @Click void iv_access_hint_show() { KeyboardUtil.hideSoftKeyboard(); String message = ""; if (ck_access_table_name.isChecked()) { message = "家长会 "; } if (ck_access_identity.isChecked()) { message = message + "家长 "; } if (ck_access_name.isChecked()) { message = message + "刘克 "; } if (!TextUtils.isEmpty(et_access_hint.getText().toString().trim())) { message = message + et_access_hint.getText().toString().trim(); } if (!TextUtils.isEmpty(message)) { ToastUtil.show(message); } } @Click void iv_not_reached_time_check() { KeyboardUtil.hideSoftKeyboard(); intTag = intNotReachTimeTag; showPopupWindow(intTag); } @Click void iv_not_reached_time_show() { KeyboardUtil.hideSoftKeyboard(); ToastUtil.show(et_not_reached_time_hint.getText().toString()); } @Click void iv_confirm_pass_check() { KeyboardUtil.hideSoftKeyboard(); intTag = intConfirmPassTag; showPopupWindow(intTag); } @Click void iv_confirm_pass_show() { KeyboardUtil.hideSoftKeyboard(); String message = ""; if (ck_confirm_pass_identity.isChecked()) { message = "家长 "; } if (ck_confirm_pass_name.isChecked()) { message = message + "刘克 "; } if (!TextUtils.isEmpty(et_confirm_pass_hint.getText().toString().trim())) { message = message + et_confirm_pass_hint.getText().toString().trim(); } if (!TextUtils.isEmpty(message)) { ToastUtil.show(message); } } @Click void btn_save_business() { if (business == null) { business = new ModelAdapter(); } String business_name = et_business_name.getText().toString().trim(); if (TextUtils.isEmpty(business_name)) { ToastUtil.show("业务表名称不能为空"); return; } if (createNew) { List businessList = BusinessListManager.getBusinessList(); for (ModelAdapter businessName : businessList) { if (business_name.equals(businessName.getString("business_name"))) { ToastUtil.show("已有此业务表名称,请更改业务表名称"); return; } } } business.setString("business_name", business_name); if (rb_only_allow.isChecked()) { business.setString("only_allow", "1"); business.setString("choose_from_time_rule", "0"); String startTime = et_only_allow_start.getText().toString().trim(); String endTime = et_only_allow_end.getText().toString().trim(); business.setString("only_allow_start", DateUtil.getDefaultTimeStamp(startTime) + ""); business.setString("only_allow_end", DateUtil.getDefaultTimeStamp(endTime) + ""); } if (rb_choose_from_time_rule.isChecked()) { business.setString("choose_from_time_rule", "1"); business.setString("only_allow", "0"); business.setString("checked_time_rule_id", checkedTimeRuleId); } saveCheckedDevice(business); business.setString("access_identity", ck_access_identity.isChecked() ? "1" : "0"); business.setString("access_table_name", ck_access_table_name.isChecked() ? "1" : "0"); business.setString("access_name", ck_access_name.isChecked() ? "1" : "0"); String access_hint = et_access_hint.getText().toString().trim(); if (TextUtils.isEmpty(access_hint)) { ToastUtil.show("允许通行提示语不能为空"); return; } business.setString("access_hint", access_hint); String not_reached_time_hint = et_not_reached_time_hint.getText().toString().trim(); if (TextUtils.isEmpty(not_reached_time_hint)) { ToastUtil.show("未到通行时间提示语不能为空"); return; } business.setString("not_reached_time_hint", not_reached_time_hint); String not_reached_time_remind = et_not_reached_time_remind.getText().toString().trim(); if (TextUtils.isEmpty(not_reached_time_remind)) { ToastUtil.show("开始时间前提示时间不能为空"); return; } business.setString("not_reached_time_remind", not_reached_time_remind); business.setString("time_unit", remindTime); business.setString("confirm_pass_identity", ck_confirm_pass_identity.isChecked() ? "1" : "0"); business.setString("confirm_pass_name", ck_confirm_pass_name.isChecked() ? "1" : "0"); String confirm_pass_hint = et_confirm_pass_hint.getText().toString().trim(); if (TextUtils.isEmpty(confirm_pass_hint)) { ToastUtil.show("确认通行提示语不能为空"); return; } business.setString("confirm_pass_hint", confirm_pass_hint); business.setString("create_time", System.currentTimeMillis() + ""); business.setString("table", "business"); BusinessManager.saveBusiness(business); ToastUtil.show("保存成功"); SocketUtil.rpcCallSaveBusinessRule(business); showFragment(mainActivity().fragment_rule_list); business = null; } private void saveCheckedDevice(ModelAdapter business) { applyDeviceList = BusinessDetailManager.getDeviceByBusiness(business.getId()); for (String checkedDeviceId : checkDeviceMap.keySet()) { if (!TextUtils.isEmpty(checkedDeviceId)) { applyDeviceList.remove(checkedDeviceId); BusinessDetailManager.save(business.getId(), checkedDeviceId); } } for (String deviceId : applyDeviceList) { BusinessDetailManager.delete(business.getId(), deviceId); } } public void hide() { super.hide(); intTag = -1; } public void show() { super.show(); try { scrollView.fullScroll(ScrollView.FOCUS_UP); checkedTimeRuleId = ""; if (business == null) { business = new ModelAdapter(); et_only_allow_start.setText(DateUtil.formatTime(DateUtil.getTimesMorning(), "yyyy/MM/dd HH:mm")); et_only_allow_end.setText(DateUtil.formatTime(DateUtil.getTimesNight(), "yyyy/MM/dd HH:mm")); rb_only_allow(); showData = false; } else { if ("1".equals(business.getString("choose_from_time_rule"))) { checkedTimeRuleId = business.getString("checked_time_rule_id"); rb_choose_from_time_rule(); } else { String start_time = DateUtil.formatTime(Long.parseLong(business.getString("only_allow_start")), "yyyy/MM/dd HH:mm"); String end_time = DateUtil.formatTime(Long.parseLong(business.getString("only_allow_end")), "yyyy/MM/dd HH:mm"); et_only_allow_start.setText(start_time); et_only_allow_end.setText(end_time); rb_only_allow(); } remindTime = business.getString("time_unit"); applyDeviceList = BusinessDetailManager.getDeviceByBusiness(business.getId()); showData = true; } et_business_name.setText(business.getString("business_name")); et_search_device.setText(""); et_access_hint.setText(business.getString("access_hint").equals("") ? "欢迎光临" : business.getString("access_hint")); et_not_reached_time_hint.setText(business.getString("not_reached_time_hint").equals("") ? "未到通行时间,请稍后" : business.getString("not_reached_time_hint")); et_not_reached_time_remind.setText(business.getString("not_reached_time_remind").equals("") ? "30" : business.getString("not_reached_time_remind")); et_confirm_pass_hint.setText(business.getString("confirm_pass_hint").equals("") ? "业务表确认通行" : business.getString("confirm_pass_hint")); ck_access_identity.setChecked("1".equals(business.getString("access_identity"))); ck_access_table_name.setChecked("1".equals(business.getString("access_table_name"))); ck_access_name.setChecked("1".equals(business.getString("access_name"))); ck_confirm_pass_identity.setChecked("1".equals(business.getString("confirm_pass_identity"))); ck_confirm_pass_name.setChecked("1".equals(business.getString("confirm_pass_name"))); aboutTimeRule(); aboutAllDevice(); timeUnitCombox(); } catch (Exception e) { e.printStackTrace(); } } private void aboutTimeRule() { allTimeRule = TimeManager.getAllUseTimeRule(); timeRuleAdapter = new TimeRuleAdapter(allTimeRule); lv_choose_from_time_rule.setAdapter(timeRuleAdapter); lv_choose_from_time_rule.setOnItemClickListener((parent, view, position, id) -> { checkedTimeRuleId = allTimeRule.get(position).getId(); timeRuleAdapter.notifyDataSetChanged(); }); } private void timeUnitCombox() { String[] arr = {"分钟", "小时", "天"}; ArrayAdapter adapter = new ArrayAdapter<>(Objects.requireNonNull(getContext()), com.basic.security.utils.ResolutionAdaptation.spinner_item(), arr); time_unit.setPopupBackgroundResource(com.basic.security.utils.RUtils.R_color_press_menu_text); time_unit.setAdapter(adapter); time_unit.setSelection(Arrays.binarySearch(arr, remindTime), true); time_unit.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { public void onItemSelected(AdapterView parent, View view, int position, long id) { remindTime = arr[position]; } public void onNothingSelected(AdapterView parent) { } }); } private void aboutAllDevice() { List allDevice = new ArrayList<>(); allDevice.clear(); allDevice = BusinessDetailManager.getDeviceDataList(); allDeviceAdapter = new AllDeviceAdapter(allDevice); lv_choose_from_all_device.setAdapter(allDeviceAdapter); } private void showPopupWindow(int tag) { mList.clear(); currentCheckedMessages.clear(); if (tag == intAccessPassTag) { for (int i = 0; i < 5; i++) { mList.add("欢迎光临" + i); } } else if (tag == intNotReachTimeTag) { for (int i = 0; i < 6; i++) { mList.add("未到通行时间" + i); } } else if (tag == intConfirmPassTag) { for (int i = 0; i < 7; i++) { mList.add("确认通行" + i); } } rl_check_hint.setVisibility(View.VISIBLE); gv_hint.setAdapter(new gridViewAdapter()); } @Click void btn_check_message_save() { temple = -1; if (currentCheckedMessages.size() > 1) { ToastUtil.show("只能选一个"); return; } rl_check_hint.setVisibility(View.GONE); if (currentCheckedMessages.size() == 1) { if (intTag == intAccessPassTag) { et_access_hint.setText(currentCheckedMessages.get(0)); } else if (intTag == intNotReachTimeTag) { et_not_reached_time_hint.setText(currentCheckedMessages.get(0)); } else if (intTag == intConfirmPassTag) { et_confirm_pass_hint.setText(currentCheckedMessages.get(0)); } } intTag = -1; } @Click void btn_check_message_cancel() { temple = -1; rl_check_hint.setVisibility(View.GONE); intTag = -1; } public void setBusinessDetailDocument(ModelAdapter business, boolean needCreateNew) { createNew = needCreateNew; this.business = business; } private class TimeRuleAdapter extends BaseAdapter { private List timeRuleList; TimeRuleAdapter(List timeRuleList) { this.timeRuleList = timeRuleList; } public int getCount() { return timeRuleList == null ? 0 : timeRuleList.size(); } public Object getItem(int position) { return timeRuleList.get(position); } public long getItemId(int position) { return position; } @SuppressLint("InflateParams") public View getView(int position, View convertView, ViewGroup parent) { ViewHolder viewHolder; if (convertView == null) { viewHolder = new ViewHolder(); convertView = LayoutInflater.from(getActivity()).inflate(com.basic.security.utils.ResolutionAdaptation.business_time_rule(), null); viewHolder.radio_button = convertView.findViewById(com.basic.security.utils.RUtils.R_id_radio_button); viewHolder.tv_message = convertView.findViewById(com.basic.security.utils.RUtils.R_id_tv_message); convertView.setTag(viewHolder); } else { viewHolder = (ViewHolder) convertView.getTag(); } viewHolder.tv_message.setText(timeRuleList.get(position).getString("time_rule_name")); viewHolder.radio_button.setChecked(false); if (timeRuleList.get(position).getId().equals(checkedTimeRuleId)) { viewHolder.radio_button.setChecked(true); } return convertView; } class ViewHolder { RadioButton radio_button; TextView tv_message; } } private class AllDeviceAdapter extends BaseAdapter { private List allDevice; private boolean allChecked; AllDeviceAdapter(List allDevice) { this.allDevice = allDevice; } public void checked(boolean checkedAll) { allChecked = checkedAll; } public int getCount() { return allDevice == null ? 0 : allDevice.size(); } public Object getItem(int position) { return allDevice.get(position); } public long getItemId(int position) { return position; } @SuppressLint("SetTextI18n") public View getView(int position, View convertView, ViewGroup parent) { View view; ViewHolder viewHolder; if (convertView == null) { viewHolder = new ViewHolder(); view = LayoutInflater.from(getContext()).inflate(com.basic.security.utils.ResolutionAdaptation.item_identity_list(), parent, false); viewHolder.checkBox = view.findViewById(com.basic.security.utils.RUtils.R_id_item_ck); view.setTag(viewHolder); } else { view = convertView; viewHolder = (ViewHolder) view.getTag(); } viewHolder.checkBox.setText(" " + allDevice.get(position).getString("name")); if (allChecked) { viewHolder.checkBox.setChecked(true); } else { viewHolder.checkBox.setChecked(false); } if (showData && applyDeviceList != null && applyDeviceList.contains(allDevice.get(position).getId())) { viewHolder.checkBox.setChecked(true); } viewHolder.checkBox.setOnCheckedChangeListener((buttonView, isChecked) -> { if (isChecked) { if (!checkDeviceMap.containsKey(allDevice.get(position).getId())) { checkDeviceMap.put(allDevice.get(position).getId(), allDevice.get(position)); } } else { checkDeviceMap.remove(allDevice.get(position).getId()); } }); return view; } class ViewHolder { CheckBox checkBox; } } private class gridViewAdapter extends BaseAdapter { public int getCount() { return mList == null ? 0 : mList.size(); } public Object getItem(int position) { return mList.get(position); } public long getItemId(int position) { return position; } public View getView(int position, View convertView, ViewGroup parent) { ViewHolder viewHolder; if (convertView == null) { convertView = LayoutInflater.from(getContext()).inflate(com.basic.security.utils.ResolutionAdaptation.item_identity_list(), parent, false); viewHolder = new ViewHolder(); viewHolder.checkBox = convertView.findViewById(com.basic.security.utils.RUtils.R_id_item_ck); convertView.setTag(viewHolder); } else { viewHolder = (ViewHolder) convertView.getTag(); } viewHolder.checkBox.setText(mList.get(position)); viewHolder.checkBox.setId(position * 9); viewHolder.checkBox.setOnCheckedChangeListener((buttonView, isChecked) -> { if (isChecked) { currentCheckedMessages.clear(); currentCheckedMessages.add(mList.get(position)); if (temple != -1) { CheckBox tempButton = Objects.requireNonNull(getActivity()).findViewById(temple); if (tempButton != null) { tempButton.setChecked(false); } } temple = buttonView.getId(); } }); if (position == temple) { viewHolder.checkBox.setChecked(true); } else { viewHolder.checkBox.setChecked(false); } return convertView; } class ViewHolder { private CheckBox checkBox; } } }