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<String> weekIsCheckedList = new ArrayList<>();// 按周
|
private List<String> weekList = new ArrayList<>(); // 按周 日期名称
|
private List<String> startTimeList = new ArrayList<>();// 按周
|
private List<String> endTimeList = new ArrayList<>();// 按周
|
private List<String> weekTagList = new ArrayList<>();// 按周 中1代表原来的, 0 代表复制的
|
private String timeRuleName = "";
|
private List<String> dataIsCheckList = new ArrayList<>(); // 按日期 // 是否选中
|
private List<String> dataTimeOrderList = new ArrayList<>(); // 按日期 时间序号
|
private List<String> dataValidTimeList = new ArrayList<>(); // 按日期 有效时间
|
private List<String> 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<String> adapter = new ArrayAdapter<String>(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;
|
}
|
}
|
}
|