EditHomeworkDialog.java 7.07 KB
package com.hjx.parent.dialog;

import android.annotation.SuppressLint;
import android.content.Context;
import android.util.Pair;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Toast;

import androidx.annotation.NonNull;

import com.bigkoo.pickerview.builder.TimePickerBuilder;
import com.google.gson.Gson;
import com.hjx.parent.R;
import com.hjx.parent.bean.StudentBean;
import com.hjx.parent.databinding.DialogAddHomeworkBinding;
import com.hjx.parent.function.Function1;
import com.hjx.parent.rx.BaseRxActivity;
import com.prws.common.bean.GradeAndSubject;
import com.prws.common.bean.ResponseResult;
import com.prws.common.bean.Student;
import com.prws.common.bean.Subject;
import com.prws.common.bean.baidu.BaiduInput;
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.io.File;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;

import io.reactivex.Observable;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.schedulers.Schedulers;

public class EditHomeworkDialog extends BaseDialog<DialogAddHomeworkBinding>{
    private final BaseRxActivity<?> activity;

    private Function1<HomeworkList> callback;

    HomeworkList mData;

    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy年MM月dd日", Locale.CHINA);
    List<GradeAndSubject> gradeAndSubjectList;

    String grade;
    String term;
    String subject;
    Date uploadTime;

    public EditHomeworkDialog(BaseRxActivity<?> context, HomeworkList data) {
        super((Context) context);
        activity = context;
        mData = data;
        uploadTime = data.uploadTime;
    }

    public void show(Function1<HomeworkList> callback) {
        this.callback = callback;
        super.show();
    }

    @SuppressLint("SetTextI18n")
    @Override
    public void initView() {
        binding.tvTitle.setText("编辑作业");
        binding.btnClose.setOnClickListener(v -> dismiss());
        binding.tvStu.setVisibility(View.GONE);
        binding.spStudent.setVisibility(View.GONE);
        binding.spTerm.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                term = getContext().getResources().getStringArray(R.array.grade_array)[position];
            }
            @Override
            public void onNothingSelected(AdapterView<?> parent) {
            }
        });
        binding.spGrade.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                grade = gradeAndSubjectList.get(position).getGrade().getGrade();
                refreshSubjects(position);
            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {
            }
        });

        binding.tvDate.setText(dateFormat.format(uploadTime));
        binding.tvDate.setOnClickListener(v -> {
            Calendar calendar = Calendar.getInstance();
            calendar.setTime(uploadTime);
            new TimePickerBuilder(getContext(), (date, v1) -> {
                uploadTime = date;
                binding.tvDate.setText(dateFormat.format(uploadTime));
                binding.etName.setText(dateFormat.format(uploadTime) + subject + "作业");
            }).setType(new boolean[]{true, true, true, false, false, false}).setDate(calendar)
                    .isDialog(true).build().show();
        });

        binding.btnConfirm.setOnClickListener(v -> {
            String name = binding.etName.getText().toString().trim();
            if (name.isEmpty()) {
                Toast.makeText(getContext(), "请输入作业名称", Toast.LENGTH_SHORT).show();
                return;
            }
            dismiss();
            if (callback != null) {
                mData.setGrade(grade);
                mData.setTerm(term);
                mData.setSubject(subject);
                mData.uploadTime = uploadTime;
                mData.setName(name);
                callback.invoke(mData);
            }
        });

        getGrade();
    }

    @SuppressLint("CheckResult")
    private void getGrade() {
        NetWorks.service_url.listGradeAndSubject(NetWorks.getHeader())
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .compose(RxLifecycleAndroid.bindActivity(activity.getRxLifecycle()))
                .map(ResponseResult::getData)
                .firstOrError()
                .subscribe((data, th) -> {
                    if (th != null) th.printStackTrace();
                    if (data != null && data.size() > 0) {
                        gradeAndSubjectList = data;
                        List<String> grades = new ArrayList<>();
                        for (GradeAndSubject it: data) {
                            grades.add(it.getGrade().getGrade());
                        }
                        binding.spGrade.setAdapter(new ArrayAdapter<>(getContext(), R.layout.item_spinner, grades));

                        int p = 0;
                        for (GradeAndSubject it: gradeAndSubjectList) {
                            if (it.getGrade().getGrade().equals(mData.getGrade())) {
                                p = gradeAndSubjectList.indexOf(it);
                                break;
                            }
                        }
                        binding.spGrade.setSelection(p);
                    }
                });
    }

    private void refreshSubjects(int gradePosition) {
        if (gradeAndSubjectList == null) return;
        List<Subject> subjectList = gradeAndSubjectList.get(gradePosition).getSubjects();
        List<String> subjects = new ArrayList<>();
        for (Subject s: subjectList) {
            subjects.add(s.getSubject());
        }
        int position = Math.max(subjects.indexOf(mData.getSubject()), 0);
        binding.spSubject.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @SuppressLint("SetTextI18n")
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                subject = subjects.get(position);
                binding.etName.setText(dateFormat.format(uploadTime) + subject + "作业");
            }
            @Override
            public void onNothingSelected(AdapterView<?> parent) {
            }
        });
        binding.spSubject.setAdapter(new ArrayAdapter<>(getContext(), R.layout.item_spinner, subjects));
        binding.spSubject.setSelection(position);
    }

    @NonNull
    @Override
    public DialogAddHomeworkBinding getBinding() {
        return DialogAddHomeworkBinding.inflate(getLayoutInflater());
    }
}