package com.hjx.parent; import android.annotation.SuppressLint; import android.content.Intent; import android.graphics.Bitmap; import android.net.Uri; import android.os.Bundle; import android.text.Html; import android.view.View; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; import androidx.annotation.NonNull; import com.bumptech.glide.Glide; import com.chad.library.adapter.base.BaseQuickAdapter; import com.chad.library.adapter.base.BaseViewHolder; import com.google.gson.Gson; import com.hjx.parent.databinding.ActivityHomeworkShareBinding; import com.hjx.parent.rx.BaseRxActivity; import com.prws.common.bean.ResponseResult; import com.prws.common.bean.Student; import com.prws.common.bean.homework.HomeWork; import com.prws.common.bean.homework.HomeworkDetail; import com.prws.common.bean.homework.KeyValue; import com.prws.common.net.NetWorks; import com.prws.common.utils.BitmapUtils; import com.prws.common.utils.CommonUtil; import com.prws.common.utils.ContentUtil; import java.text.DecimalFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Locale; import java.util.Set; import io.reactivex.Single; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.schedulers.Schedulers; public class HomeworkShareActivity extends BaseRxActivity { private String id; String indent = "        "; private String title; private Student student; private ErrorAdapter mAdapter = new ErrorAdapter(); private Uri shareUri; @SuppressLint("SetTextI18n") @Override public void initView(Bundle savedInstanceState) { binding.btnBack.setOnClickListener(v -> onBackPressed()); binding.rvWrong.setAdapter(mAdapter); mAdapter.setEmptyView(R.layout.empty_statistical_no_error, binding.rvWrong); id = getIntent().getStringExtra("id"); title = getIntent().getStringExtra("name"); binding.tvTitle.setText(title); student = (Student) getIntent().getSerializableExtra("student"); assert student != null; binding.tvName.setText(student.stuName); Glide.with(this).load(student.photo).centerCrop().error(R.mipmap.ic_avatar_male).into(binding.ivAvatar); binding.tvGrade.setText("学员年级:" + getIntent().getStringExtra("grade")); binding.tvSubject.setText("作业科目:" + getIntent().getStringExtra("subject")); binding.btnShare.setOnClickListener(v -> { if (shareUri == null) shareUri = saveBitmap(); if (shareUri != null) { Intent shareIntent = new Intent(Intent.ACTION_SEND); shareIntent.setType("image/jpeg"); shareIntent.putExtra(Intent.EXTRA_STREAM, shareUri); shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); startActivity(shareIntent); } }); loadHomework(); } @SuppressLint("CheckResult") private void loadHomework() { NetWorks.service_url.getHomeworkCompleteDetail(NetWorks.getHeader(), student.stuId, id, true) .compose(transformSingle()) .map(ResponseResult::getData) .map(data -> { if (data.getHomeworkList() == null) return data; for (HomeWork homeWork: data.getHomeworkList()){ homeWork.formatPoints(new Gson()); } return data; }) .subscribe((data, th) -> { if (th != null) th.printStackTrace(); if (data != null) showHomework(data); }); } @SuppressLint({"SetTextI18n", "DefaultLocale"}) private void showHomework(HomeworkDetail detail) { SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); binding.tvDate.setText("作业时间:" + format.format(detail.getDate())); binding.flComment.setVisibility(detail.getComment() == null || detail.getComment().isEmpty() ? View.INVISIBLE : View.VISIBLE); binding.tvComment.setText(ifEmpty(detail.getComment(), "-")); binding.tvRating.setText("-"); String temp = indent + "在本次作业中,答对题目有 %s 道,%s掌握的很好;答错题目有 %s 道,错题涵盖的知识点主要有%s,这部分还要再加强学习。错题老师已经帮你收录到错题本中,要记得复习整理错题,及时消灭薄弱知识点。"; List errorList = new ArrayList<>(); if (detail.getHomeworkList() != null && detail.getHomeworkList().size() != 0) { int total = detail.getHomeworkList().size(); int correctNum = 0; Set correctSet = new HashSet<>(); Set errorSet = new HashSet<>(); for (HomeWork homeWork: detail.getHomeworkList()) { if (homeWork.correction == 0) { correctNum ++; correctSet.addAll(homeWork.pointsObj); } else { errorList.add(homeWork); errorSet.addAll(homeWork.pointsObj); } } StringBuilder correctPoint = new StringBuilder(); StringBuilder errorPoint = new StringBuilder(); for (KeyValue point: correctSet) { correctPoint.append("、").append(point.Value); } for (KeyValue point: errorSet) { errorPoint.append("、").append(point.Value); } float rate = 100f * correctNum / total; int errorNum = total - correctNum; binding.tvPercent.setText(new DecimalFormat("0").format(rate)); binding.tvCorrect.setText(String.valueOf(correctNum)); binding.tvWrong.setText(String.valueOf(errorNum)); String correct = "-", error = "-"; if (correctPoint.length() != 0) correct = correctPoint.substring(1); if (errorPoint.length() != 0) error = errorPoint.substring(1); if (errorNum == 0) { temp = indent + "在本次作业中,答对题目有 %s 道,%s掌握的很好。"; String s = String.format(temp, fromColor(String.valueOf(correctNum), "#489afa"), fromColor(correct, "#489afa") ); binding.tvRating.setText(Html.fromHtml(s, Html.FROM_HTML_MODE_COMPACT)); } else { String s = String.format(temp, fromColor(String.valueOf(correctNum), "#489afa"), fromColor(correct, "#489afa"), fromColor(String.valueOf(errorNum), "#ff4134"), fromColor(error, "#ff4134") ); binding.tvRating.setText(Html.fromHtml(s, Html.FROM_HTML_MODE_COMPACT)); } } mAdapter.setNewData(errorList); } private String fromColor(String str, String color) { return String.format("%s", color, str); } @Override protected ActivityHomeworkShareBinding getViewBinding() { return ActivityHomeworkShareBinding.inflate(getLayoutInflater()); } private Uri saveBitmap() { try { Bitmap bitmap = BitmapUtils.shotView(binding.viewRoot); String fileName = student.stuName + "_" + title; return ContentUtil.saveBitmapToGallery(this, bitmap, fileName); } catch (Exception e) { e.printStackTrace(); } return null; } private static String ifEmpty(String s, String placeholder) { if (s == null || s.isEmpty()) return placeholder; return s; } public static class ErrorAdapter extends BaseQuickAdapter { public ErrorAdapter() { super(R.layout.item_homework_error); } @Override protected void convert(@NonNull BaseViewHolder holder, HomeWork homeWork) { ImageView ivTopic = holder.getView(R.id.ivTopic); TextView tvPoints = holder.getView(R.id.tvPoints); ImageView ivAnalyze = holder.getView(R.id.ivAnalyze); showImage(ivTopic, homeWork.url); showImage(ivAnalyze, homeWork.analyseUrl); tvPoints.setText("-"); if (homeWork.pointsObj == null || homeWork.pointsObj.isEmpty()) return; StringBuilder builder = new StringBuilder(); for (KeyValue pair: homeWork.pointsObj) { builder.append(pair.Value).append("\n"); } tvPoints.setText(ifEmpty(builder.toString().trim(), "-")); } @SuppressLint("CheckResult") private void showImage(ImageView view, String url) { view.setVisibility(View.GONE); view.setImageBitmap(null); if (url == null) { return; } Single.just(url) .subscribeOn(Schedulers.io()) .map(u -> Glide.with(mContext).asBitmap().load(url).submit().get()) .observeOn(AndroidSchedulers.mainThread()) .subscribe((bitmap, th) -> { if (bitmap == null) return; float imageHeight = bitmap.getHeight(); float imageWidth = bitmap.getWidth(); int viewHeight = (int) (CommonUtil.getScreenHeight(mContext) * 0.75f); int viewWidth = (int) (CommonUtil.getScreenWidth(mContext) * 0.75f); LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(view.getLayoutParams()); if (imageHeight > imageWidth) { if (viewHeight > imageHeight) { layoutParams.height = (int) imageHeight; layoutParams.width = (int) imageWidth; } else { layoutParams.height = viewHeight; layoutParams.width = (int) (imageWidth / imageHeight * viewHeight); } } else { if (viewWidth > imageWidth) { layoutParams.height = (int) imageHeight; layoutParams.width = (int) imageWidth; } else { layoutParams.height = (int) (imageHeight / imageWidth * viewWidth); layoutParams.width = viewWidth; } } layoutParams.setMargins(CommonUtil.dpToPx(mContext, 5), CommonUtil.dpToPx(mContext, 5), CommonUtil.dpToPx(mContext, 5), CommonUtil.dpToPx(mContext, 5)); view.setLayoutParams(layoutParams); view.setImageBitmap(bitmap); view.setVisibility(View.VISIBLE); }); } } }