package com.hjx.parent.fragment; import static android.app.Activity.RESULT_OK; import android.annotation.SuppressLint; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.net.Uri; import android.os.Bundle; import android.provider.MediaStore; import android.text.TextUtils; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Toast; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.core.content.FileProvider; import androidx.recyclerview.widget.RecyclerView; import com.bumptech.glide.Glide; import com.bumptech.glide.load.resource.bitmap.RoundedCorners; import com.bumptech.glide.request.RequestOptions; import com.chad.library.adapter.base.BaseQuickAdapter; import com.chad.library.adapter.base.BaseViewHolder; import com.google.android.material.tabs.TabLayout; import com.google.gson.Gson; import com.hjq.permissions.OnPermissionCallback; import com.hjq.permissions.Permission; import com.hjq.permissions.XXPermissions; import com.hjx.parent.ErrorListActivity; import com.hjx.parent.HomeworkDetailActivity; import com.hjx.parent.HomeworkShareActivity; 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; import com.hjx.parent.bean.StudentBean; import com.hjx.parent.databinding.FragmentErrorBookBinding; import com.hjx.parent.rx.BaseRxFragment; import com.prws.common.bean.PageInfo; import com.prws.common.bean.ResponseResult; import com.prws.common.bean.Student; import com.prws.common.bean.TopicBean; import com.prws.common.bean.homework.HomeworkList; import com.prws.common.net.NetWorks; import com.prws.common.utils.BitmapUtils; import com.prws.common.utils.CommonUtil; import com.prws.common.utils.ScreenUtils; import com.prws.common.utils.SharedPreferencesUtil; import com.prws.common.utils.dialog.MyButtomDialog; import com.trello.rxlifecycle2.android.RxLifecycleAndroid; import com.zhangteng.imagepicker.bean.ImageInfo; import com.zhangteng.imagepicker.config.ImagePickerConfig; import com.zhangteng.imagepicker.config.ImagePickerEnum; import com.zhangteng.imagepicker.config.ImagePickerOpen; import com.zhangteng.imagepicker.imageloader.GlideImageLoader; import com.zhangteng.utils.IHandlerCallBack; import java.io.File; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Locale; import java.util.Map; import io.reactivex.Observable; import io.reactivex.Observer; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.disposables.Disposable; import io.reactivex.schedulers.Schedulers; public class ErrorFragment extends BaseRxFragment { StudentBean studentBean; private int subject; private ErrorAdapter errorAdapter; private HomeworkAdapter homeworkAdapter; private String filePath; @Override protected FragmentErrorBookBinding onCreateViewBinding(@NonNull LayoutInflater inflater, @Nullable ViewGroup parent) { return FragmentErrorBookBinding.inflate(inflater, parent, false); } public void refreshStudent() { String student = (String) SharedPreferencesUtil.getData("student", ""); try { studentBean = new Gson().fromJson(student, StudentBean.class); getBinding().tvChoose.setText(studentBean.getStuName()); } catch (Exception e) { e.printStackTrace(); } } @Override public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); String photo = (String) SharedPreferencesUtil.getData("photo", ""); if (!TextUtils.isEmpty(photo)) { RoundedCorners roundedCorners = new RoundedCorners(ScreenUtils.dpToPx(getContext(), 45)); RequestOptions options = RequestOptions.bitmapTransform(roundedCorners); Glide.with(getContext()).load(photo).apply(options).into(getBinding().ivStudent); } String name = (String) SharedPreferencesUtil.getData("name", ""); getBinding().tvName.setText(name); refreshStudent(); getBinding().tvChoose.setOnClickListener(v -> startActivity(new Intent(getContext(), TeacherChooseActivity.class))); getBinding().rlTakePhoto.setOnClickListener(v -> takePhoto(0)); getBinding().flEntryHomework.setOnClickListener(v -> takePhoto(1)); BaseQuickAdapter adapter = new BaseQuickAdapter(R.layout.item_subject, Arrays.asList(getResources().getStringArray(R.array.filter_subject))) { @Override public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) { } @Override protected void convert(@NonNull BaseViewHolder item, Object o) { item.setText(R.id.tv_subject, getResources().getStringArray(R.array.filter_subject)[item.getAdapterPosition()]); switch (item.getAdapterPosition()) { case 0: item.setImageResource(R.id.iv_subject, R.mipmap.ic_chinese); break; case 1: item.setImageResource(R.id.iv_subject, R.mipmap.ic_math); break; case 2: item.setImageResource(R.id.iv_subject, R.mipmap.ic_english); break; case 3: item.setImageResource(R.id.iv_subject, R.mipmap.ic_physics); break; case 4: item.setImageResource(R.id.iv_subject, R.mipmap.ic_chemistry); break; } ViewGroup.LayoutParams layoutParams = item.getView(R.id.rl_subject).getLayoutParams(); layoutParams.width = (CommonUtil.getScreenWidth(getContext()) - CommonUtil.dpToPx(getContext(), 30)) / 4; item.getView(R.id.rl_subject).setLayoutParams(layoutParams); item.getConvertView().setOnClickListener(v -> { if (subject != item.getAdapterPosition()) { subject = item.getAdapterPosition(); String subStr = getResources().getStringArray(R.array.filter_subject)[subject]; getError(subStr); getHomework(subStr); } }); } }; getBinding().rvSubject.setAdapter(adapter); subject = 0; getError(getResources().getStringArray(R.array.filter_subject)[subject]); getBinding().llAll.setOnClickListener(v -> { 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); homeworkAdapter = new HomeworkAdapter(); homeworkAdapter.setOnItemClickListener((baseQuickAdapter, view1, i) -> { HomeworkList data = homeworkAdapter.getData().get(i); Gson gson = new Gson(); String json = gson.toJson(studentBean); Student s = gson.fromJson(json, Student.class); if (data.getRight() == null) { Intent intent = new Intent(requireContext(), HomeworkDetailActivity.class); intent.putExtra("student", s); intent.putExtra("data", data); startActivity(intent); } else { Intent intent = new Intent(requireContext(), HomeworkShareActivity.class); intent.putExtra("student", s); intent.putExtra("id", data.getId()); intent.putExtra("grade", data.getGrade()); intent.putExtra("subject", data.getSubject()); String name1 = new SimpleDateFormat("yyyy年M月d日作业", Locale.CHINA).format(data.uploadTime); intent.putExtra("name", name1); startActivity(intent); } }); binding.rvMain.setAdapter(errorAdapter); binding.tabLayout.addTab(binding.tabLayout.newTab().setText("最近错题")); binding.tabLayout.addTab(binding.tabLayout.newTab().setText("最近作业")); binding.tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { @Override public void onTabSelected(TabLayout.Tab tab) { if (tab.getPosition() == 0) { binding.rvMain.setAdapter(errorAdapter); binding.rvMain.setVisibility(errorAdapter.list.isEmpty() ? View.GONE : View.VISIBLE); binding.llEmpty.setVisibility(errorAdapter.list.isEmpty() ? View.VISIBLE : View.GONE); binding.tvListTitle.setText("最近错题"); binding.tvEmpty.setText("暂无错题~"); } else { binding.rvMain.setAdapter(homeworkAdapter); binding.rvMain.setVisibility(homeworkAdapter.getData().isEmpty() ? View.GONE : View.VISIBLE); binding.llEmpty.setVisibility(homeworkAdapter.getData().isEmpty() ? View.VISIBLE : View.GONE); binding.tvListTitle.setText("最近作业"); binding.tvEmpty.setText("暂无作业~"); } } @Override public void onTabUnselected(TabLayout.Tab tab) { } @Override public void onTabReselected(TabLayout.Tab tab) { } }); } private void takePhoto(int type) { if (!XXPermissions.isGranted(getContext(), Permission.CAMERA, Permission.WRITE_EXTERNAL_STORAGE)) { XXPermissions.with(getContext()) // 申请多个权限 .permission(Permission.CAMERA).request(new OnPermissionCallback() { @Override public void onGranted(List permissions, boolean all) { if (all) { //开启扫码界面 showButtonDialog(type); } else { Toast.makeText(getContext(), "需要权限", Toast.LENGTH_SHORT).show(); } } @Override public void onDenied(List permissions, boolean never) { XXPermissions.startPermissionActivity(getContext(), permissions); } }); } else { showButtonDialog(type); } } private void showButtonDialog(int type) { MyButtomDialog dialog = new MyButtomDialog(getActivity(), R.style.BottomSheetDialog); View bottomView = LayoutInflater.from(getActivity()).inflate(R.layout.bottom_sheet_layout, null); dialog.setContentView(bottomView); bottomView.findViewById(R.id.take_photo).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { dialog.dismiss(); Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); //确保有相机来处理Intent filePath = requireActivity().getExternalFilesDir("images").getPath() + "/" + System.currentTimeMillis() + CommonUtil.getStr() + ".jpg"; File photoFile = new File(filePath); //适配Android 7.0文件权限,通过FileProvider创建一个content类型的Uri Uri photoUri = FileProvider.getUriForFile(requireActivity(), "com.hjx.parent.fileprovider", photoFile); takePictureIntent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION); takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoUri); startActivityForResult(takePictureIntent, type == 0 ? 0xA01 : 0xA02); } }); bottomView.findViewById(R.id.choose_photo).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { dialog.dismiss(); ImagePickerConfig imagePickerConfig = new ImagePickerConfig.Builder().provider(getActivity().getPackageName() + ".fileprovider").imageLoader(new GlideImageLoader()) //图片加载器 .iHandlerCallBack(new HandlerCallBack(type)) //图片选择器生命周期监听(直接打开摄像头时无效) .multiSelect(true) //是否多选 .isShowCamera(false).isVideoPicker(false) //是否选择视频 默认false .isImagePicker(true).imagePickerType(ImagePickerEnum.PHOTO_PICKER) //选择器打开类型 .maxImageSelectable(5) //图片可选择数 .maxHeight(1920) //图片最大高度 .maxWidth(1920) //图片最大宽度 .maxImageSize(3) //图片最大大小Mb .isCrop(false).pathList(new ArrayList<>()).pickerThemeColorRes(R.color.image_picker_white).pickerTitleColorRes(R.color.image_picker_text_black).cropThemeColorRes(R.color.image_picker_white).cropTitleColorRes(R.color.image_picker_text_black).pickerBackRes(R.mipmap.image_picker_back_black).pickerFolderRes(R.mipmap.image_picker_folder_black).build(); ImagePickerOpen.getInstance().setImagePickerConfig(imagePickerConfig).pathList(new ArrayList<>()).open(getActivity()); } }); bottomView.findViewById(R.id.cancel).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { dialog.dismiss(); } }); dialog.show(); } @SuppressLint("CheckResult") protected void getHomework(String subject) { if (studentBean == null) return; NetWorks.service_url.getStudentHomework(NetWorks.getHeader(), studentBean.getStuId()) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .compose(RxLifecycleAndroid.bindFragment(getRxLifecycle())) .map(ResponseResult::getData) .toObservable() .concatMap(Observable::fromIterable) .filter(data -> subject.equals(data.getSubject())) //.filter(data -> data.getRight() == null) .take(5) .toList() .subscribe((data, th) -> { if (th != null) th.printStackTrace(); homeworkAdapter.setNewData(data); if (binding.tabLayout.getSelectedTabPosition() == 1) { binding.rvMain.setVisibility(data == null || data.isEmpty() ? View.GONE : View.VISIBLE); binding.llEmpty.setVisibility(data == null || data.isEmpty() ? View.VISIBLE : View.GONE); } }); } private void getError(String subject) { if (studentBean == null) { return; } Map map = new HashMap<>(); map.put("subject", subject); map.put("stuId", studentBean.getStuId()); map.put("pageSize", 5); map.put("pageNum", 1); NetWorks.getError(map, new Observer>>() { @Override public void onSubscribe(Disposable d) { } @Override public void onNext(ResponseResult> result) { if (result.getData() != null && result.getCode() == 200) { List topicBeans = result.getData().getList(); errorAdapter.refresh(topicBeans); if (binding.tabLayout.getSelectedTabPosition() == 0) { if (topicBeans.size() > 0) { getBinding().rvMain.setVisibility(View.VISIBLE); getBinding().llEmpty.setVisibility(View.GONE); } else { getBinding().rvMain.setVisibility(View.GONE); getBinding().llEmpty.setVisibility(View.VISIBLE); } } } } @Override public void onError(Throwable e) { e.printStackTrace(); } @Override public void onComplete() { } }); } @Override public void onResume() { super.onResume(); String subStr = getResources().getStringArray(R.array.filter_subject)[subject]; getError(subStr); getHomework(subStr); } public class HandlerCallBack implements IHandlerCallBack { int type; public HandlerCallBack(int type) { this.type = type; } private String TAG = "---ImagePicker---"; List photoList = new ArrayList<>(); @Override public void onStart() { Log.i(TAG, "onStart: 开启"); } @Override public void onSuccess(List photoList) { this.photoList = photoList; Log.i(TAG, "onSuccess: 返回数据"); } @Override public void onCancel() { Log.i(TAG, "onCancel: 取消"); } @Override public void onFinish(List selectImage) { if (selectImage.size() == photoList.size()) { ArrayList strings = new ArrayList<>(); Intent intent = new Intent(getActivity(), ImageActivity.class); for (ImageInfo imageInfo : selectImage) { strings.add(imageInfo.getPath()); } intent.putStringArrayListExtra("images", strings); intent.putExtra("type", type); startActivity(intent); } } @Override public void onError() { Log.i(TAG, "onError: 出错"); } } @Override public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { super.onActivityResult(requestCode, resultCode, data); if (resultCode != RESULT_OK) return; if (requestCode == 0xA01 || requestCode == 0xA02 && !TextUtils.isEmpty(filePath)) { Bitmap b = BitmapUtils.compress(BitmapFactory.decodeFile(filePath)); String path = getContext().getExternalFilesDir("images").getPath() + "/" + System.currentTimeMillis() + CommonUtil.getStr() + ".jpg"; CommonUtil.saveBitmapToUri(b, path); ArrayList strings = new ArrayList<>(); Intent intent = new Intent(getContext(), ImageActivity.class); strings.add(path); intent.putStringArrayListExtra("images", strings); intent.putExtra("type", requestCode == 0xA01 ? 0 : 1); startActivity(intent); } } }