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;
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();
}
//
}