package com.hjx.parent; import android.annotation.SuppressLint; import android.content.Intent; import android.os.Bundle; import android.widget.LinearLayout; import android.widget.PopupWindow; import androidx.annotation.Nullable; import androidx.lifecycle.MutableLiveData; import com.google.gson.Gson; import com.hjx.parent.adapter.HomeworkListAdapter; import com.hjx.parent.databinding.ActivityStudentHomeworkBinding; import com.hjx.parent.databinding.PopupFilterFeedbackBinding; import com.hjx.parent.databinding.PopupFilterGradeBinding; import com.hjx.parent.databinding.PopupFilterSubjectBinding; import com.hjx.parent.databinding.PopupFilterTermBinding; import com.hjx.parent.dialog.MsgConfirmDialog; import com.hjx.parent.rx.BaseRxActivity; import com.prws.common.bean.Student; import com.prws.common.bean.homework.HomeworkList; import com.prws.common.net.NetWorks; import com.prws.common.utils.SharedPreferencesUtil; import com.trello.rxlifecycle2.android.RxLifecycleAndroid; import java.util.Collections; import io.reactivex.Observable; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.schedulers.Schedulers; public class StuHomeworkActivity extends BaseRxActivity { private final HomeworkListAdapter homeworkAdapter = new HomeworkListAdapter(); PopupWindow subjectFilter, gradeFilter, termFilter, feedbackFilter; MsgConfirmDialog deleteDialog; State state = new State(); private void handlerIntent() { String json = getIntent().getStringExtra("studentJson"); if (json == null) json = (String) SharedPreferencesUtil.getData("student", ""); try { state.student = new Gson().fromJson(json, Student.class); } catch (Throwable t) { t.printStackTrace(); } } @SuppressLint("SetTextI18n") @Override public void initView(Bundle savedInstanceState) { handlerIntent(); if (state.student == null) { finish(); return; } binding.toolbar.setNavigationOnClickListener(v -> onBackPressed()); binding.tvTitle.setText(state.student.stuName + "的全部作业"); binding.recyclerView.setAdapter(homeworkAdapter); binding.ftSubject.setOnClickListener(v -> showSubjectFilter()); binding.ftGrade.setOnClickListener(v -> showGradeFilter()); binding.ftTerm.setOnClickListener(v -> showTermFilter()); binding.ftFeedback.setOnClickListener(v -> showFeedbackFilter()); homeworkAdapter.deleteCall = data -> { if (deleteDialog == null) { deleteDialog = new MsgConfirmDialog.Builder(this) .setMessage("确认要删除吗?一旦删除不可恢复") .setPositive("暂不删除") .setNegative("确定删除") .build(); } deleteDialog.show(() -> { deleteHomework(data); return true; }, null); }; homeworkAdapter.detailCall = data -> { Intent intent = new Intent(this, HomeworkDetailActivity.class); intent.putExtra("data", data); intent.putExtra("student", state.student); startActivity(intent); }; binding.btnChangeStudent.setOnClickListener(v -> { Intent intent = new Intent(this, TeacherChooseActivity.class); intent.putExtra("needBack", true); startActivityForResult(intent, 0xA01); }); } @Override protected void onStart() { super.onStart(); getHomework(); } @SuppressLint("SetTextI18n") @Override protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == 0xA01 && resultCode == RESULT_OK) { String json = (String) SharedPreferencesUtil.getData("student", ""); try { state.student = new Gson().fromJson(json, Student.class); binding.tvTitle.setText(state.student.stuName + "的全部作业"); getHomework(); } catch (Throwable t) { t.printStackTrace(); } } } @SuppressLint("CheckResult") protected void deleteHomework(HomeworkList data) { NetWorks.service_url.deleteHomework(NetWorks.getHeader(), data.getId()) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .compose(RxLifecycleAndroid.bindActivity(getRxLifecycle())) .subscribe((response, th) -> { if (th != null) th.printStackTrace(); if (response != null && response.getSuccess()) { getHomework(); } }); } @SuppressLint("CheckResult") protected void getHomework() { NetWorks.service_url.getStudentHomework(NetWorks.getHeader(), state.student.stuId) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .compose(RxLifecycleAndroid.bindActivity(getRxLifecycle())) .toObservable() .flatMap(response -> Observable.fromIterable(response.getData())) // 过滤 .filter(data -> { // 学科 String subject = state.subject.getValue(); if (subject == null || subject.isEmpty()) return true; else return subject.equals(data.getSubject()); }) .filter(data -> { // 年级 String grade = state.grade.getValue(); if (grade == null || grade.isEmpty()) return true; else return grade.equals(data.getGrade()); }) .filter(data -> { // 学期 String term = state.term.getValue(); if (term == null || term.isEmpty()) return true; else return term.equals(data.getTerm()); }) .filter(data -> { // 反馈 Integer feedback = state.feedback.getValue(); if (feedback == null || feedback == 0) return true; else return (feedback == 1 && data.getRight() != null) || (feedback == 2 && data.getRight() == null); }) // 过滤完成, 收集 .toList() .subscribe((data, th) -> { if (th != null) th.printStackTrace(); if (data != null) { Collections.sort(data); } homeworkAdapter.setNewData(data); }); } private void showSubjectFilter() { if (subjectFilter == null) { PopupFilterSubjectBinding db = PopupFilterSubjectBinding.inflate(getLayoutInflater()); db.setLifecycleOwner(this); db.setState(state); db.bg.setOnClickListener(v -> subjectFilter.dismiss()); subjectFilter = new PopupWindow(db.getRoot(), LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT); subjectFilter.setOutsideTouchable(true); subjectFilter.setOnDismissListener(this::getHomework); } subjectFilter.showAsDropDown(binding.anchorView); } private void showGradeFilter() { if (gradeFilter == null) { PopupFilterGradeBinding db = PopupFilterGradeBinding.inflate(getLayoutInflater()); db.setLifecycleOwner(this); db.setState(state); db.bg.setOnClickListener(v -> gradeFilter.dismiss()); gradeFilter = new PopupWindow(db.getRoot(), LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT); gradeFilter.setOutsideTouchable(true); gradeFilter.setOnDismissListener(this::getHomework); } gradeFilter.showAsDropDown(binding.anchorView); } private void showTermFilter() { if (termFilter == null) { PopupFilterTermBinding db = PopupFilterTermBinding.inflate(getLayoutInflater()); db.setLifecycleOwner(this); db.setState(state); db.bg.setOnClickListener(v -> termFilter.dismiss()); termFilter = new PopupWindow(db.getRoot(), LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT); termFilter.setOutsideTouchable(true); termFilter.setOnDismissListener(this::getHomework); } termFilter.showAsDropDown(binding.anchorView); } private void showFeedbackFilter() { if (feedbackFilter == null) { PopupFilterFeedbackBinding db = PopupFilterFeedbackBinding.inflate(getLayoutInflater()); db.setLifecycleOwner(this); db.setState(state); db.bg.setOnClickListener(v -> feedbackFilter.dismiss()); feedbackFilter = new PopupWindow(db.getRoot(), LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT); feedbackFilter.setOutsideTouchable(true); feedbackFilter.setOnDismissListener(this::getHomework); } feedbackFilter.showAsDropDown(binding.anchorView); } @Override protected ActivityStudentHomeworkBinding getViewBinding() { return ActivityStudentHomeworkBinding.inflate(getLayoutInflater()); } public static class State { public Student student; public MutableLiveData subject = new MutableLiveData<>(""); public void setSubject(String value) { subject.setValue(value); } public MutableLiveData grade = new MutableLiveData<>(""); public void setGrade(String value) { grade.setValue(value); } public MutableLiveData term = new MutableLiveData<>(""); public void setTerm(String value) { term.setValue(value); } //0:全部, 1: 已反馈, 2:未反馈 public MutableLiveData feedback = new MutableLiveData<>(0); public void setFeedback(int value) { feedback.setValue(value); } } }