From d34cc18f6a8cca56b51a2627648451176f55548a Mon Sep 17 00:00:00 2001 From: shixianjie Date: Fri, 27 Sep 2024 15:06:58 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BD=9C=E4=B8=9A=E5=88=97=E8=A1=A8=E4=B8=8E?= =?UTF-8?q?=E7=AD=9B=E9=80=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 1 + app/src/main/AndroidManifest.xml | 3 +- .../java/com/hjx/parent/AddSuccessActivity.java | 8 +- .../main/java/com/hjx/parent/ImageActivity.java | 2 +- .../java/com/hjx/parent/StuHomeworkActivity.java | 183 +++++++++++++++++++++ .../com/hjx/parent/fragment/ErrorFragment.java | 10 +- app/src/main/res/color/color_filter_item.xml | 5 + app/src/main/res/color/color_filter_state.xml | 5 + .../main/res/drawable/btn_homework_filter_item.xml | 16 ++ .../main/res/drawable/shape_radius_bottom_10dp.xml | 5 + app/src/main/res/drawable/svg_back.xml | 14 ++ app/src/main/res/drawable/svg_filter_drop_down.xml | 10 ++ .../main/res/layout/activity_student_homework.xml | 67 ++++++++ app/src/main/res/layout/popup_filter_feedback.xml | 56 +++++++ app/src/main/res/layout/popup_filter_grade.xml | 105 ++++++++++++ app/src/main/res/layout/popup_filter_subject.xml | 79 +++++++++ app/src/main/res/layout/popup_filter_term.xml | 56 +++++++ app/src/main/res/values/styles.xml | 22 +++ 18 files changed, 640 insertions(+), 7 deletions(-) create mode 100644 app/src/main/java/com/hjx/parent/StuHomeworkActivity.java create mode 100644 app/src/main/res/color/color_filter_item.xml create mode 100644 app/src/main/res/color/color_filter_state.xml create mode 100644 app/src/main/res/drawable/btn_homework_filter_item.xml create mode 100644 app/src/main/res/drawable/shape_radius_bottom_10dp.xml create mode 100644 app/src/main/res/drawable/svg_back.xml create mode 100644 app/src/main/res/drawable/svg_filter_drop_down.xml create mode 100644 app/src/main/res/layout/activity_student_homework.xml create mode 100644 app/src/main/res/layout/popup_filter_feedback.xml create mode 100644 app/src/main/res/layout/popup_filter_grade.xml create mode 100644 app/src/main/res/layout/popup_filter_subject.xml create mode 100644 app/src/main/res/layout/popup_filter_term.xml diff --git a/app/build.gradle b/app/build.gradle index 02ed09c..83727c0 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -58,6 +58,7 @@ android { } buildFeatures { viewBinding true + dataBinding true } compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index e108a16..2b91457 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -38,7 +38,7 @@ android:label="@string/app_name" android:networkSecurityConfig="@xml/network_security_config" android:supportsRtl="true" - android:theme="@style/Theme.Parent"> + android:theme="@style/Theme.AppCompat.Light.NoActionBar"> + private String filePath; private int type; - private String stuId; + private String studentJson; @Override public void initView(Bundle savedInstanceState) { type = getIntent().getIntExtra("type", 0); - stuId = getIntent().getStringExtra("stuId"); + studentJson = getIntent().getStringExtra("studentJson"); if (type == 1) { binding.tvMsg.setText("作业录入成功!"); binding.tvAdd.setText("继续录入作业"); @@ -108,7 +108,9 @@ public class AddSuccessActivity extends BaseActivity if (type == 0) { startActivity(new Intent(context, ErrorListActivity.class)); } else { - // TODO + Intent intent = new Intent(context, StuHomeworkActivity.class); + intent.putExtra("studentJson", studentJson); + startActivity(intent); } } }); diff --git a/app/src/main/java/com/hjx/parent/ImageActivity.java b/app/src/main/java/com/hjx/parent/ImageActivity.java index eb3c8ab..ccd4233 100644 --- a/app/src/main/java/com/hjx/parent/ImageActivity.java +++ b/app/src/main/java/com/hjx/parent/ImageActivity.java @@ -357,7 +357,7 @@ public class ImageActivity extends BaseRxActivity implemen addHomeworkDialog.show(paths, student -> { Intent intent = new Intent(context, AddSuccessActivity.class); intent.putExtra("type", type); - intent.putExtra("stuId", student.stuId); + intent.putExtra("studentJson", new Gson().toJson(student)); startActivity(intent); finish(); }); diff --git a/app/src/main/java/com/hjx/parent/StuHomeworkActivity.java b/app/src/main/java/com/hjx/parent/StuHomeworkActivity.java new file mode 100644 index 0000000..e7dfbca --- /dev/null +++ b/app/src/main/java/com/hjx/parent/StuHomeworkActivity.java @@ -0,0 +1,183 @@ +package com.hjx.parent; + +import android.annotation.SuppressLint; +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.HomeworkAdapter; +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.rx.BaseRxActivity; +import com.prws.common.bean.Student; +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 HomeworkAdapter homeworkAdapter = new HomeworkAdapter(); + + PopupWindow subjectFilter, gradeFilter, termFilter, feedbackFilter; + 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()); + } + + + @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(); + 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); + } + } +} diff --git a/app/src/main/java/com/hjx/parent/fragment/ErrorFragment.java b/app/src/main/java/com/hjx/parent/fragment/ErrorFragment.java index 49a6685..60b2e61 100644 --- a/app/src/main/java/com/hjx/parent/fragment/ErrorFragment.java +++ b/app/src/main/java/com/hjx/parent/fragment/ErrorFragment.java @@ -34,6 +34,7 @@ import com.hjq.permissions.XXPermissions; import com.hjx.parent.ErrorListActivity; import com.hjx.parent.ImageActivity; import com.hjx.parent.R; +import com.hjx.parent.StuHomeworkActivity; import com.hjx.parent.TeacherChooseActivity; import com.hjx.parent.adapter.ErrorAdapter; import com.hjx.parent.adapter.HomeworkAdapter; @@ -153,8 +154,13 @@ public class ErrorFragment extends BaseRxFragment { subject = 0; getError(getResources().getStringArray(R.array.filter_subject)[subject]); getBinding().llAll.setOnClickListener(v -> { - Intent intent = new Intent(getContext(), ErrorListActivity.class); - startActivity(intent); + if (binding.tabLayout.getSelectedTabPosition() == 0) { + Intent intent = new Intent(getContext(), ErrorListActivity.class); + startActivity(intent); + } else { + Intent intent = new Intent(getContext(), StuHomeworkActivity.class); + startActivity(intent); + } }); errorAdapter = new ErrorAdapter(getActivity(), new ArrayList<>(), false); diff --git a/app/src/main/res/color/color_filter_item.xml b/app/src/main/res/color/color_filter_item.xml new file mode 100644 index 0000000..142cb49 --- /dev/null +++ b/app/src/main/res/color/color_filter_item.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/color/color_filter_state.xml b/app/src/main/res/color/color_filter_state.xml new file mode 100644 index 0000000..f445373 --- /dev/null +++ b/app/src/main/res/color/color_filter_state.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/btn_homework_filter_item.xml b/app/src/main/res/drawable/btn_homework_filter_item.xml new file mode 100644 index 0000000..3a4d891 --- /dev/null +++ b/app/src/main/res/drawable/btn_homework_filter_item.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/shape_radius_bottom_10dp.xml b/app/src/main/res/drawable/shape_radius_bottom_10dp.xml new file mode 100644 index 0000000..fc21c3a --- /dev/null +++ b/app/src/main/res/drawable/shape_radius_bottom_10dp.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/svg_back.xml b/app/src/main/res/drawable/svg_back.xml new file mode 100644 index 0000000..85848fc --- /dev/null +++ b/app/src/main/res/drawable/svg_back.xml @@ -0,0 +1,14 @@ + + + diff --git a/app/src/main/res/drawable/svg_filter_drop_down.xml b/app/src/main/res/drawable/svg_filter_drop_down.xml new file mode 100644 index 0000000..cdbc957 --- /dev/null +++ b/app/src/main/res/drawable/svg_filter_drop_down.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/layout/activity_student_homework.xml b/app/src/main/res/layout/activity_student_homework.xml new file mode 100644 index 0000000..8e20607 --- /dev/null +++ b/app/src/main/res/layout/activity_student_homework.xml @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/popup_filter_feedback.xml b/app/src/main/res/layout/popup_filter_feedback.xml new file mode 100644 index 0000000..6e92d05 --- /dev/null +++ b/app/src/main/res/layout/popup_filter_feedback.xml @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/popup_filter_grade.xml b/app/src/main/res/layout/popup_filter_grade.xml new file mode 100644 index 0000000..2419630 --- /dev/null +++ b/app/src/main/res/layout/popup_filter_grade.xml @@ -0,0 +1,105 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/popup_filter_subject.xml b/app/src/main/res/layout/popup_filter_subject.xml new file mode 100644 index 0000000..75807f9 --- /dev/null +++ b/app/src/main/res/layout/popup_filter_subject.xml @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/popup_filter_term.xml b/app/src/main/res/layout/popup_filter_term.xml new file mode 100644 index 0000000..b9409a1 --- /dev/null +++ b/app/src/main/res/layout/popup_filter_term.xml @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index e6e7d5b..2e59a74 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -66,4 +66,26 @@ true + + + + \ No newline at end of file -- 1.9.0