StuHomeworkActivity.java 9.12 KB
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.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<ActivityStudentHomeworkBinding> {

    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);
        getHomework();

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

    @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<String> subject = new MutableLiveData<>("");
        public void setSubject(String value) {
            subject.setValue(value);
        }

        public MutableLiveData<String> grade = new MutableLiveData<>("");
        public void setGrade(String value) {
            grade.setValue(value);
        }

        public MutableLiveData<String> term = new MutableLiveData<>("");
        public void setTerm(String value) {
            term.setValue(value);
        }

        //0:全部, 1: 已反馈, 2:未反馈
        public MutableLiveData<Integer> feedback = new MutableLiveData<>(0);
        public void setFeedback(int value) {
            feedback.setValue(value);
        }
    }
}