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