package cn.flightfeather.thirdapp.module.inspectioninfo;
import android.content.Context;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.RequiresApi;
import android.support.design.widget.TabLayout;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.content.ContextCompat;
import android.support.v4.view.ViewCompat;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;
import android.widget.ImageView;
import android.widget.PopupWindow;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
import butterknife.Unbinder;
import cn.flightfeather.thirdapp.R;
import cn.flightfeather.thirdapp.adapter.AllRecyclerViewAdapter;
import cn.flightfeather.thirdapp.bean.vo.ProblemCategoryVo;
import cn.flightfeather.thirdapp.bean.vo.ProblemlistVo;
import cn.flightfeather.thirdapp.util.Constant;
import cn.flightfeather.thirdapp.util.Domain;
/**
* 2019.1.25
* @author riku
* 客户界面
* 整改情况界面,展示客户未整改和已整改的问题列表
*/
public class ProblemChangeActivity extends AppCompatActivity {
//
public final static String ARG_PROBLEM = "problem";
public final static String ARG_TOTAL_PROBLEM = "totalProblem";
private ArrayList problemlistVos;
private ArrayList problemCategories;
private List newSelectedTypes;
private List curSelectedTypes;
private final String TITLE = "整改";
private final String POPUP_TITLE = "问题类型";
private Unbinder unbinder;
//
//
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//设置允许使用转场动画
getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS);
setContentView(R.layout.activity_problem_change_pollution_scene);
unbinder = ButterKnife.bind(this);
Intent intent = getIntent();
problemlistVos = (ArrayList) intent.getSerializableExtra(ARG_PROBLEM);
problemCategories = (ArrayList) intent.getSerializableExtra(ARG_TOTAL_PROBLEM);
newSelectedTypes = new ArrayList<>();
curSelectedTypes = new ArrayList<>();
initToolBar();
initTab();
initViewPager();
initPopup();
}
@Override
protected void onDestroy() {
super.onDestroy();
if (unbinder != null) {
unbinder.unbind();
}
}
//
//
@BindView(R.id.action_bar) View action_bar;
@BindView(R.id.img_right) ImageView img_right;
@BindView(R.id.img_left) ImageView img_left;
@BindView(R.id.text_left) TextView text_left;
@BindView(R.id.text_right) TextView text_right;
@BindView(R.id.actionbar_title) TextView title;
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
private void initToolBar() {
// action_bar.setElevation(0);
// action_bar.setBackgroundColor(Color.alpha(0));
action_bar.findViewById(R.id.spinner_topclass_task).setVisibility(View.GONE);
// action_bar.findViewById(R.id.img_left).setVisibility(View.GONE);
img_right.setImageResource(R.drawable.ic_filter_list_white_36dp);
action_bar.findViewById(R.id.ll_menu_text).setVisibility(View.GONE);
title.setText(TITLE);
}
@OnClick(R.id.img_left)
void onClickBack() {
this.finish();
}
@OnClick(R.id.img_right)
void onClickFilter() {
popShow();
newSelectedTypes.clear();
newSelectedTypes.addAll(curSelectedTypes);
// img_left.setVisibility(View.INVISIBLE);
// img_right.setVisibility(View.INVISIBLE);
// text_left.setVisibility(View.VISIBLE);
// text_right.setVisibility(View.VISIBLE);
// title.setTitle(POPUP_TITLE);
}
//
//
@BindView(R.id.tabLayout)
TabLayout tabLayout;
@BindView(R.id.viewPager)
ViewPager viewPager;
private List tabIndicators;//tab标题
private List tabFragments;//内容
private ContentPagerAdapter contentAdapter;//viewPager内容页面适配器
private void initTab(){
// tabLayout.setTabMode(TabLayout.MODE_SCROLLABLE);
tabLayout.setTabGravity(Gravity.CENTER_HORIZONTAL);
tabLayout.setTabTextColors(ContextCompat.getColor(this, R.color.unselected), ContextCompat.getColor(this, R.color.main_text_color));
tabLayout.setSelectedTabIndicatorColor(ContextCompat.getColor(this, R.color.main_text_color));
ViewCompat.setElevation(tabLayout, 2);
tabLayout.setupWithViewPager(viewPager);//将tab和viewPager绑定
}
private ArrayList unChangedProblems = new ArrayList<>();
private ArrayList changedProblems = new ArrayList<>();
private void initViewPager(){
this.changedProblems.clear();
this.unChangedProblems.clear();
for (int i = 0; i < problemlistVos.size(); i++) {
ProblemlistVo problemlistVoTemp = problemlistVos.get(i);
if (!problemlistVoTemp.getIschanged()) {
this.unChangedProblems.add(problemlistVoTemp);
} else if (!Objects.equals(problemlistVoTemp.getExtension3(), Domain.CHANGE_CHECK_PASS)) {
this.unChangedProblems.add(problemlistVoTemp);
} else {
this.changedProblems.add(problemlistVoTemp);
}
}
tabIndicators = new ArrayList<>();
tabIndicators.add("待整改问题");
tabIndicators.add("已整改问题");
tabFragments = new ArrayList<>();
tabFragments.add(ProblemChangeFragment.newInstance(this.unChangedProblems, Constant.UNCHANGED));
tabFragments.add(ProblemChangeFragment.newInstance(this.changedProblems, Constant.CHANGED));
contentAdapter = new ContentPagerAdapter(getSupportFragmentManager());
viewPager.setAdapter(contentAdapter);
}
//刷新ViewPager
public void refreshViewPager() {
this.changedProblems.clear();
this.unChangedProblems.clear();
for (int i = 0; i < problemlistVos.size(); i++) {
ProblemlistVo problemlistVoTemp = problemlistVos.get(i);
if (!problemlistVoTemp.getIschanged()) {
this.unChangedProblems.add(problemlistVoTemp);
} else if (!Objects.equals(problemlistVoTemp.getExtension3(), Domain.CHANGE_CHECK_PASS)) {
this.unChangedProblems.add(problemlistVoTemp);
} else {
this.changedProblems.add(problemlistVoTemp);
}
}
ProblemChangeFragment pf1 = (ProblemChangeFragment) tabFragments.get(0);
ProblemChangeFragment pf2 = (ProblemChangeFragment) tabFragments.get(1);
pf1.notifyDataSetChanged();
pf2.notifyDataSetChanged();
}
//整改完成后,刷新问题列表
public void refreshProblemList(ProblemlistVo problemlistVo) {
if (problemlistVo==null) return;
for (ProblemlistVo p : this.problemlistVos) {
if (p.getGuid().equals(problemlistVo.getGuid())) {
this.problemlistVos.remove(p);
break;
}
}
this.problemlistVos.add(problemlistVo);
}
/**
* viewPager适配器
*/
class ContentPagerAdapter extends FragmentPagerAdapter {
public ContentPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
return tabFragments.get(position);
}
@Override
public int getCount() {
return tabIndicators.size();
}
@Override
public CharSequence getPageTitle(int position) {
return tabIndicators.get(position);
}
}
//
//
private void showSelectedProblemType(List type) {
problemlistVos.clear();
for (int t : type) {
problemlistVos.addAll(problemCategories.get(t).getProblemlistVos());
}
if (type.isEmpty()) {
for (ProblemCategoryVo p : problemCategories) {
problemlistVos.addAll(p.getProblemlistVos());
}
}
refreshViewPager();
}
//
//
private FilterPopupWindow popupWindow;
private boolean popupIsShowing;
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
private void initPopup() {
popupWindow = new FilterPopupWindow(this, problemCategories);
}
private void popShow() {
popupWindow.showAtLocation(action_bar, Gravity.BOTTOM, 0, 0);
popupIsShowing = true;
setWindowAloha(0.6f);
}
private void popDismiss() {
popupWindow.dismiss();
popupIsShowing = false;
}
private void setWindowAloha(float f) {
Window window=getWindow();
WindowManager.LayoutParams wl = window.getAttributes();
wl.alpha = f;
window.setAttributes(wl);
}
private void popupRefresh() {
popupWindow.notifyDataSetChanged();
}
class FilterPopupWindow extends PopupWindow {
private List datas;
RecyclerView rv_problem_type;
AllRecyclerViewAdapter adapter;
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
public FilterPopupWindow(Context context, List datas) {
super(context);
this.datas = datas;
setHeight(ViewGroup.LayoutParams.WRAP_CONTENT);
setWidth(ViewGroup.LayoutParams.MATCH_PARENT);
setElevation(2f);
setBackgroundDrawable(null);
setOutsideTouchable(true);
setFocusable(true);
setAnimationStyle(R.style.popwin_anim_style);
setOnDismissListener(new OnDismissListener() {
@Override
public void onDismiss() {
setWindowAloha(1f);
}
});
View contentView = LayoutInflater.from(ProblemChangeActivity.this).inflate(R.layout.popup_problem_selector, null, false);
initView(contentView);
setClickListener(contentView);
setContentView(contentView);
}
private void initView(View view) {
rv_problem_type = view.findViewById(R.id.rv_problem_type_2);
adapter = new AllRecyclerViewAdapter(datas,
R.layout.item_problem_type,
ProblemChangeActivity.this) {
@Override
public void bindView(final AllRecyclerViewAdapter.MyViewHolder holder, final ProblemCategoryVo obj, final boolean isSelected, final int position) {
final Integer pos = position;
//填充问题类型名称
holder.setText(R.id.text_problem_type, obj.getProblemTypeName());
//根据问题数量设置点击事件
if (obj.getTotalCount() == 0) {
holder.setAlpha(R.id.text_problem_type, 0.2f);
holder.setOnClickListener(R.id.text_problem_type, null);
} else {
holder.setOnClickListener(R.id.text_problem_type, new View.OnClickListener() {
@Override
public void onClick(View v) {
v.setSelected(!v.isSelected());
if (v.isSelected()) {
newSelectedTypes.add(pos);
} else {
newSelectedTypes.remove(pos);
}
}
});
holder.setAlpha(R.id.text_problem_type, 1f);
}
//根据用户的选择设置是否选择状态
if (curSelectedTypes.contains(pos)) {
holder.setSelected(R.id.text_problem_type, true);
} else {
holder.setSelected(R.id.text_problem_type, false);
}
}
};
GridLayoutManager layoutManager = new GridLayoutManager(ProblemChangeActivity.this, 3);
layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
rv_problem_type.setLayoutManager(layoutManager);
rv_problem_type.setAdapter(adapter);
}
private void setClickListener(View v) {
TextView text_complete = v.findViewById(R.id.text_complete);
TextView text_cancel = v.findViewById(R.id.text_cancel);
text_complete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
popDismiss();
curSelectedTypes.clear();
curSelectedTypes.addAll(newSelectedTypes);
showSelectedProblemType(curSelectedTypes);
popupRefresh();
}
});
text_cancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
popDismiss();
}
});
}
public void notifyDataSetChanged() {
adapter.notifyDataSetChanged();
}
}
//
}