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<String, ModelAdapter> checkDeviceMap = new HashMap<>();
|
private List<String> applyDeviceList;
|
private String remindTime = "分钟";
|
private List<ModelAdapter> allTimeRule;
|
private TimeRuleAdapter timeRuleAdapter;
|
private int intTag = -1;
|
private int intAccessPassTag = 0;
|
private int intNotReachTimeTag = 1;
|
private int intConfirmPassTag = 2;
|
private List<String> mList = new ArrayList<>();
|
private List<String> 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<ModelAdapter> 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<String> 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<ModelAdapter> 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<ModelAdapter> timeRuleList;
|
|
TimeRuleAdapter(List<ModelAdapter> 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<ModelAdapter> allDevice;
|
private boolean allChecked;
|
|
AllDeviceAdapter(List<ModelAdapter> 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;
|
}
|
}
|
}
|