package com.basic.security.fragment; 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.ImageView; import android.widget.ListView; import android.widget.RelativeLayout; import android.widget.Spinner; import android.widget.TextView; import com.basic.security.base.BaseFragment; import com.basic.security.manager.TimeManager; import com.basic.security.model.ModelAdapter; import com.basic.security.utils.DateEditUtilForValidTime; 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.AfterViews; import org.androidannotations.annotations.Click; import org.androidannotations.annotations.EFragment; import org.androidannotations.annotations.ViewById; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.List; /** * 新增时间规则页面 */ @EFragment public class TimeRuleAddFragment extends BaseFragment { @ViewById EditText et_time_rule_name; @ViewById TextView tv_add_time_rule_week, tv_add_time_rule_date; @ViewById Button btn_time_rule_save, btn_time_rule_cancel; @ViewById ListView lv_week, lv_date; @ViewById RelativeLayout rl_week, rl_date; @ViewById ImageView tv_add_item; private ModelAdapter timeRule; private WeekAdapter weekAdapter; private DateAdapter dateAdapter; private List weekIsCheckedList = new ArrayList<>();// 按周 private List weekList = new ArrayList<>(); // 按周 日期名称 private List startTimeList = new ArrayList<>();// 按周 private List endTimeList = new ArrayList<>();// 按周 private List weekTagList = new ArrayList<>();// 按周 中1代表原来的, 0 代表复制的 private String timeRuleName = ""; private List dataIsCheckList = new ArrayList<>(); // 按日期 // 是否选中 private List dataTimeOrderList = new ArrayList<>(); // 按日期 时间序号 private List dataValidTimeList = new ArrayList<>(); // 按日期 有效时间 private List dataStationList = new ArrayList<>(); // 按日期 允许通行/禁止通行 private CheckBox ck_week_head_isChecked; private CheckBox ck_data_head_isChecked; public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(ResolutionAdaptation.fragment_time_rule_add(), container, false); } @Click void tv_add_time_rule_week() { KeyboardUtil.hideSoftKeyboard(); tv_add_time_rule_date.setBackgroundResource(com.basic.security.utils.RUtils.R_drawable_bg_time_rule_add_no_checked); tv_add_time_rule_week.setBackground(null); rl_week.setVisibility(View.VISIBLE); rl_date.setVisibility(View.GONE); } @Click void tv_add_time_rule_date() { KeyboardUtil.hideSoftKeyboard(); tv_add_time_rule_week.setBackgroundResource(com.basic.security.utils.RUtils.R_drawable_bg_time_rule_add_no_checked); tv_add_time_rule_date.setBackground(null); rl_week.setVisibility(View.GONE); rl_date.setVisibility(View.VISIBLE); } @Click void btn_time_rule_save() { if (timeRule == null) { timeRule = new ModelAdapter(); } String name = et_time_rule_name.getText().toString().trim(); if (TextUtils.isEmpty(name)) { ToastUtil.show("规则名称不能为空"); return; } if (!name.equals(timeRuleName)) { // 当时间规则名称改变时,才判断是否已存在此事件规则名称 if (TimeManager.isContain(name)) { ToastUtil.show("已有此规则名称,请更改规则名称"); return; } } timeRule.setString("time_rule_name", name); // 判断周的起始时间 不能大于结束时间, 时间组合必须有效 for (int i = 0; i < startTimeList.size(); i++) { if (TextUtils.isEmpty(startTimeList.get(i)) && !TextUtils.isEmpty(endTimeList.get(i))) { ToastUtil.show("请选择开始时间"); return; } if (!TextUtils.isEmpty(startTimeList.get(i)) && TextUtils.isEmpty(endTimeList.get(i))) { ToastUtil.show("请选择结束时间"); return; } SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss"); try { if (dateFormat.parse(startTimeList.get(i)).getTime() > dateFormat.parse(endTimeList.get(i)).getTime()) { ToastUtil.show("按周结束时间必须大于开始时间"); return; } } catch (ParseException e) { e.printStackTrace(); } } JSONArray jsonArray = new JSONArray(); for (int i = 0; i < weekList.size(); i++) { JSONObject jsonObject = new JSONObject(); try { jsonObject.put("isChecked", weekIsCheckedList.get(i)); jsonObject.put("week", weekList.get(i)); jsonObject.put("startTime", startTimeList.get(i)); jsonObject.put("endTime", endTimeList.get(i)); jsonObject.put("weekTag", weekTagList.get(i)); jsonArray.put(jsonObject); } catch (JSONException e) { e.printStackTrace(); } } timeRule.setString("week_json", jsonArray.toString().replace("\"", "`")); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm"); for (int i = 0; i < dataValidTimeList.size(); i++) { try { String start_time = dataValidTimeList.get(i).split("-")[0]; String end_time = dataValidTimeList.get(i).split("-")[1]; if (dateFormat.parse(start_time).getTime() > dateFormat.parse(end_time).getTime()) { ToastUtil.show("按日期结束时间必须大于开始时间"); return; } } catch (ParseException e) { e.printStackTrace(); } } JSONArray jsonArray2 = new JSONArray(); for (int i = 0; i < dataIsCheckList.size(); i++) { JSONObject jsonObject = new JSONObject(); try { jsonObject.put("isChecked", dataIsCheckList.get(i)); jsonObject.put("timeOrder", dataTimeOrderList.get(i)); jsonObject.put("validTime", dataValidTimeList.get(i)); jsonObject.put("station", dataStationList.get(i)); jsonArray2.put(jsonObject); } catch (JSONException e) { e.printStackTrace(); } } timeRule.setString("date_json", jsonArray2.toString().replace("\"", "`")); timeRule.setString("is_use", "1"); timeRule.setString("table", "time"); TimeManager.saveTime(timeRule); ToastUtil.show("保存成功"); SocketUtil.rpcCallSaveTimeRule(timeRule); showFragment(mainActivity().fragment_time_rule); } @Click void tv_add_item() { dataIsCheckList.add("1"); dataTimeOrderList.add(""); String timesMorning = DateUtil.formatTime(DateUtil.getTimesMorning(), "yyyy/MM/dd HH:mm"); String timesNight = DateUtil.formatTime(DateUtil.getTimesNight(), "yyyy/MM/dd HH:mm"); dataValidTimeList.add(timesMorning + "-" + timesNight); dataStationList.add("允许通行"); dateAdapter.notifyDataSetChanged(); } @Click void btn_time_rule_cancel() { showFragment(mainActivity().fragment_time_rule); } @AfterViews void init() { View week_head_view = View.inflate(getContext(), com.basic.security.utils.ResolutionAdaptation.time_rule_week_head(), null); lv_week.addHeaderView(week_head_view); ck_week_head_isChecked = week_head_view.findViewById(com.basic.security.utils.RUtils.R_id_ck_week_head); View data_head_view = View.inflate(getContext(), com.basic.security.utils.ResolutionAdaptation.time_rule_date_head(), null); lv_date.addHeaderView(data_head_view); ck_data_head_isChecked = data_head_view.findViewById(com.basic.security.utils.RUtils.R_id_ck_data_head); weekAdapter = new WeekAdapter(); dateAdapter = new DateAdapter(); } public void show() { super.show(); tv_add_time_rule_week(); weekIsCheckedList.clear(); weekList.clear(); weekTagList.clear(); startTimeList.clear(); endTimeList.clear(); dataIsCheckList.clear(); dataTimeOrderList.clear(); dataValidTimeList.clear(); dataStationList.clear(); if (timeRule == null) { timeRule = new ModelAdapter(); weekList.add("星期一"); weekList.add("星期二"); weekList.add("星期三"); weekList.add("星期四"); weekList.add("星期五"); weekList.add("星期六"); weekList.add("星期日"); for (int i = 0; i < 7; i++) { weekIsCheckedList.add("1"); weekTagList.add("1"); startTimeList.add("09:00:00"); endTimeList.add("17:00:00"); } for (int i = 0; i < 3; i++) { tv_add_item(); } } else { try { JSONArray jsonArray = new JSONArray(timeRule.getString("week_json").replace("`", "\"")); for (int i = 0; i < jsonArray.length(); i++) { JSONObject jsonObject = jsonArray.getJSONObject(i); weekIsCheckedList.add(jsonObject.getString("isChecked")); weekList.add(jsonObject.getString("week")); startTimeList.add(jsonObject.getString("startTime")); endTimeList.add(jsonObject.getString("endTime")); weekTagList.add(jsonObject.getString("weekTag")); } } catch (JSONException e) { e.printStackTrace(); } try { JSONArray jsonArray = new JSONArray(timeRule.getString("date_json").replace("`", "\"")); for (int i = 0; i < jsonArray.length(); i++) { JSONObject jsonObject = jsonArray.getJSONObject(i); dataIsCheckList.add(jsonObject.getString("isChecked")); dataTimeOrderList.add(jsonObject.getString("timeOrder")); dataValidTimeList.add(jsonObject.getString("validTime")); dataStationList.add(jsonObject.getString("station")); } } catch (JSONException e) { e.printStackTrace(); } } timeRuleName = timeRule.getString("time_rule_name"); et_time_rule_name.setText(timeRuleName); lv_week.setAdapter(weekAdapter); lv_date.setAdapter(dateAdapter); allWeekCheckedListener(); allDataCheckedListener(); } // 监听周全选按钮是否选中 private void allWeekCheckedListener() { ck_week_head_isChecked.setOnClickListener(v -> { if (ck_week_head_isChecked.isChecked()) { for (int i = 0; i < weekIsCheckedList.size(); i++) { weekIsCheckedList.set(i, "1"); } } else { for (int i = 0; i < weekIsCheckedList.size(); i++) { weekIsCheckedList.set(i, "0"); } } weekAdapter.notifyDataSetChanged(); }); if (weekIsCheckedList.contains("0")) { ck_week_head_isChecked.setChecked(false); } else { ck_week_head_isChecked.setChecked(true); } } private void allDataCheckedListener() { ck_data_head_isChecked.setOnClickListener(v -> { if (ck_data_head_isChecked.isChecked()) { for (int i = 0; i < dataIsCheckList.size(); i++) { dataIsCheckList.set(i, "1"); } } else { for (int i = 0; i < dataIsCheckList.size(); i++) { dataIsCheckList.set(i, "0"); } } dateAdapter.notifyDataSetChanged(); }); if (dataIsCheckList.contains("0")) { ck_data_head_isChecked.setChecked(false); } else { ck_data_head_isChecked.setChecked(true); } } //从timeRuleFragment 传过来的数据 public void getRuleData(ModelAdapter timeRule) { this.timeRule = timeRule; } private class WeekAdapter extends BaseAdapter { public int getCount() { return weekList == null ? 0 : weekList.size(); } public Object getItem(int position) { return weekList.get(position); } public long getItemId(int position) { return position; } public View getView(int position, View convertView, ViewGroup parent) { ViewHolder viewHolder; if (convertView == null) { viewHolder = new ViewHolder(); convertView = LayoutInflater.from(getContext()).inflate(com.basic.security.utils.ResolutionAdaptation.time_rule_week_item(), null); viewHolder.isChecked = convertView.findViewById(com.basic.security.utils.RUtils.R_id_ck_time_rule_item); viewHolder.data = convertView.findViewById(com.basic.security.utils.RUtils.R_id_tv_time_rule_item_data); viewHolder.start_time = convertView.findViewById(com.basic.security.utils.RUtils.R_id_et_time_rule_item_start); viewHolder.end_time = convertView.findViewById(com.basic.security.utils.RUtils.R_id_et_time_rule_item_end); viewHolder.add = convertView.findViewById(com.basic.security.utils.RUtils.R_id_tv_time_rule_item_add); viewHolder.copy = convertView.findViewById(com.basic.security.utils.RUtils.R_id_tv_time_rule_item_copy); viewHolder.delete = convertView.findViewById(com.basic.security.utils.RUtils.R_id_tv_time_rule_item_delete); convertView.setTag(viewHolder); } else { viewHolder = (ViewHolder) convertView.getTag(); } viewHolder.isChecked.setChecked("1".equals(weekIsCheckedList.get(position))); viewHolder.data.setText(weekList.get(position)); viewHolder.start_time.setText(startTimeList.get(position)); viewHolder.end_time.setText(endTimeList.get(position)); viewHolder.add.setVisibility(View.GONE); viewHolder.copy.setVisibility(View.GONE); viewHolder.delete.setVisibility(View.GONE); if ("1".equals(weekTagList.get(position))) { // 原来的 viewHolder.add.setVisibility(View.VISIBLE); viewHolder.copy.setVisibility(View.VISIBLE); viewHolder.add.setBackgroundResource(com.basic.security.utils.RUtils.R_color_add_week_bg); viewHolder.copy.setBackgroundResource(com.basic.security.utils.RUtils.R_color_copy_week_bg); } else {// 新加的周几 viewHolder.delete.setVisibility(View.VISIBLE); viewHolder.delete.setBackgroundResource(com.basic.security.utils.RUtils.R_color_copy_week_bg); viewHolder.copy.setVisibility(View.VISIBLE); viewHolder.copy.setBackgroundResource(com.basic.security.utils.RUtils.R_color_add_week_bg); } ViewHolder finalViewHolder = viewHolder; viewHolder.isChecked.setOnCheckedChangeListener((buttonView, isChecked) -> { if (isChecked) { weekIsCheckedList.set(position, "1"); } else { weekIsCheckedList.set(position, "0"); } allWeekCheckedListener(); }); viewHolder.start_time.setOnClickListener(v -> DateEditUtilForValidTime.showEndOneDate(finalViewHolder.start_time, "开始", (start_time, end_time) -> { // 如果点击取消按钮,没有数据回调 startTimeList.set(position, end_time); })); viewHolder.end_time.setOnClickListener(v -> DateEditUtilForValidTime.showEndOneDate(finalViewHolder.end_time, "结束", (start_time, end_time) -> endTimeList.set(position, end_time))); viewHolder.add.setOnClickListener(v -> { weekIsCheckedList.add(position + 1, "0"); weekList.add(position + 1, weekList.get(position)); weekTagList.add(position + 1, "0"); startTimeList.set(position, finalViewHolder.start_time.getText().toString()); endTimeList.set(position, finalViewHolder.end_time.getText().toString()); startTimeList.add(position + 1, ""); endTimeList.add(position + 1, ""); weekAdapter.notifyDataSetChanged(); }); viewHolder.copy.setOnClickListener(v -> { weekIsCheckedList.add(position + 1, weekIsCheckedList.get(position)); weekList.add(position + 1, weekList.get(position)); weekTagList.add(position + 1, "0"); startTimeList.set(position, finalViewHolder.start_time.getText().toString()); endTimeList.set(position, finalViewHolder.end_time.getText().toString()); startTimeList.add(position + 1, finalViewHolder.start_time.getText().toString()); endTimeList.add(position + 1, finalViewHolder.end_time.getText().toString()); weekAdapter.notifyDataSetChanged(); }); viewHolder.delete.setOnClickListener(v -> { weekIsCheckedList.remove(position); weekList.remove(position); weekTagList.remove(position); startTimeList.remove(position); endTimeList.remove(position); weekAdapter.notifyDataSetChanged(); }); return convertView; } class ViewHolder { CheckBox isChecked; TextView data, add, copy, delete; EditText start_time, end_time; } } private class DateAdapter extends BaseAdapter { public int getCount() { return dataIsCheckList == null ? 0 : dataIsCheckList.size(); } public Object getItem(int position) { return dataIsCheckList.get(position); } public long getItemId(int position) { return position; } public View getView(final int position, View convertView, ViewGroup parent) { ViewHolder viewHolder; if (convertView == null) { viewHolder = new ViewHolder(); convertView = LayoutInflater.from(getContext()).inflate(com.basic.security.utils.ResolutionAdaptation.time_rule_date_item(), null); viewHolder.isChecked = convertView.findViewById(com.basic.security.utils.RUtils.R_id_ck_date_item); viewHolder.time_order = convertView.findViewById(com.basic.security.utils.RUtils.R_id_tv_date_order); viewHolder.time_valid = convertView.findViewById(com.basic.security.utils.RUtils.R_id_tv_date_valid); viewHolder.spinner_check = convertView.findViewById(com.basic.security.utils.RUtils.R_id_spinner_date); viewHolder.delete = convertView.findViewById(com.basic.security.utils.RUtils.R_id_iv_date_delete); convertView.setTag(viewHolder); } else { viewHolder = (ViewHolder) convertView.getTag(); } ViewHolder finalViewHolder = viewHolder; viewHolder.isChecked.setChecked("1".equals(dataIsCheckList.get(position))); viewHolder.isChecked.setOnCheckedChangeListener((buttonView, isChecked) -> { if (isChecked) { dataIsCheckList.set(position, "1"); } else { dataIsCheckList.set(position, "0"); } allDataCheckedListener(); }); viewHolder.time_order.setText("时间" + (position + 1) + ""); dataTimeOrderList.set(position, "时间" + (position + 1) + ""); viewHolder.time_valid.setText(dataValidTimeList.get(position)); viewHolder.time_valid.setOnClickListener(v -> { long start_time = DateUtil.getDefaultTimeStamp(dataValidTimeList.get(position).split("-")[0]); long end_time = DateUtil.getDefaultTimeStamp(dataValidTimeList.get(position).split("-")[1]); DateEditUtilForValidTime.selectTime(start_time, end_time, true, (start_time1, end_time1) -> { String timesMorning = DateUtil.formatTime(start_time1, "yyyy/MM/dd HH:mm"); String timesNight = DateUtil.formatTime(end_time1, "yyyy/MM/dd HH:mm"); finalViewHolder.time_valid.setText(timesMorning + "-" + timesNight); dataValidTimeList.set(position, timesMorning + "-" + timesNight); }); }); String[] arr = {"允许通行", "禁止通行"}; ArrayAdapter adapter = new ArrayAdapter(getContext(), com.basic.security.utils.ResolutionAdaptation.spinner_time_rule_item(), arr); viewHolder.spinner_check.setPopupBackgroundResource(com.basic.security.utils.RUtils.R_color_press_menu_text); viewHolder.spinner_check.setAdapter(adapter); viewHolder.spinner_check.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { public void onItemSelected(AdapterView parent, View view, int pos, long id) { dataStationList.set(position, arr[pos]); } public void onNothingSelected(AdapterView parent) { } }); viewHolder.delete.setOnClickListener(v -> { dataIsCheckList.remove(position); dataTimeOrderList.remove(position); dataValidTimeList.remove(position); dataStationList.remove(position); dateAdapter.notifyDataSetChanged(); }); return convertView; } class ViewHolder { CheckBox isChecked; TextView time_order, time_valid; Spinner spinner_check; ImageView delete; } } }