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.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 {
|
//<editor-fold desc="全局变量">
|
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<ProblemlistVo> problemlistVos;
|
private String fragmentType;
|
private MediafileDao mediafileDao;
|
private Unbinder unbinder;
|
//</editor-fold>
|
|
//<editor-fold desc="constructor">
|
public ProblemChangeFragment() {
|
// Required empty public constructor
|
}
|
|
public static ProblemChangeFragment newInstance(ArrayList<ProblemlistVo> 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;
|
}
|
//</editor-fold>
|
|
//<editor-fold desc="lifecycle">
|
@Override
|
public void onCreate(Bundle savedInstanceState) {
|
super.onCreate(savedInstanceState);
|
if (getArguments() != null) {
|
problemlistVos = (ArrayList<ProblemlistVo>) 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();
|
}
|
}
|
//</editor-fold>
|
|
//<editor-fold desc="初始化数据库">
|
private void initDataBase() {
|
DaoSession daoSession = application.getDaoSession();
|
mediafileDao = daoSession.getMediafileDao();
|
}
|
//</editor-fold>
|
|
//<editor-fold desc="initView">
|
@BindView(R.id.rv_content) RecyclerView rv_rank_content;
|
@BindView(R.id.image_problem_complete) ImageView image_problem_complete;
|
AllRecyclerViewAdapter<ProblemlistVo> adapter;
|
|
private void initView() {
|
adapter = new AllRecyclerViewAdapter<ProblemlistVo>(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);
|
|
//<editor-fold desc="根据是否承诺整改显示不同内容">
|
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);
|
}
|
//</editor-fold>
|
|
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));
|
|
//<editor-fold desc="初始化图片的显示及点击事件">
|
List<ImageView> 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<Mediafile> 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<Mediafile> 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<File> 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));
|
}
|
//</editor-fold>
|
}
|
};
|
|
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);
|
}
|
|
}
|
//</editor-fold>
|
|
//<editor-fold desc="点击事件">
|
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());
|
}
|
}
|
//</editor-fold>
|
|
//<editor-fold desc="更新列表">
|
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();
|
}
|
//</editor-fold>
|
}
|