diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 2b91457..b7283b9 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -152,6 +152,8 @@ android:screenOrientation="portrait" android:theme="@style/Theme.AppCompat.Light.NoActionBar" /> + + { + + private HomeworkList mData; + + private Adapter mAdapter = new Adapter(); + + @Override + public void initView(Bundle savedInstanceState) { + binding.toolbar.setNavigationOnClickListener(v -> onBackPressed()); + String json = getIntent().getStringExtra("data"); + mData = new Gson().fromJson(json, HomeworkList.class); + binding.tvTitle.setText(mData.getName()); + + binding.recyclerView.setAdapter(mAdapter); + getDetail(); + + binding.btnFeedback.setOnClickListener(v -> { + Intent intent = new Intent(this, HomeworkSelectActivity.class); + intent.putExtra("data", mData); + intent.putExtra("list", new ArrayList<>(mAdapter.getData())); + startActivity(intent); + }); + } + + @SuppressLint("CheckResult") + private void getDetail() { + NetWorks.service_url.getHomeworkDetail(NetWorks.getHeader(), mData.getId()) + .compose(transformSingle()) + .map(ResponseResult::getData) + .subscribe((list, th) -> { + if (th != null) th.printStackTrace(); + mAdapter.setNewData(list); + }); + } + + @Override + protected ActivityHomeworkDetailBinding getViewBinding() { + return ActivityHomeworkDetailBinding.inflate(getLayoutInflater()); + } + + static class Adapter extends BaseQuickAdapter { + + public Adapter() { + super(R.layout.item_homework_detail); + } + + @SuppressLint("SetTextI18n") + @Override + protected void convert(@NonNull BaseViewHolder holder, HomeWork homeWork) { + TextView tvNumber = holder.getView(R.id.tvNumber); + ImageView imageView = holder.getView(R.id.ivTopic); + int number = getData().indexOf(homeWork) + 1; + tvNumber.setText("第" + number + "题"); + Glide.with(mContext).load(homeWork.url).into(imageView); + } + } +} diff --git a/app/src/main/java/com/hjx/parent/HomeworkSelectActivity.java b/app/src/main/java/com/hjx/parent/HomeworkSelectActivity.java new file mode 100644 index 0000000..07e982c --- /dev/null +++ b/app/src/main/java/com/hjx/parent/HomeworkSelectActivity.java @@ -0,0 +1,103 @@ +package com.hjx.parent; + +import android.annotation.SuppressLint; +import android.content.res.ColorStateList; +import android.os.Bundle; +import android.view.View; +import android.widget.CheckBox; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.lifecycle.MutableLiveData; + +import com.bumptech.glide.Glide; +import com.chad.library.adapter.base.BaseQuickAdapter; +import com.chad.library.adapter.base.BaseViewHolder; +import com.hjx.parent.databinding.ActivityHomeworkSelectBinding; +import com.hjx.parent.function.Function1; +import com.hjx.parent.rx.BaseRxActivity; +import com.prws.common.bean.homework.HomeWork; +import com.prws.common.bean.homework.HomeworkList; + +import java.util.ArrayList; + +public class HomeworkSelectActivity extends BaseRxActivity { + + private HomeworkList mData; + private ArrayList mList; + private Adapter mAdapter = new Adapter(); + + MutableLiveData selectNum = new MutableLiveData<>(0); + + @SuppressLint("NotifyDataSetChanged") + @SuppressWarnings("unchecked,ConstantConditions") + @Override + public void initView(Bundle savedInstanceState) { + binding.toolbar.setNavigationOnClickListener(v -> onBackPressed()); + mData = (HomeworkList) getIntent().getSerializableExtra("data"); + mList = (ArrayList) getIntent().getSerializableExtra("list"); + + mAdapter.setNewData(mList); + binding.recyclerView.setAdapter(mAdapter); + + mAdapter.selectCall = i -> selectNum.setValue(selectNum.getValue() + i); + selectNum.observe(this, i -> { + binding.tvNumber.setText(String.valueOf(i)); + if (i == 0) { + binding.btnConfirm.setText("作业全对"); + binding.btnConfirm.setBackgroundTintList(ColorStateList.valueOf(0xFF4ABC78)); + } else { + binding.btnConfirm.setText("下一步"); + binding.btnConfirm.setBackgroundTintList(ColorStateList.valueOf(0xFF1C90F3)); + } + binding.chkAll.setChecked(i == mList.size() && i != 0); + }); + + binding.chkAll.setOnClickListener(v -> { + if (mList.size() == 0) return; + boolean b = binding.chkAll.isChecked(); + for (HomeWork item: mList) { + item.check = b; + } + selectNum.setValue(b ? mList.size() : 0); + mAdapter.notifyDataSetChanged(); + }); + } + + @Override + protected ActivityHomeworkSelectBinding getViewBinding() { + return ActivityHomeworkSelectBinding.inflate(getLayoutInflater()); + } + + + static class Adapter extends BaseQuickAdapter { + public Adapter() { + super(R.layout.item_homework_detail); + } + public Function1 selectCall; + + @SuppressLint("SetTextI18n") + @Override + protected void convert(@NonNull BaseViewHolder holder, HomeWork homeWork) { + TextView tvNumber = holder.getView(R.id.tvNumber); + ImageView imageView = holder.getView(R.id.ivTopic); + int number = getData().indexOf(homeWork) + 1; + tvNumber.setText("第" + number + "题"); + Glide.with(mContext).load(homeWork.url).into(imageView); + + CheckBox checkBox = holder.getView(R.id.checkbox); + checkBox.setVisibility(View.VISIBLE); + checkBox.setOnCheckedChangeListener(null); + checkBox.setChecked(homeWork.check); + + holder.itemView.setOnClickListener(v -> checkBox.performClick()); + checkBox.setOnCheckedChangeListener((v, b) -> { + homeWork.check = b; + if (selectCall != null) { + selectCall.invoke(b ? 1 : -1); + } + }); + } + } +} diff --git a/app/src/main/java/com/hjx/parent/adapter/HomeworkListAdapter.java b/app/src/main/java/com/hjx/parent/adapter/HomeworkListAdapter.java index 16ff5cb..6944d83 100644 --- a/app/src/main/java/com/hjx/parent/adapter/HomeworkListAdapter.java +++ b/app/src/main/java/com/hjx/parent/adapter/HomeworkListAdapter.java @@ -1,5 +1,6 @@ package com.hjx.parent.adapter; +import android.content.Intent; import android.view.View; import android.widget.TextView; @@ -7,6 +8,8 @@ import androidx.annotation.NonNull; import com.chad.library.adapter.base.BaseQuickAdapter; import com.chad.library.adapter.base.BaseViewHolder; +import com.google.gson.Gson; +import com.hjx.parent.HomeworkDetailActivity; import com.hjx.parent.R; import com.hjx.parent.function.Function0; import com.hjx.parent.function.Function1; @@ -63,7 +66,9 @@ public class HomeworkListAdapter extends BaseQuickAdapter { - // TODO + Intent intent = new Intent(mContext, HomeworkDetailActivity.class); + intent.putExtra("data", new Gson().toJson(homework)); + mContext.startActivity(intent); }); } } diff --git a/app/src/main/java/com/hjx/parent/rx/ILifecycleActivity.java b/app/src/main/java/com/hjx/parent/rx/ILifecycleActivity.java index 76bb1c5..ce0e070 100644 --- a/app/src/main/java/com/hjx/parent/rx/ILifecycleActivity.java +++ b/app/src/main/java/com/hjx/parent/rx/ILifecycleActivity.java @@ -4,9 +4,12 @@ import com.trello.rxlifecycle2.android.ActivityEvent; import com.trello.rxlifecycle2.android.RxLifecycleAndroid; import io.reactivex.Observable; +import io.reactivex.ObservableSource; +import io.reactivex.ObservableTransformer; import io.reactivex.Observer; import io.reactivex.Single; import io.reactivex.SingleObserver; +import io.reactivex.SingleTransformer; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.disposables.Disposable; import io.reactivex.functions.Consumer; @@ -45,4 +48,17 @@ public interface ILifecycleActivity { .compose(RxLifecycleAndroid.bindActivity(getRxLifecycle())) .subscribe(onNext); } + + default ObservableTransformer transform() { + return upstream -> upstream.subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .compose(RxLifecycleAndroid.bindActivity(getRxLifecycle())); + } + + default SingleTransformer transformSingle() { + return upstream -> upstream.subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .compose(RxLifecycleAndroid.bindActivity(getRxLifecycle())); + } + } diff --git a/app/src/main/res/drawable/chk_circle.xml b/app/src/main/res/drawable/chk_circle.xml new file mode 100644 index 0000000..92edb56 --- /dev/null +++ b/app/src/main/res/drawable/chk_circle.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/svg_homework_edit.xml b/app/src/main/res/drawable/svg_homework_edit.xml new file mode 100644 index 0000000..6201ba8 --- /dev/null +++ b/app/src/main/res/drawable/svg_homework_edit.xml @@ -0,0 +1,22 @@ + + + + + + diff --git a/app/src/main/res/drawable/svg_select_circle_off.xml b/app/src/main/res/drawable/svg_select_circle_off.xml new file mode 100644 index 0000000..5168088 --- /dev/null +++ b/app/src/main/res/drawable/svg_select_circle_off.xml @@ -0,0 +1,14 @@ + + + diff --git a/app/src/main/res/drawable/svg_select_circle_on.xml b/app/src/main/res/drawable/svg_select_circle_on.xml new file mode 100644 index 0000000..88feda5 --- /dev/null +++ b/app/src/main/res/drawable/svg_select_circle_on.xml @@ -0,0 +1,22 @@ + + + + diff --git a/app/src/main/res/layout/activity_homework_detail.xml b/app/src/main/res/layout/activity_homework_detail.xml new file mode 100644 index 0000000..fb12e87 --- /dev/null +++ b/app/src/main/res/layout/activity_homework_detail.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_homework_select.xml b/app/src/main/res/layout/activity_homework_select.xml new file mode 100644 index 0000000..0fb2ecb --- /dev/null +++ b/app/src/main/res/layout/activity_homework_select.xml @@ -0,0 +1,96 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_homework_detail.xml b/app/src/main/res/layout/item_homework_detail.xml new file mode 100644 index 0000000..87f57bd --- /dev/null +++ b/app/src/main/res/layout/item_homework_detail.xml @@ -0,0 +1,51 @@ + + + + + + + + + + \ No newline at end of file diff --git a/libs/common/src/main/java/com/prws/common/bean/homework/HomeWork.java b/libs/common/src/main/java/com/prws/common/bean/homework/HomeWork.java new file mode 100644 index 0000000..0ec5899 --- /dev/null +++ b/libs/common/src/main/java/com/prws/common/bean/homework/HomeWork.java @@ -0,0 +1,21 @@ +package com.prws.common.bean.homework; + +import com.google.gson.annotations.SerializedName; + +import java.io.Serializable; + +public class HomeWork implements Serializable { + + @SerializedName(value = "homeworkId", alternate = "id") + public Integer homeworkId; + public String brief; + public String url; + public String analyseUrl; + public String analyseVideoUrl; + public Integer correction; + public String answer; + public String points; + + public boolean check = false; + +} diff --git a/libs/common/src/main/java/com/prws/common/bean/homework/HomeworkList.java b/libs/common/src/main/java/com/prws/common/bean/homework/HomeworkList.java index 3b3f8dc..61b8b31 100644 --- a/libs/common/src/main/java/com/prws/common/bean/homework/HomeworkList.java +++ b/libs/common/src/main/java/com/prws/common/bean/homework/HomeworkList.java @@ -2,11 +2,12 @@ package com.prws.common.bean.homework; import com.google.gson.annotations.SerializedName; +import java.io.Serializable; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Locale; -public class HomeworkList implements Comparable { +public class HomeworkList implements Comparable, Serializable { @SerializedName(value = "homeworkId", alternate = "id") private String homeworkId; @@ -97,10 +98,10 @@ public class HomeworkList implements Comparable { } private String time; - private SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); public String getFormatTime() { if (uploadTime == null) return ""; if (time != null) return time; + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); time = format.format(uploadTime); return time; } diff --git a/libs/common/src/main/java/com/prws/common/net/NetWorks.java b/libs/common/src/main/java/com/prws/common/net/NetWorks.java index 22967d5..e6854b2 100644 --- a/libs/common/src/main/java/com/prws/common/net/NetWorks.java +++ b/libs/common/src/main/java/com/prws/common/net/NetWorks.java @@ -14,6 +14,7 @@ import com.prws.common.bean.Teacher; import com.prws.common.bean.TopicBean; import com.prws.common.bean.UpdateBean; import com.prws.common.bean.baidu.BaiduInput; +import com.prws.common.bean.homework.HomeWork; import com.prws.common.bean.homework.HomeworkList; import com.prws.common.utils.BitmapUtils; import com.prws.common.utils.SharedPreferencesUtil; @@ -198,6 +199,9 @@ public class NetWorks extends RetrofitUtils { @Query("homeworkId") String homeworkId ); + @GET("api/v1/homework/listHomeworkById") + Single>> getHomeworkDetail(@Header("Authorization") String token, @Query("homeworkId") String homeworkId); + } public static String getUserId() {