package cn.flightfeather.thirdapp.module.inspectioninfo; import android.app.Activity; import android.app.ActivityOptions; import android.content.Intent; import android.os.Build; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.annotation.RequiresApi; import android.support.v4.app.Fragment; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import com.ping.greendao.gen.DaoSession; import com.ping.greendao.gen.MediafileDao; import java.io.File; import java.text.ParseException; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.List; import butterknife.BindView; import butterknife.ButterKnife; import butterknife.Unbinder; import cn.flightfeather.thirdapp.CommonApplication; import cn.flightfeather.thirdapp.R; import cn.flightfeather.thirdapp.activity.PhotoViewerActivity; import cn.flightfeather.thirdapp.adapter.AllRecyclerViewAdapter; import cn.flightfeather.thirdapp.bean.entity.Mediafile; import cn.flightfeather.thirdapp.bean.vo.ProblemlistVo; import cn.flightfeather.thirdapp.util.Constant; import cn.flightfeather.thirdapp.util.DateFormatter; import cn.flightfeather.thirdapp.util.Domain; import cn.flightfeather.thirdapp.util.file.FileUtil; import cn.flightfeather.thirdapp.util.photo.PhotoUtil; /** * 2019.1.25 * @author riku * 本fragment有两种问题状态,已整改{@link Constant#UNCHANGED}和未整改{@link Constant#CHANGED} */ public class ProblemChangeFragment extends Fragment { // public static final String ARG_PARAM1 = "problems"; public static final String ARG_PARAM2 = "fragmentType"; public static final int REQUEST_CODE_SUBMIT = 11; private CommonApplication application; private ArrayList problemlistVos = new ArrayList<>(); private String fragmentType; private MediafileDao mediafileDao; private Unbinder unbinder; // // public ProblemChangeFragment() { // Required empty public constructor } public static ProblemChangeFragment newInstance(ArrayList problemlistVos, String fragmentType) { ProblemChangeFragment fragment = new ProblemChangeFragment(); Bundle args = new Bundle(); args.putSerializable(ARG_PARAM1, problemlistVos); args.putString(ARG_PARAM2, fragmentType); fragment.setArguments(args); return fragment; } // // @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (getArguments() != null) { problemlistVos = (ArrayList) getArguments().getSerializable(ARG_PARAM1); fragmentType = getArguments().getString(ARG_PARAM2); } } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_rank_content, container, false); unbinder = ButterKnife.bind(this, view); return view; } @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) @Override public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); application = (CommonApplication) getActivity().getApplication(); initDataBase(); initView(); } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); //整改完成后,刷新问题列表 if (requestCode == REQUEST_CODE_SUBMIT && resultCode == Activity.RESULT_OK) { ProblemlistVo p = (ProblemlistVo) data.getSerializableExtra(ProblemChangeDetailActivity.ARG_PROBLEM); ProblemChangeActivity problemChangeActivity = (ProblemChangeActivity) getActivity(); if (problemChangeActivity != null) { problemChangeActivity.refreshProblemList(p); problemChangeActivity.refreshViewPager(); } } } @Override public void onDestroy() { super.onDestroy(); if (unbinder != null) { unbinder.unbind(); } } // // private void initDataBase() { DaoSession daoSession = application.getDaoSession(); mediafileDao = daoSession.getMediafileDao(); } // // @BindView(R.id.rv_content) RecyclerView rv_rank_content; @BindView(R.id.image_problem_complete) ImageView image_problem_complete; AllRecyclerViewAdapter adapter; private void initView() { adapter = new AllRecyclerViewAdapter(problemlistVos, R.layout.item_problem_change_pollution_scene, getActivity()) { @Override public void bindView(AllRecyclerViewAdapter.MyViewHolder holder, ProblemlistVo obj, boolean isSelected, int position) { String checkStatus = getString(R.string.unchanged); switch (obj.getExtension3()) { case Domain.CHANGE_UNCHECKED: checkStatus = getString(R.string.change_unCheck); break; case Domain.CHANGE_CHECK_PASS: checkStatus = getString(R.string.change_pass); break; case Domain.CHANGE_CHECK_FAIL: checkStatus = getString(R.string.change_fail); break; } holder.setText(R.id.tv_problem_type_name, obj.getTypename()) .setText(R.id.tv_problem_time, DateFormatter.dateTimeFormat.format(obj.getTime())) .setText(R.id.tv_problem_location, obj.getLocation()) .setText(R.id.tv_problem_name, obj.getProblemname()) .setText(R.id.txt_change_check, checkStatus); // Date deadline_tmp = null; if (obj.getExtension1() != null) { try { deadline_tmp = DateFormatter.dateFormat.parse(obj.getExtension1()); Calendar calendar = Calendar.getInstance(); calendar.setTime(deadline_tmp); calendar.set(Calendar.HOUR_OF_DAY, 23); calendar.set(Calendar.MINUTE, 59); calendar.set(Calendar.SECOND, 59); deadline_tmp = calendar.getTime(); } catch (ParseException e) { e.printStackTrace(); } } if (fragmentType.equals(Constant.UNCHANGED) && !obj.getIschanged()) { generateView1(holder, obj, isSelected, position, deadline_tmp); } else if (fragmentType.equals(Constant.CHANGED) && obj.getIschanged()) { generateView2(holder, obj, isSelected, position, deadline_tmp); } // ProblemChangeDetailActivity.TextData textData = new ProblemChangeDetailActivity.TextData( holder.getText(R.id.text_deadline_status), holder.getText(R.id.text_remaining_days), holder.getText(R.id.text_promise), holder.isSelected(R.id.image_promise), holder.getText(R.id.text_change_deadline), holder.getVisibility(R.id.text_change_deadline), holder.getVisibility(R.id.cl_deadline) ); holder.setOnClickListener(R.id.cl_content ,new OnProblemDetailClickListener(obj, fragmentType, textData)); holder.setOnClickListener(R.id.image_goto_change ,new OnProblemDetailClickListener(obj, fragmentType, textData)); // List imageViewProblemList = new ArrayList<>(); imageViewProblemList.add((ImageView) holder.getViewById(R.id.iv_problem_photo1)); imageViewProblemList.add((ImageView) holder.getViewById(R.id.iv_problem_photo2)); imageViewProblemList.add((ImageView) holder.getViewById(R.id.iv_problem_photo3)); List mediafileList = mediafileDao.queryBuilder() .where(MediafileDao.Properties.Businessguid.eq(obj.getGuid())) .where(MediafileDao.Properties.Remark.eq("未上传")) .list(); if (obj.getMediafileList() != null) { mediafileList.addAll(obj.getMediafileList()); } //将图片加载至对应的imageView上 List showingFilelist = new ArrayList<>(); for (Mediafile mediafile : mediafileList) { if (!mediafile.getIschanged()) { showingFilelist.add(mediafile); } } int photoCount = PhotoUtil.loadImage(showingFilelist, imageViewProblemList, getActivity()); //由于RecycleView的复用特性,没有添加图片的imageView必须设置为空白图片 if (photoCount < imageViewProblemList.size()) { for (int i = imageViewProblemList.size() - 1; i >= photoCount; i--) { imageViewProblemList.get(i).setImageResource(R.drawable.icon_add_photo_blank); } } //添加图片放大点击事件 List files = new ArrayList<>(); for (Mediafile m : showingFilelist) { File tempFile = FileUtil.getFileFromMediaFile(m); files.add(tempFile); } for (int i = 0; i < photoCount; i++) { imageViewProblemList.get(i) .setOnClickListener(PhotoUtil.OnPhotoViewClickListener(getActivity(), files, i, showingFilelist, PhotoViewerActivity.PROBLEM_PHOTO, false)); } // } }; LinearLayoutManager lm = new LinearLayoutManager(getActivity()); lm.setOrientation(LinearLayoutManager.VERTICAL); rv_rank_content.setLayoutManager(lm); rv_rank_content.setAdapter(adapter); //设置没有内容时的展示图片 if (fragmentType.equals(Constant.UNCHANGED)) { image_problem_complete.setImageResource(R.drawable.ic_problem_complete); }else{ image_problem_complete.setImageResource(R.drawable.ic_problem_uncomplete); } if (this.problemlistVos.isEmpty()) { image_problem_complete.setVisibility(View.VISIBLE); } else { image_problem_complete.setVisibility(View.GONE); } } /** * 当前状态是展示“未整改”的问题{@link #fragmentType} = {@link Constant#UNCHANGED} * @param holder * @param obj * @param isSelected * @param position */ private void generateView1(AllRecyclerViewAdapter.MyViewHolder holder, ProblemlistVo obj, boolean isSelected, int position, Date deadline_tmp) { //客户已承诺整改,截止日期存在,则显示 String deadline = obj.getExtension1(); if (deadline != null && !deadline.equals("") && deadline_tmp != null) { deadline = "截至" + " " + deadline; holder.setSelected(R.id.image_promise, true) .setText(R.id.text_promise, R.string.change_promised) .setVisibility(R.id.text_change_deadline, View.VISIBLE) .setText(R.id.text_change_deadline, deadline); // .setOnClickListener(R.id.image_goto_change, new OnProblemDetailClickListener()) // .setOnClickListener(R.id.cl_content, new OnProblemDetailClickListener()) //region 判断整改还剩余或已逾期几天 Date problemTime = obj.getTime(); if (problemTime.before(deadline_tmp)) { Date now = new Date(); int days; //整改没有逾期 if (deadline_tmp.getTime() > now.getTime()) { days = (int) Math.ceil((deadline_tmp.getTime() - now.getTime()) / 1000 / 60 / 60 / 24); holder.setText(R.id.text_deadline_status, R.string.remaining) .setText(R.id.text_remaining_days, String.valueOf(days)); } //整改已逾期 else { days = (int) Math.ceil((now.getTime() - deadline_tmp.getTime()) / 1000 / 60 / 60 / 24); holder.setText(R.id.text_deadline_status, R.string.overdue) .setText(R.id.text_remaining_days, String.valueOf(days)); } } holder.setVisibility(R.id.cl_deadline, View.VISIBLE); //endregion } //客户未承诺整改,截止日期不存在,不显示 else { holder.setSelected(R.id.image_promise, false) .setText(R.id.text_promise, R.string.change_refused) .setVisibility(R.id.text_change_deadline, View.INVISIBLE) .setVisibility(R.id.cl_deadline, View.INVISIBLE); } } /** * 当前状态是展示“已整改”的问题{@link #fragmentType} = {@link Constant#CHANGED} * @param holder * @param obj * @param isSelected * @param position */ private void generateView2(AllRecyclerViewAdapter.MyViewHolder holder, ProblemlistVo obj, boolean isSelected, int position, Date deadline_tmp) { holder.setVisibility(R.id.cl_deadline, View.INVISIBLE); // .setOnClickListener(R.id.image_goto_change, new OnProblemDetailClickListener()) // .setOnClickListener(R.id.cl_content, new OnProblemDetailClickListener()) //已承诺,有截止时间 if (deadline_tmp != null) { //整改时间有记录,按照记录显示是否逾期 if (obj.getChangedtime() != null) { //整改时间在承诺整改时间之前 if (obj.getChangedtime().before(deadline_tmp)) { holder.setSelected(R.id.image_promise, true) .setText(R.id.text_promise, R.string.change_in_time) .setVisibility(R.id.text_change_deadline, View.GONE); } //整改时间在承诺整改时间之后 else { holder.setSelected(R.id.image_promise, false) .setText(R.id.text_promise, R.string.change_over_time); int days2 = (int) Math.ceil((obj.getChangedtime().getTime() - deadline_tmp.getTime()) / 1000 / 60 / 60 / 24); String s = "逾期" + days2 + "天"; holder.setVisibility(R.id.text_change_deadline, View.VISIBLE) .setText(R.id.text_change_deadline, s); } } //整改时间无记录,直接显示已整改 else { holder.setSelected(R.id.image_promise, true) .setText(R.id.text_promise, R.string.changed) .setVisibility(R.id.text_change_deadline, View.GONE); } } //没有承诺,没有截止时间 else { holder.setSelected(R.id.image_promise, true) .setText(R.id.text_promise, R.string.changed) .setVisibility(R.id.text_change_deadline, View.GONE); } } // // class OnProblemDetailClickListener implements View.OnClickListener { private ProblemlistVo problemlistVo; private String problemType; private ProblemChangeDetailActivity.TextData textData; private View cl_1; private View tv_problem_name; private View ll_problem_photo; private View tv_problem_type_name; public OnProblemDetailClickListener(ProblemlistVo problemlistVo, String problemType, ProblemChangeDetailActivity.TextData textData) { this.problemlistVo = problemlistVo; this.problemType = problemType; this.textData = textData; View itemView = LayoutInflater.from(getActivity()).inflate(R.layout.item_problem_change_pollution_scene, null); cl_1 = itemView.findViewById(R.id.cl_1); tv_problem_name = itemView.findViewById(R.id.tv_problem_name); ll_problem_photo = itemView.findViewById(R.id.ll_problem_photo); tv_problem_type_name = itemView.findViewById(R.id.tv_problem_type_name); } @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) @Override public void onClick(View v) { Intent intent = new Intent(getActivity(), ProblemChangeDetailActivity.class); Bundle bundle = new Bundle(); bundle.putSerializable(ProblemChangeDetailActivity.ARG_PROBLEM, problemlistVo); bundle.putString(ProblemChangeDetailActivity.ARG_PROBLEM_TYPE, problemType); bundle.putSerializable(ProblemChangeDetailActivity.ARG_TEXT_DATA, textData); intent.putExtras(bundle); ActivityOptions optionsCompat = ActivityOptions.makeSceneTransitionAnimation(getActivity()); startActivityForResult(intent, REQUEST_CODE_SUBMIT, optionsCompat.toBundle()); } } // // public void notifyDataSetChanged() { // this.problemlistVos.clear(); // this.problemlistVos.addAll(p); if (this.problemlistVos.isEmpty()) { image_problem_complete.setVisibility(View.VISIBLE); } else { image_problem_complete.setVisibility(View.GONE); } adapter.notifyDataSetChanged(); } // }