Compare View

switch
from
...
to
 
Commits (5)
Showing 51 changed files   Show diff stats
app/src/main/java/com/hjx/parent/ErrorBookActivity.java
1 package com.hjx.parent; 1 package com.hjx.parent;
2 2
3 import android.content.Intent; 3 import android.content.Intent;
4 import android.graphics.Bitmap; 4 import android.graphics.Bitmap;
5 import android.graphics.BitmapFactory; 5 import android.graphics.BitmapFactory;
6 import android.net.Uri; 6 import android.net.Uri;
7 import android.os.Bundle; 7 import android.os.Bundle;
8 import android.provider.MediaStore; 8 import android.provider.MediaStore;
9 import android.text.TextUtils; 9 import android.text.TextUtils;
10 import android.util.Log; 10 import android.util.Log;
11 import android.view.LayoutInflater; 11 import android.view.LayoutInflater;
12 import android.view.View; 12 import android.view.View;
13 import android.view.ViewGroup; 13 import android.view.ViewGroup;
14 import android.widget.LinearLayout; 14 import android.widget.LinearLayout;
15 import android.widget.Toast; 15 import android.widget.Toast;
16 16
17 import androidx.annotation.NonNull; 17 import androidx.annotation.NonNull;
18 import androidx.annotation.Nullable; 18 import androidx.annotation.Nullable;
19 import androidx.core.content.FileProvider; 19 import androidx.core.content.FileProvider;
20 import androidx.recyclerview.widget.LinearLayoutManager; 20 import androidx.recyclerview.widget.LinearLayoutManager;
21 import androidx.recyclerview.widget.RecyclerView; 21 import androidx.recyclerview.widget.RecyclerView;
22 22
23 import com.chad.library.adapter.base.BaseQuickAdapter; 23 import com.chad.library.adapter.base.BaseQuickAdapter;
24 import com.chad.library.adapter.base.BaseViewHolder; 24 import com.chad.library.adapter.base.BaseViewHolder;
25 import com.google.gson.Gson; 25 import com.google.gson.Gson;
26 import com.hjq.permissions.OnPermissionCallback; 26 import com.hjq.permissions.OnPermissionCallback;
27 import com.hjq.permissions.Permission; 27 import com.hjq.permissions.Permission;
28 import com.hjq.permissions.XXPermissions; 28 import com.hjq.permissions.XXPermissions;
29 import com.hjx.parent.adapter.ErrorAdapter; 29 import com.hjx.parent.adapter.ErrorAdapter;
30 import com.hjx.parent.bean.StudentBean; 30 import com.hjx.parent.bean.StudentBean;
31 import com.hjx.parent.databinding.ActivityErrorBookBinding; 31 import com.hjx.parent.databinding.ActivityErrorBookBinding;
32 import com.prws.common.bean.PageInfo;
33 import com.prws.common.bean.ResponseResult;
34 import com.prws.common.bean.TopicBean; 32 import com.prws.common.bean.PageInfo;
35 import com.prws.common.net.NetWorks; 33 import com.prws.common.bean.ResponseResult;
36 import com.prws.common.utils.BitmapUtils; 34 import com.prws.common.bean.TopicBean;
37 import com.prws.common.utils.CommonUtil; 35 import com.prws.common.net.NetWorks;
38 import com.prws.common.utils.SharedPreferencesUtil; 36 import com.prws.common.utils.BitmapUtils;
39 import com.prws.common.utils.dialog.MyButtomDialog; 37 import com.prws.common.utils.CommonUtil;
40 import com.zhangteng.imagepicker.bean.ImageInfo; 38 import com.prws.common.utils.SharedPreferencesUtil;
41 import com.zhangteng.imagepicker.config.ImagePickerConfig; 39 import com.prws.common.utils.dialog.MyButtomDialog;
42 import com.zhangteng.imagepicker.config.ImagePickerEnum; 40 import com.zhangteng.imagepicker.bean.ImageInfo;
43 import com.zhangteng.imagepicker.config.ImagePickerOpen;
44 import com.zhangteng.imagepicker.imageloader.GlideImageLoader; 41 import com.zhangteng.imagepicker.config.ImagePickerConfig;
45 import com.zhangteng.utils.IHandlerCallBack; 42 import com.zhangteng.imagepicker.config.ImagePickerEnum;
46 43 import com.zhangteng.imagepicker.config.ImagePickerOpen;
47 import java.io.File; 44 import com.zhangteng.imagepicker.imageloader.GlideImageLoader;
48 import java.util.ArrayList; 45 import com.zhangteng.utils.IHandlerCallBack;
49 import java.util.Arrays; 46
50 import java.util.HashMap; 47 import java.io.File;
51 import java.util.List; 48 import java.util.ArrayList;
52 import java.util.Map; 49 import java.util.Arrays;
53 50 import java.util.HashMap;
54 import io.reactivex.Observer; 51 import java.util.List;
55 import io.reactivex.disposables.Disposable; 52 import java.util.Map;
56 53
57 public class ErrorBookActivity extends BaseActivity<ActivityErrorBookBinding> { 54 import io.reactivex.Observer;
58 StudentBean studentBean; 55 import io.reactivex.disposables.Disposable;
59 private int subject; 56
60 private ErrorAdapter adapter; 57 public class ErrorBookActivity extends BaseActivity<ActivityErrorBookBinding> {
61 private int REQUEST_CODE_IMAGE = 123; 58 StudentBean studentBean;
62 private String filePath; 59 private int subject;
63 60 private ErrorAdapter adapter;
64 @Override 61 private int REQUEST_CODE_IMAGE = 123;
65 public void initView(Bundle savedInstanceState) { 62 private String filePath;
66 String student = (String) SharedPreferencesUtil.getData("student", ""); 63
67 try { 64 @Override
68 studentBean = new Gson().fromJson(student, StudentBean.class); 65 public void initView(Bundle savedInstanceState) {
69 } catch (Exception e) { 66 String student = (String) SharedPreferencesUtil.getData("student", "");
70 67 try {
71 } 68 studentBean = new Gson().fromJson(student, StudentBean.class);
72 binding.ivBack.setOnClickListener(new View.OnClickListener() { 69 } catch (Exception e) {
73 @Override 70
74 public void onClick(View v) { 71 }
75 finish(); 72 binding.ivBack.setOnClickListener(new View.OnClickListener() {
76 } 73 @Override
77 }); 74 public void onClick(View v) {
78 binding.rlTakePhoto.post(new Runnable() { 75 finish();
79 @Override 76 }
80 public void run() { 77 });
81 LinearLayout.LayoutParams layoutParams = (LinearLayout.LayoutParams) binding.rlTakePhoto.getLayoutParams(); 78 binding.rlTakePhoto.post(new Runnable() {
82 layoutParams.width = CommonUtil.getScreenWidth(context); 79 @Override
83 layoutParams.height = CommonUtil.getScreenWidth(context) * 20 / 37; 80 public void run() {
84 binding.rlTakePhoto.setLayoutParams(layoutParams); 81 LinearLayout.LayoutParams layoutParams = (LinearLayout.LayoutParams) binding.rlTakePhoto.getLayoutParams();
85 } 82 layoutParams.width = CommonUtil.getScreenWidth(context);
86 }); 83 layoutParams.height = CommonUtil.getScreenWidth(context) * 20 / 37;
87 binding.rlTakePhoto.setOnClickListener(new View.OnClickListener() { 84 binding.rlTakePhoto.setLayoutParams(layoutParams);
88 @Override 85 }
89 public void onClick(View v) { 86 });
90 if (!XXPermissions.isGranted(context, Permission.CAMERA, Permission.WRITE_EXTERNAL_STORAGE)) { 87 binding.rlTakePhoto.setOnClickListener(new View.OnClickListener() {
91 XXPermissions.with(context) 88 @Override
92 // 申请多个权限 89 public void onClick(View v) {
93 .permission(Permission.CAMERA) 90 if (!XXPermissions.isGranted(context, Permission.CAMERA, Permission.WRITE_EXTERNAL_STORAGE)) {
94 .request(new OnPermissionCallback() { 91 XXPermissions.with(context)
95 @Override 92 // 申请多个权限
96 public void onGranted(List<String> permissions, boolean all) { 93 .permission(Permission.CAMERA)
97 if (all) { 94 .request(new OnPermissionCallback() {
98 //开启扫码界面 95 @Override
99 showButtonDialog(); 96 public void onGranted(List<String> permissions, boolean all) {
100 } else { 97 if (all) {
101 Toast.makeText(context, "需要权限", Toast.LENGTH_SHORT).show(); 98 //开启扫码界面
102 } 99 showButtonDialog();
103 } 100 } else {
104 101 Toast.makeText(context, "需要权限", Toast.LENGTH_SHORT).show();
105 @Override 102 }
106 public void onDenied(List<String> permissions, boolean never) { 103 }
107 XXPermissions.startPermissionActivity(context, permissions); 104
108 } 105 @Override
109 }); 106 public void onDenied(List<String> permissions, boolean never) {
110 } else { 107 XXPermissions.startPermissionActivity(context, permissions);
111 showButtonDialog(); 108 }
112 } 109 });
113 110 } else {
114 } 111 showButtonDialog();
115 }); 112 }
116 BaseQuickAdapter adapter = new BaseQuickAdapter(R.layout.item_subject, Arrays.asList(getResources().getStringArray(R.array.filter_subject))) { 113
117 @Override 114 }
118 public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) { 115 });
119 116 BaseQuickAdapter adapter = new BaseQuickAdapter(R.layout.item_subject, Arrays.asList(getResources().getStringArray(R.array.filter_subject))) {
120 } 117 @Override
121 118 public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
122 @Override 119
123 protected void convert(@NonNull BaseViewHolder item, Object o) { 120 }
124 item.setText(R.id.tv_subject, getResources().getStringArray(R.array.filter_subject)[item.getAdapterPosition()]); 121
125 switch (item.getAdapterPosition()) { 122 @Override
126 case 0: 123 protected void convert(@NonNull BaseViewHolder item, Object o) {
127 item.setImageResource(R.id.iv_subject, R.drawable.png_ic_chinese); 124 item.setText(R.id.tv_subject, getResources().getStringArray(R.array.filter_subject)[item.getAdapterPosition()]);
128 break; 125 switch (item.getAdapterPosition()) {
129 case 1: 126 case 0:
130 item.setImageResource(R.id.iv_subject, R.drawable.png_ic_math); 127 item.setImageResource(R.id.iv_subject, R.drawable.png_ic_chinese);
131 break; 128 break;
132 case 2: 129 case 1:
133 item.setImageResource(R.id.iv_subject, R.drawable.png_ic_english); 130 item.setImageResource(R.id.iv_subject, R.drawable.png_ic_math);
134 break; 131 break;
135 case 3: 132 case 2:
136 item.setImageResource(R.id.iv_subject, R.drawable.png_ic_physics); 133 item.setImageResource(R.id.iv_subject, R.drawable.png_ic_english);
137 break; 134 break;
138 case 4: 135 case 3:
139 item.setImageResource(R.id.iv_subject, R.drawable.png_ic_chemistry); 136 item.setImageResource(R.id.iv_subject, R.drawable.png_ic_physics);
140 break; 137 break;
141 } 138 case 4:
142 ViewGroup.LayoutParams layoutParams = item.getView(R.id.rl_subject).getLayoutParams(); 139 item.setImageResource(R.id.iv_subject, R.drawable.png_ic_chemistry);
143 layoutParams.width = (CommonUtil.getScreenWidth(context) - CommonUtil.dpToPx(context, 30)) / 4; 140 break;
144 item.getView(R.id.rl_subject).setLayoutParams(layoutParams); 141 }
145 item.getConvertView().setOnClickListener(new View.OnClickListener() { 142 ViewGroup.LayoutParams layoutParams = item.getView(R.id.rl_subject).getLayoutParams();
146 @Override 143 layoutParams.width = (CommonUtil.getScreenWidth(context) - CommonUtil.dpToPx(context, 30)) / 4;
147 public void onClick(View v) { 144 item.getView(R.id.rl_subject).setLayoutParams(layoutParams);
148 if (subject != item.getAdapterPosition()) { 145 item.getConvertView().setOnClickListener(new View.OnClickListener() {
149 subject = item.getAdapterPosition(); 146 @Override
150 getError(getResources().getStringArray(R.array.filter_subject)[subject]); 147 public void onClick(View v) {
151 } 148 if (subject != item.getAdapterPosition()) {
152 } 149 subject = item.getAdapterPosition();
153 }); 150 getError(getResources().getStringArray(R.array.filter_subject)[subject]);
154 } 151 }
155 }; 152 }
156 binding.recycleSubject.setLayoutManager(new LinearLayoutManager(context, LinearLayoutManager.HORIZONTAL, false)); 153 });
157 binding.recycleSubject.setAdapter(adapter); 154 }
158 subject = 0; 155 };
159 getError(getResources().getStringArray(R.array.filter_subject)[subject]); 156 binding.recycleSubject.setLayoutManager(new LinearLayoutManager(context, LinearLayoutManager.HORIZONTAL, false));
160 binding.llAll.setOnClickListener(new View.OnClickListener() { 157 binding.recycleSubject.setAdapter(adapter);
161 @Override 158 subject = 0;
162 public void onClick(View v) { 159 getError(getResources().getStringArray(R.array.filter_subject)[subject]);
163 Intent intent = new Intent(context, ErrorListActivity.class); 160 binding.llAll.setOnClickListener(new View.OnClickListener() {
164 startActivity(intent); 161 @Override
165 } 162 public void onClick(View v) {
166 }); 163 Intent intent = new Intent(context, ErrorListActivity.class);
167 } 164 startActivity(intent);
168 165 }
169 @Override 166 });
170 protected ActivityErrorBookBinding getViewBinding() { 167 }
171 return ActivityErrorBookBinding.inflate(getLayoutInflater()); 168
172 } 169 @Override
173 170 protected ActivityErrorBookBinding getViewBinding() {
174 private void showButtonDialog() { 171 return ActivityErrorBookBinding.inflate(getLayoutInflater());
175 MyButtomDialog dialog = new MyButtomDialog(context, R.style.BottomSheetDialog); 172 }
176 View bottomView = LayoutInflater.from(context).inflate(R.layout.bottom_sheet_layout, null); 173
177 dialog.setContentView(bottomView); 174 private void showButtonDialog() {
178 bottomView.findViewById(R.id.take_photo).setOnClickListener(new View.OnClickListener() { 175 MyButtomDialog dialog = new MyButtomDialog(context, R.style.BottomSheetDialog);
179 @Override 176 View bottomView = LayoutInflater.from(context).inflate(R.layout.bottom_sheet_layout, null);
180 public void onClick(View view) { 177 dialog.setContentView(bottomView);
181 dialog.dismiss(); 178 bottomView.findViewById(R.id.take_photo).setOnClickListener(new View.OnClickListener() {
182 Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 179 @Override
183 //确保有相机来处理Intent 180 public void onClick(View view) {
184 filePath = context.getExternalFilesDir("images").getPath() + "/" + String.valueOf(System.currentTimeMillis()) + CommonUtil.getStr() + ".jpg"; 181 dialog.dismiss();
185 File photoFile = new File(filePath); 182 Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
186 if (photoFile != null) { 183 //确保有相机来处理Intent
187 //适配Android 7.0文件权限,通过FileProvider创建一个content类型的Uri 184 filePath = context.getExternalFilesDir("images").getPath() + "/" + String.valueOf(System.currentTimeMillis()) + CommonUtil.getStr() + ".jpg";
188 Uri photoUri = FileProvider.getUriForFile(activity, "com.hjx.parent.fileprovider", photoFile); 185 File photoFile = new File(filePath);
189 takePictureIntent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION); 186 if (photoFile != null) {
190 takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoUri); 187 //适配Android 7.0文件权限,通过FileProvider创建一个content类型的Uri
191 activity.startActivityForResult(takePictureIntent, REQUEST_CODE_IMAGE); 188 Uri photoUri = FileProvider.getUriForFile(activity, "com.hjx.parent.fileprovider", photoFile);
192 } 189 takePictureIntent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
193 } 190 takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoUri);
194 }); 191 activity.startActivityForResult(takePictureIntent, REQUEST_CODE_IMAGE);
195 bottomView.findViewById(R.id.choose_photo).setOnClickListener(new View.OnClickListener() { 192 }
196 @Override 193 }
197 public void onClick(View view) { 194 });
198 dialog.dismiss(); 195 bottomView.findViewById(R.id.choose_photo).setOnClickListener(new View.OnClickListener() {
199 ImagePickerConfig imagePickerConfig = new ImagePickerConfig.Builder().provider(getPackageName() + ".fileprovider").imageLoader(new GlideImageLoader()) //图片加载器 196 @Override
200 .iHandlerCallBack(new HandlerCallBack()) //图片选择器生命周期监听(直接打开摄像头时无效) 197 public void onClick(View view) {
201 .multiSelect(true) //是否多选 198 dialog.dismiss();
202 .isShowCamera(false).isVideoPicker(false) //是否选择视频 默认false 199 ImagePickerConfig imagePickerConfig = new ImagePickerConfig.Builder().provider(getPackageName() + ".fileprovider").imageLoader(new GlideImageLoader()) //图片加载器
203 .isImagePicker(true).imagePickerType(ImagePickerEnum.PHOTO_PICKER) //选择器打开类型 200 .iHandlerCallBack(new HandlerCallBack()) //图片选择器生命周期监听(直接打开摄像头时无效)
204 .maxImageSelectable(5) //图片可选择数 201 .multiSelect(true) //是否多选
205 .maxHeight(1920) //图片最大高度 202 .isShowCamera(false).isVideoPicker(false) //是否选择视频 默认false
206 .maxWidth(1920) //图片最大宽度 203 .isImagePicker(true).imagePickerType(ImagePickerEnum.PHOTO_PICKER) //选择器打开类型
207 .maxImageSize(3) //图片最大大小Mb 204 .maxImageSelectable(5) //图片可选择数
208 .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(); 205 .maxHeight(1920) //图片最大高度
209 ImagePickerOpen.getInstance().setImagePickerConfig(imagePickerConfig).pathList(new ArrayList<>()).open(ErrorBookActivity.this); 206 .maxWidth(1920) //图片最大宽度
210 207 .maxImageSize(3) //图片最大大小Mb
211 } 208 .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();
212 }); 209 ImagePickerOpen.getInstance().setImagePickerConfig(imagePickerConfig).pathList(new ArrayList<>()).open(ErrorBookActivity.this);
213 bottomView.findViewById(R.id.cancel).setOnClickListener(new View.OnClickListener() { 210
214 @Override 211 }
215 public void onClick(View view) { 212 });
216 dialog.dismiss(); 213 bottomView.findViewById(R.id.cancel).setOnClickListener(new View.OnClickListener() {
217 } 214 @Override
218 }); 215 public void onClick(View view) {
219 dialog.show(); 216 dialog.dismiss();
220 } 217 }
221 218 });
222 private void getError(String subject) { 219 dialog.show();
223 if (studentBean != null) { 220 }
224 Map map = new HashMap(); 221
225 map.put("subject", subject); 222 private void getError(String subject) {
226 map.put("stuId", studentBean.getStuId()); 223 if (studentBean != null) {
227 map.put("pageSize", 5); 224 Map map = new HashMap();
228 map.put("pageNum", 1); 225 map.put("subject", subject);
229 NetWorks.getError(map, new Observer<ResponseResult<PageInfo<TopicBean>>>() { 226 map.put("stuId", studentBean.getStuId());
230 @Override 227 map.put("pageSize", 5);
231 public void onSubscribe(Disposable d) { 228 map.put("pageNum", 1);
232 229 NetWorks.getError(map, new Observer<ResponseResult<PageInfo<TopicBean>>>() {
233 } 230 @Override
234 231 public void onSubscribe(Disposable d) {
235 @Override 232
236 public void onNext(ResponseResult<PageInfo<TopicBean>> result) { 233 }
237 if (result.getData() != null && result.getCode() == 200) { 234
238 List<TopicBean> topicBeans = result.getData().getList(); 235 @Override
239 loadError(topicBeans); 236 public void onNext(ResponseResult<PageInfo<TopicBean>> result) {
240 } 237 if (result.getData() != null && result.getCode() == 200) {
241 } 238 List<TopicBean> topicBeans = result.getData().getList();
242 239 loadError(topicBeans);
243 @Override 240 }
244 public void onError(Throwable e) { 241 }
245 e.toString(); 242
246 } 243 @Override
247 244 public void onError(Throwable e) {
248 @Override 245 e.toString();
249 public void onComplete() { 246 }
250 247
251 } 248 @Override
252 }); 249 public void onComplete() {
253 } 250
254 } 251 }
255 252 });
256 @Override 253 }
257 protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { 254 }
258 super.onActivityResult(requestCode, resultCode, data); 255
259 if (requestCode == REQUEST_CODE_IMAGE && resultCode == RESULT_OK && !TextUtils.isEmpty(filePath)) { 256 @Override
260 Bitmap b = BitmapUtils.compress(BitmapFactory.decodeFile(filePath)); 257 protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
261 String path = context.getExternalFilesDir("images").getPath() + "/" + String.valueOf(System.currentTimeMillis()) + CommonUtil.getStr() + ".jpg"; 258 super.onActivityResult(requestCode, resultCode, data);
262 CommonUtil.saveBitmapToUri(b, path); 259 if (requestCode == REQUEST_CODE_IMAGE && resultCode == RESULT_OK && !TextUtils.isEmpty(filePath)) {
263 List<String> strings = new ArrayList<>(); 260 Bitmap b = BitmapUtils.compress(BitmapFactory.decodeFile(filePath));
264 Intent intent = new Intent(context, ImageActivity.class); 261 String path = context.getExternalFilesDir("images").getPath() + "/" + String.valueOf(System.currentTimeMillis()) + CommonUtil.getStr() + ".jpg";
265 strings.add(path); 262 CommonUtil.saveBitmapToUri(b, path);
266 intent.putStringArrayListExtra("images", (ArrayList<String>) strings); 263 List<String> strings = new ArrayList<>();
267 startActivity(intent); 264 Intent intent = new Intent(context, ImageActivity.class);
268 } 265 strings.add(path);
269 } 266 intent.putStringArrayListExtra("images", (ArrayList<String>) strings);
270 267 startActivity(intent);
271 private void loadError(List<TopicBean> list) { 268 }
272 if (list.size() > 0) { 269 }
273 binding.recycleError.setVisibility(View.VISIBLE); 270
274 binding.llEmpty.setVisibility(View.GONE); 271 private void loadError(List<TopicBean> list) {
275 if (adapter != null) { 272 if (list.size() > 0) {
276 adapter.refresh(list); 273 binding.recycleError.setVisibility(View.VISIBLE);
277 } else { 274 binding.llEmpty.setVisibility(View.GONE);
278 adapter = new ErrorAdapter(context, list, false); 275 if (adapter != null) {
279 binding.recycleError.setLayoutManager(new LinearLayoutManager(context, RecyclerView.VERTICAL, false)); 276 adapter.refresh(list);
280 binding.recycleError.setAdapter(adapter); 277 } else {
281 } 278 adapter = new ErrorAdapter(context, list, false);
282 } else { 279 binding.recycleError.setLayoutManager(new LinearLayoutManager(context, RecyclerView.VERTICAL, false));
283 binding.recycleError.setVisibility(View.GONE); 280 binding.recycleError.setAdapter(adapter);
284 binding.llEmpty.setVisibility(View.VISIBLE); 281 }
285 } 282 } else {
286 } 283 binding.recycleError.setVisibility(View.GONE);
287 284 binding.llEmpty.setVisibility(View.VISIBLE);
288 @Override 285 }
289 protected void onResume() { 286 }
290 super.onResume(); 287
291 getError(getResources().getStringArray(R.array.filter_subject)[subject]); 288 @Override
292 } 289 protected void onResume() {
293 290 super.onResume();
294 public class HandlerCallBack implements IHandlerCallBack<ImageInfo> { 291 getError(getResources().getStringArray(R.array.filter_subject)[subject]);
295 private String TAG = "---ImagePicker---"; 292 }
296 List<ImageInfo> photoList = new ArrayList<>(); 293
297 294 public class HandlerCallBack implements IHandlerCallBack<ImageInfo> {
298 @Override 295 private String TAG = "---ImagePicker---";
299 public void onStart() { 296 List<ImageInfo> photoList = new ArrayList<>();
300 Log.i(TAG, "onStart: 开启"); 297
301 } 298 @Override
302 299 public void onStart() {
303 @Override 300 Log.i(TAG, "onStart: 开启");
304 public void onSuccess(List<ImageInfo> photoList) { 301 }
305 this.photoList = photoList; 302
306 Log.i(TAG, "onSuccess: 返回数据"); 303 @Override
307 } 304 public void onSuccess(List<ImageInfo> photoList) {
308 305 this.photoList = photoList;
309 @Override 306 Log.i(TAG, "onSuccess: 返回数据");
310 public void onCancel() { 307 }
311 Log.i(TAG, "onCancel: 取消"); 308
312 } 309 @Override
313 310 public void onCancel() {
314 @Override 311 Log.i(TAG, "onCancel: 取消");
315 public void onFinish(List<ImageInfo> selectImage) { 312 }
316 if (selectImage.size() == photoList.size()) { 313
317 List<String> strings = new ArrayList<>(); 314 @Override
318 Intent intent = new Intent(context, ImageActivity.class); 315 public void onFinish(List<ImageInfo> selectImage) {
319 for (ImageInfo imageInfo : selectImage) { 316 if (selectImage.size() == photoList.size()) {
320 strings.add(imageInfo.getPath()); 317 List<String> strings = new ArrayList<>();
321 } 318 Intent intent = new Intent(context, ImageActivity.class);
322 intent.putStringArrayListExtra("images", (ArrayList<String>) strings); 319 for (ImageInfo imageInfo : selectImage) {
323 startActivity(intent); 320 strings.add(imageInfo.getPath());
324 } 321 }
325 } 322 intent.putStringArrayListExtra("images", (ArrayList<String>) strings);
326 323 startActivity(intent);
327 @Override 324 }
328 public void onError() { 325 }
329 Log.i(TAG, "onError: 出错"); 326
330 } 327 @Override
331 } 328 public void onError() {
332 } 329 Log.i(TAG, "onError: 出错");
333 330 }
app/src/main/java/com/hjx/parent/ImageActivity.java
1 package com.hjx.parent; 1 package com.hjx.parent;
2 2
3 import android.annotation.SuppressLint; 3 import android.annotation.SuppressLint;
4 import android.app.Dialog; 4 import android.app.Dialog;
5 import android.content.Intent; 5 import android.content.Intent;
6 import android.graphics.Bitmap; 6 import android.graphics.Bitmap;
7 import android.graphics.BitmapFactory; 7 import android.graphics.BitmapFactory;
8 import android.graphics.Rect; 8 import android.graphics.Rect;
9 import android.net.Uri; 9 import android.net.Uri;
10 import android.os.Bundle; 10 import android.os.Bundle;
11 import android.os.Handler; 11 import android.os.Handler;
12 import android.provider.MediaStore; 12 import android.provider.MediaStore;
13 import android.text.TextUtils; 13 import android.text.TextUtils;
14 import android.util.Log; 14 import android.util.Log;
15 import android.view.KeyEvent; 15 import android.view.KeyEvent;
16 import android.view.View; 16 import android.view.View;
17 17
18 18
19 import androidx.annotation.Nullable; 19 import androidx.annotation.Nullable;
20 import androidx.core.content.FileProvider; 20 import androidx.core.content.FileProvider;
21 import androidx.viewpager2.widget.ViewPager2; 21 import androidx.viewpager2.widget.ViewPager2;
22 22
23 import com.google.gson.Gson; 23 import com.google.gson.Gson;
24 import com.google.gson.JsonObject; 24 import com.google.gson.JsonObject;
25 import com.hjx.parent.adapter.ImageAdapter; 25 import com.hjx.parent.adapter.ImageAdapter;
26 import com.hjx.parent.databinding.ActivityImageBinding; 26 import com.hjx.parent.databinding.ActivityImageBinding;
27 import com.hjx.parent.dialog.AddHomeworkDialog; 27 import com.hjx.parent.dialog.AddHomeworkDialog;
28 import com.hjx.parent.dialog.ErrorInputDialog; 28 import com.hjx.parent.dialog.ErrorInputDialog;
29 import com.hjx.parent.dialog.PhotoViewDialog; 29 import com.hjx.parent.dialog.PhotoViewDialog;
30 import com.hjx.parent.dialog.TipDialog; 30 import com.hjx.parent.dialog.TipDialog;
31 import com.hjx.parent.rx.BaseRxActivity; 31 import com.hjx.parent.rx.BaseRxActivity;
32 import com.prws.common.bean.CutPicBean; 32 import com.prws.common.bean.CutPicBean;
33 import com.prws.common.bean.ImageBean; 33 import com.prws.common.bean.ImageBean;
34 import com.prws.common.bean.TopicBean; 34 import com.prws.common.bean.TopicBean;
35 import com.prws.common.net.NetWorks; 35 import com.prws.common.net.NetWorks;
36 import com.prws.common.utils.BitmapUtils; 36 import com.prws.common.utils.BitmapUtils;
37 import com.prws.common.utils.CommonUtil; 37 import com.prws.common.utils.CommonUtil;
38 import com.xiasuhuei321.loadingdialog.view.LoadingDialog; 38 import com.xiasuhuei321.loadingdialog.view.LoadingDialog;
39 39
40 import java.io.File; 40 import java.io.File;
41 import java.util.ArrayList; 41 import java.util.ArrayList;
42 import java.util.List; 42 import java.util.List;
43 43
44 import io.reactivex.Observer; 44 import io.reactivex.Observer;
45 import io.reactivex.disposables.Disposable; 45 import io.reactivex.disposables.Disposable;
46 import retrofit2.Call; 46 import retrofit2.Call;
47 import retrofit2.Callback; 47 import retrofit2.Callback;
48 import retrofit2.Response; 48 import retrofit2.Response;
49 49
50 public class ImageActivity extends BaseRxActivity<ActivityImageBinding> implements View.OnClickListener { 50 public class ImageActivity extends BaseRxActivity<ActivityImageBinding> implements View.OnClickListener {
51 51
52 private List<String> images = new ArrayList<>(); 52 private List<String> images = new ArrayList<>();
53 private ImageAdapter imageAdapter; 53 private ImageAdapter imageAdapter;
54 private List<ImageBean> list = new ArrayList<>(); 54 private List<ImageBean> list = new ArrayList<>();
55 private String filePath; 55 private String filePath;
56 56
57 private int type = 0; 57 private int type = 0;
58 private AddHomeworkDialog addHomeworkDialog; 58 private AddHomeworkDialog addHomeworkDialog;
59 59
60 @Override 60 @Override
61 public void initView(Bundle savedInstanceState) { 61 public void initView(Bundle savedInstanceState) {
62 type = getIntent().getIntExtra("type", 0); 62 type = getIntent().getIntExtra("type", 0);
63 binding.tvSave.setText(type == 0 ? "保存错题" : "录入题目"); 63 binding.tvSave.setText(type == 0 ? "保存错题" : "录入题目");
64 64
65 images = getIntent().getStringArrayListExtra("images"); 65 images = getIntent().getStringArrayListExtra("images");
66 if (images == null || images.size() <= 1) {
67 binding.rlPrevious.setVisibility(View.GONE);
68 binding.rlNext.setVisibility(View.GONE);
69 }
66 if (images == null || images.size() <= 1) { 70 for (String s : images) {
67 binding.rlPrevious.setVisibility(View.GONE); 71 String filepath = context.getExternalFilesDir("images").getPath() + "/" + System.currentTimeMillis() + CommonUtil.getStr() + ".jpg";
68 binding.rlNext.setVisibility(View.GONE); 72 ImageBean imageBean = new ImageBean();
69 } 73 Bitmap bitmap = BitmapUtils.getimage(s);
70 for (String s : images) { 74 CommonUtil.saveBitmapToUri(bitmap, filepath);
71 String filepath = context.getExternalFilesDir("images").getPath() + "/" + System.currentTimeMillis() + CommonUtil.getStr() + ".jpg"; 75 imageBean.setPath(filepath);
72 ImageBean imageBean = new ImageBean(); 76 imageBean.source = filepath;
73 Bitmap bitmap = BitmapUtils.getimage(s); 77 list.add(imageBean);
74 CommonUtil.saveBitmapToUri(bitmap, filepath); 78 }
75 imageBean.setPath(filepath); 79 imageAdapter = new ImageAdapter(this, list);
76 imageBean.source = filepath; 80 binding.viewPager.setAdapter(imageAdapter);
77 list.add(imageBean); 81 binding.viewPager.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
78 } 82 @Override
79 imageAdapter = new ImageAdapter(this, list); 83 public void onPageSelected(int position) {
80 binding.viewPager.setAdapter(imageAdapter); 84 if (list.get(position).getCuts() == null) {
81 binding.viewPager.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() { 85 // binding.ivPrevious.setEnabled(false);
82 @Override 86 // binding.ivNext.setEnabled(false);
83 public void onPageSelected(int position) { 87 clearText();
84 if (list.get(position).getCuts() == null) { 88 }
85 // binding.ivPrevious.setEnabled(false); 89 binding.tvTitle.setText((binding.viewPager.getCurrentItem() + 1) + "/" + list.size());
86 // binding.ivNext.setEnabled(false); 90 if (position == 0) {
87 clearText(); 91 binding.ivPrevious.setImageResource(R.mipmap.ic_previous_gray);
88 } 92 // binding.ivPrevious.setEnabled(true);
89 binding.tvTitle.setText((binding.viewPager.getCurrentItem() + 1) + "/" + list.size()); 93 } else {
90 if (position == 0) { 94 binding.ivPrevious.setImageResource(R.mipmap.ic_previous);
91 binding.ivPrevious.setImageResource(R.mipmap.ic_previous_gray); 95 // binding.ivPrevious.setEnabled(false);
92 // binding.ivPrevious.setEnabled(true); 96 }
93 } else { 97 if (position == list.size() - 1) {
94 binding.ivPrevious.setImageResource(R.mipmap.ic_previous); 98 binding.ivNext.setImageResource(R.mipmap.ic_next_gray);
95 // binding.ivPrevious.setEnabled(false); 99 // binding.ivNext.setEnabled(true);
96 } 100 } else {
97 if (position == list.size() - 1) { 101 binding.ivNext.setImageResource(R.mipmap.ic_next);
98 binding.ivNext.setImageResource(R.mipmap.ic_next_gray); 102 // binding.ivNext.setEnabled(false);
99 // binding.ivNext.setEnabled(true); 103 }
100 } else { 104 super.onPageSelected(position);
101 binding.ivNext.setImageResource(R.mipmap.ic_next); 105 }
102 // binding.ivNext.setEnabled(false); 106 });
103 } 107 binding.rlNext.setOnClickListener(this);
104 super.onPageSelected(position); 108 binding.rlPrevious.setOnClickListener(this);
105 } 109 binding.ivBack.setOnClickListener(this);
106 }); 110 binding.tvPhoto.setOnClickListener(this);
107 binding.rlNext.setOnClickListener(this); 111 binding.tvAdd.setOnClickListener(this);
108 binding.rlPrevious.setOnClickListener(this); 112 binding.llEdit.setOnClickListener(this);
109 binding.ivBack.setOnClickListener(this); 113 binding.tvSave.setOnClickListener(this);
110 binding.tvPhoto.setOnClickListener(this); 114 binding.btnShowSource.setOnClickListener(v -> {
111 binding.tvAdd.setOnClickListener(this); 115 if (list.isEmpty()) return;
112 binding.llEdit.setOnClickListener(this); 116 ImageBean data = list.get(binding.viewPager.getCurrentItem());
113 binding.tvSave.setOnClickListener(this); 117 new PhotoViewDialog(this).show(data.source);
114 binding.btnShowSource.setOnClickListener(v -> { 118 });
115 if (list.isEmpty()) return; 119 }
116 ImageBean data = list.get(binding.viewPager.getCurrentItem()); 120
117 new PhotoViewDialog(this).show(data.source); 121 public void clearText() {
118 }); 122 int index = binding.viewPager.getCurrentItem();
119 } 123 showLoadingDialog(getString(R.string.loading_text), new LoadingDialog.DismissListener() {
120 124 @Override
121 public void clearText() { 125 public void dimiss() {
122 int index = binding.viewPager.getCurrentItem(); 126 // binding.ivPrevious.setEnabled(index != 0);
123 showLoadingDialog(getString(R.string.loading_text), new LoadingDialog.DismissListener() { 127 // binding.ivNext.setEnabled(index != list.size() - 1);
124 @Override 128 }
125 public void dimiss() { 129 });
126 // binding.ivPrevious.setEnabled(index != 0); 130 Log.i("clearText", list.get(index).getPath());
127 // binding.ivNext.setEnabled(index != list.size() - 1); 131 String base64 = BitmapUtils.imageToBase64(list.get(index).getPath());
128 } 132 NetWorks.removeWriting(base64, new Observer<JsonObject>() {
129 }); 133 @Override
130 Log.i("clearText", list.get(index).getPath()); 134 public void onSubscribe(Disposable d) {
131 String base64 = BitmapUtils.imageToBase64(list.get(index).getPath()); 135
132 NetWorks.removeWriting(base64, new Observer<JsonObject>() { 136 }
133 @Override 137
134 public void onSubscribe(Disposable d) { 138 @Override
135 139 public void onNext(JsonObject jsonObject) {
136 } 140 if (jsonObject != null && jsonObject.get("image_processed") != null) {
137 141 String image = jsonObject.get("image_processed").getAsString();
138 @Override 142 if (image != null) {
139 public void onNext(JsonObject jsonObject) { 143 String filepath = context.getExternalFilesDir("images").getPath() + "/" + String.valueOf(System.currentTimeMillis()) + CommonUtil.getStr() + ".jpg";
140 if (jsonObject != null && jsonObject.get("image_processed") != null) { 144 CommonUtil.saveBitmapToUri(BitmapUtils.stringToBitmap(image), filepath);
141 String image = jsonObject.get("image_processed").getAsString(); 145 list.get(index).setPath(filepath);
142 if (image != null) { 146 if (list.get(index).getCuts() == null) {
143 String filepath = context.getExternalFilesDir("images").getPath() + "/" + String.valueOf(System.currentTimeMillis()) + CommonUtil.getStr() + ".jpg"; 147 list.get(index).setCuts(new ArrayList<>());
144 CommonUtil.saveBitmapToUri(BitmapUtils.stringToBitmap(image), filepath); 148 }
145 list.get(index).setPath(filepath); 149 imageAdapter.notifyItemChanged(index);
146 if (list.get(index).getCuts() == null) { 150 cut(filepath);
147 list.get(index).setCuts(new ArrayList<>()); 151 } else {
148 } 152 loadFail("去除字迹失败");
149 imageAdapter.notifyItemChanged(index); 153 }
150 cut(filepath); 154 } else {
151 } else { 155 loadFail("去除字迹失败");
152 loadFail("去除字迹失败"); 156 }
153 } 157 }
154 } else { 158
155 loadFail("去除字迹失败"); 159 @Override
156 } 160 public void onError(Throwable e) {
157 } 161 loadFail("去除字迹失败");
158 162 }
159 @Override 163
160 public void onError(Throwable e) { 164 @Override
161 loadFail("去除字迹失败"); 165 public void onComplete() {
162 } 166
163 167 }
164 @Override 168 });
165 public void onComplete() { 169 }
166 170
167 } 171 public void cut(String path) {
168 }); 172 String base64 = BitmapUtils.imageToBase64(path);
169 } 173 Log.i("figLoaction", path);
170 174 NetWorks.cut(base64, new Observer<CutPicBean>() {
171 public void cut(String path) { 175 @Override
172 String base64 = BitmapUtils.imageToBase64(path); 176 public void onSubscribe(Disposable d) {
173 Log.i("figLoaction", path); 177
174 NetWorks.cut(base64, new Observer<CutPicBean>() { 178 }
175 @Override 179
176 public void onSubscribe(Disposable d) { 180 @Override
177 181 public void onNext(CutPicBean cutPicBean) {
178 } 182 if (cutPicBean != null) {
179 183 if (cutPicBean.getDirection() != 0) {
180 @Override 184 rotatingImage(cutPicBean);
181 public void onNext(CutPicBean cutPicBean) { 185 } else {
182 if (cutPicBean != null) { 186 if (cutPicBean.getQus_figure() != null && cutPicBean.getQus_figure().size() > 0) {
183 if (cutPicBean.getDirection() != 0) { 187 List<CutPicBean.FigLoaction> figLoactions = new ArrayList<>();
184 rotatingImage(cutPicBean); 188 for (CutPicBean.CutLocation cutLocation : cutPicBean.getQus_figure()) {
185 } else { 189 figLoactions.add(cutLocation.getFig_location());
186 if (cutPicBean.getQus_figure() != null && cutPicBean.getQus_figure().size() > 0) { 190 }
187 List<CutPicBean.FigLoaction> figLoactions = new ArrayList<>(); 191 new Handler().postDelayed(new Runnable() {
188 for (CutPicBean.CutLocation cutLocation : cutPicBean.getQus_figure()) { 192 @Override
189 figLoactions.add(cutLocation.getFig_location()); 193 public void run() {
190 } 194 getRects(figLoactions);
191 new Handler().postDelayed(new Runnable() { 195 }
192 @Override 196 }, 1000);
193 public void run() { 197 } else {
194 getRects(figLoactions); 198 cancelLoadingDialog();
195 } 199 }
196 }, 1000); 200 }
197 } else { 201 } else {
198 cancelLoadingDialog(); 202 loadFail("自动切题失败");
199 } 203 }
200 } 204 }
201 } else { 205
202 loadFail("自动切题失败"); 206 @Override
203 } 207 public void onError(Throwable e) {
204 } 208 loadFail("自动切题失败");
205 209 }
206 @Override 210
207 public void onError(Throwable e) { 211 @Override
208 loadFail("自动切题失败"); 212 public void onComplete() {
209 } 213
210 214 }
211 @Override 215 });
212 public void onComplete() { 216 }
213 217
214 } 218 private void getRects(List<CutPicBean.FigLoaction> figLoactions) {
215 }); 219 Log.i("figLoaction", new Gson().toJson(figLoactions));
216 } 220 int index = binding.viewPager.getCurrentItem();
217 221 List<ImageBean.Cut> cuts = new ArrayList<>();
218 private void getRects(List<CutPicBean.FigLoaction> figLoactions) { 222 for (CutPicBean.FigLoaction figLoaction : figLoactions) {
219 Log.i("figLoaction", new Gson().toJson(figLoactions)); 223 ImageBean.Cut cut = new ImageBean.Cut();
220 int index = binding.viewPager.getCurrentItem(); 224 cut.setRect(figLoaction);
221 List<ImageBean.Cut> cuts = new ArrayList<>(); 225 cut.setSelect(false);
222 for (CutPicBean.FigLoaction figLoaction : figLoactions) { 226 cuts.add(cut);
223 ImageBean.Cut cut = new ImageBean.Cut(); 227 }
224 cut.setRect(figLoaction); 228 list.get(index).setCuts(cuts);
225 cut.setSelect(false); 229 imageAdapter.notifyItemChanged(index);
226 cuts.add(cut); 230 cancelLoadingDialog();
227 } 231 }
228 list.get(index).setCuts(cuts); 232
229 imageAdapter.notifyItemChanged(index); 233 private void rotatingImage(CutPicBean cutPicBean) {
230 cancelLoadingDialog(); 234 int index = binding.viewPager.getCurrentItem();
231 } 235 Bitmap bitmap = BitmapFactory.decodeFile(list.get(index).getPath());
232 236 int angle = 0;
233 private void rotatingImage(CutPicBean cutPicBean) { 237 switch (cutPicBean.getDirection()) {
234 int index = binding.viewPager.getCurrentItem(); 238 case 1:
235 Bitmap bitmap = BitmapFactory.decodeFile(list.get(index).getPath()); 239 angle = 90;
236 int angle = 0; 240 break;
237 switch (cutPicBean.getDirection()) { 241 case 2:
238 case 1: 242 angle = 180;
239 angle = 90; 243 break;
240 break; 244 case 3:
241 case 2: 245 angle = 270;
242 angle = 180; 246 break;
243 break; 247 }
244 case 3: 248 if (cutPicBean.getQus_figure() != null && cutPicBean.getQus_figure().size() > 0) {
245 angle = 270; 249 List<CutPicBean.FigLoaction> figLoactions = new ArrayList<>();
246 break; 250 for (CutPicBean.CutLocation cutLocation : cutPicBean.getQus_figure()) {
247 } 251 figLoactions.add(cutLocation.getFig_location());
248 if (cutPicBean.getQus_figure() != null && cutPicBean.getQus_figure().size() > 0) { 252 }
249 List<CutPicBean.FigLoaction> figLoactions = new ArrayList<>(); 253 figLoactions = CommonUtil.rotaingLocation(angle, figLoactions, bitmap.getWidth(), bitmap.getHeight());
250 for (CutPicBean.CutLocation cutLocation : cutPicBean.getQus_figure()) { 254 bitmap = CommonUtil.rotaingImageView(angle, bitmap);
251 figLoactions.add(cutLocation.getFig_location()); 255 String filepath = context.getExternalFilesDir("images").getPath() + "/" + String.valueOf(System.currentTimeMillis()) + CommonUtil.getStr() + ".jpg";
252 } 256 CommonUtil.saveBitmapToUri(bitmap, filepath);
253 figLoactions = CommonUtil.rotaingLocation(angle, figLoactions, bitmap.getWidth(), bitmap.getHeight()); 257 list.get(index).setPath(filepath);
254 bitmap = CommonUtil.rotaingImageView(angle, bitmap); 258 imageAdapter.notifyItemChanged(index);
255 String filepath = context.getExternalFilesDir("images").getPath() + "/" + String.valueOf(System.currentTimeMillis()) + CommonUtil.getStr() + ".jpg"; 259 List<CutPicBean.FigLoaction> finalFigLoactions = figLoactions;
256 CommonUtil.saveBitmapToUri(bitmap, filepath); 260 new Handler().postDelayed(new Runnable() {
257 list.get(index).setPath(filepath); 261 @Override
258 imageAdapter.notifyItemChanged(index); 262 public void run() {
259 List<CutPicBean.FigLoaction> finalFigLoactions = figLoactions; 263 getRects(finalFigLoactions);
260 new Handler().postDelayed(new Runnable() { 264 }
261 @Override 265 }, 500);
262 public void run() { 266 } else {
263 getRects(finalFigLoactions); 267 cancelLoadingDialog();
264 } 268 }
265 }, 500); 269 }
266 } else { 270
267 cancelLoadingDialog(); 271 @Override
268 } 272 protected ActivityImageBinding getViewBinding() {
269 } 273 return ActivityImageBinding.inflate(getLayoutInflater());
270 274 }
271 @Override 275
272 protected ActivityImageBinding getViewBinding() { 276 @SuppressLint("SetTextI18n")
273 return ActivityImageBinding.inflate(getLayoutInflater()); 277 public void refreshNum() {
274 } 278 int num = 0;
275 279 for (ImageBean imageBean : list) {
276 @SuppressLint("SetTextI18n") 280 if (imageBean.getCuts() != null && imageBean.getCuts().size() > 0) {
277 public void refreshNum() { 281 for (ImageBean.Cut cut : imageBean.getCuts()) {
278 int num = 0; 282 if (cut.isSelect()) {
279 for (ImageBean imageBean : list) { 283 num++;
280 if (imageBean.getCuts() != null && imageBean.getCuts().size() > 0) { 284 }
281 for (ImageBean.Cut cut : imageBean.getCuts()) { 285 }
282 if (cut.isSelect()) { 286 }
283 num++; 287 }
284 } 288 String btnText = type == 0 ? "保存错题" : "录入题目";
285 } 289 if (num > 0) {
286 } 290 binding.tvSave.setEnabled(true);
287 } 291 binding.tvSave.setBackgroundResource(R.drawable.bg_soild_blue_5);
288 String btnText = type == 0 ? "保存错题" : "录入题目"; 292 binding.tvSave.setText(btnText + "(" + num + ")");
289 if (num > 0) { 293 } else {
290 binding.tvSave.setEnabled(true); 294 binding.tvSave.setEnabled(false);
291 binding.tvSave.setBackgroundResource(R.drawable.bg_soild_blue_5); 295 binding.tvSave.setBackgroundResource(R.drawable.bg_soild_blue_light_5);
292 binding.tvSave.setText(btnText + "(" + num + ")"); 296 binding.tvSave.setText(btnText);
293 } else { 297 }
294 binding.tvSave.setEnabled(false); 298 }
295 binding.tvSave.setBackgroundResource(R.drawable.bg_soild_blue_light_5); 299
296 binding.tvSave.setText(btnText); 300 @Override
297 } 301 public void onClick(View v) {
298 } 302 switch (v.getId()) {
299 303 case R.id.iv_back:
300 @Override 304 back();
301 public void onClick(View v) { 305 break;
302 switch (v.getId()) { 306 case R.id.rl_next:
303 case R.id.iv_back: 307 if (binding.viewPager.getCurrentItem() + 1 < list.size()) {
304 back(); 308 binding.viewPager.setCurrentItem(binding.viewPager.getCurrentItem() + 1);
305 break; 309 }
306 case R.id.rl_next: 310 break;
307 if (binding.viewPager.getCurrentItem() + 1 < list.size()) { 311 case R.id.rl_previous:
308 binding.viewPager.setCurrentItem(binding.viewPager.getCurrentItem() + 1); 312 if (binding.viewPager.getCurrentItem() != 0) {
309 } 313 binding.viewPager.setCurrentItem(binding.viewPager.getCurrentItem() - 1);
310 break; 314 }
311 case R.id.rl_previous: 315 break;
312 if (binding.viewPager.getCurrentItem() != 0) { 316 case R.id.ll_edit:
313 binding.viewPager.setCurrentItem(binding.viewPager.getCurrentItem() - 1); 317 Intent intent = new Intent(context, ImageEditActivity.class);
314 } 318 intent.putExtra("path", list.get(binding.viewPager.getCurrentItem()).getPath());
315 break; 319 startActivityForResult(intent, 1001);
316 case R.id.ll_edit: 320 break;
317 Intent intent = new Intent(context, ImageEditActivity.class); 321 case R.id.tv_photo:
318 intent.putExtra("path", list.get(binding.viewPager.getCurrentItem()).getPath()); 322 Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
319 startActivityForResult(intent, 1001); 323 //确保有相机来处理Intent
320 break; 324 filePath = context.getExternalFilesDir("images").getPath() + "/" + String.valueOf(System.currentTimeMillis()) + CommonUtil.getStr() + ".jpg";
321 case R.id.tv_photo: 325 File photoFile = new File(filePath);
322 Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 326 if (photoFile != null) {
323 //确保有相机来处理Intent 327 //适配Android 7.0文件权限,通过FileProvider创建一个content类型的Uri
324 filePath = context.getExternalFilesDir("images").getPath() + "/" + String.valueOf(System.currentTimeMillis()) + CommonUtil.getStr() + ".jpg"; 328 Uri photoUri = FileProvider.getUriForFile(activity, "com.hjx.parent.fileprovider", photoFile);
325 File photoFile = new File(filePath); 329 takePictureIntent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
326 if (photoFile != null) { 330 takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoUri);
327 //适配Android 7.0文件权限,通过FileProvider创建一个content类型的Uri 331 activity.startActivityForResult(takePictureIntent, 1002);
328 Uri photoUri = FileProvider.getUriForFile(activity, "com.hjx.parent.fileprovider", photoFile); 332 }
329 takePictureIntent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION); 333 break;
330 takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoUri); 334 case R.id.tv_add:
331 activity.startActivityForResult(takePictureIntent, 1002); 335 Intent intent1 = new Intent(context, ImageSelectActivity.class);
332 } 336 intent1.putExtra("path", list.get(binding.viewPager.getCurrentItem()).getPath());
333 break; 337 intent1.putExtra("source", list.get(binding.viewPager.getCurrentItem()).source);
334 case R.id.tv_add: 338 startActivityForResult(intent1, 1001);
335 Intent intent1 = new Intent(context, ImageSelectActivity.class); 339 break;
336 intent1.putExtra("path", list.get(binding.viewPager.getCurrentItem()).getPath()); 340 case R.id.tv_save:
337 intent1.putExtra("source", list.get(binding.viewPager.getCurrentItem()).source); 341 List<TopicBean> topicBeans = new ArrayList<>();
338 startActivityForResult(intent1, 1001); 342 for (ImageBean imageBean : list) {
339 break; 343 if (imageBean.getCuts() != null && imageBean.getCuts().size() > 0) {
340 case R.id.tv_save: 344 for (ImageBean.Cut cut : imageBean.getCuts()) {
341 List<TopicBean> topicBeans = new ArrayList<>(); 345 if (cut.isSelect()) {
342 for (ImageBean imageBean : list) { 346 TopicBean bean = new TopicBean();
343 if (imageBean.getCuts() != null && imageBean.getCuts().size() > 0) { 347 String path = context.getExternalFilesDir("images").getPath() + "/" + String.valueOf(System.currentTimeMillis()) + CommonUtil.getStr() + ".jpg";
344 for (ImageBean.Cut cut : imageBean.getCuts()) { 348 BitmapUtils.saveBitmap(cut.getBitmap(), path);
345 if (cut.isSelect()) { 349 bean.setPath(path);
346 TopicBean bean = new TopicBean(); 350 topicBeans.add(bean);
347 String path = context.getExternalFilesDir("images").getPath() + "/" + String.valueOf(System.currentTimeMillis()) + CommonUtil.getStr() + ".jpg"; 351 }
348 BitmapUtils.saveBitmap(cut.getBitmap(), path); 352 }
349 bean.setPath(path); 353 }
350 topicBeans.add(bean); 354 }
351 } 355 save(topicBeans);
352 } 356 break;
353 } 357 }
354 } 358 }
355 save(topicBeans); 359
356 break; 360 private void save(List<TopicBean> topicBeans) {
357 } 361 if (type == 0) {
358 } 362 ErrorInputDialog dialog = new ErrorInputDialog(this, topicBeans);
359 363 dialog.show();
360 private void save(List<TopicBean> topicBeans) { 364 } else {
361 if (type == 0) { 365 List<String> paths = new ArrayList<>();
362 ErrorInputDialog dialog = new ErrorInputDialog(this, topicBeans); 366 for (TopicBean it: topicBeans) {
363 dialog.show(); 367 paths.add(it.getPath());
364 } else { 368 }
365 List<String> paths = new ArrayList<>(); 369 if (addHomeworkDialog == null) {
366 for (TopicBean it: topicBeans) { 370 addHomeworkDialog = new AddHomeworkDialog(this);
367 paths.add(it.getPath()); 371 }
368 } 372 addHomeworkDialog.show(paths, student -> {
369 if (addHomeworkDialog == null) { 373 Intent intent = new Intent(context, AddSuccessActivity.class);
370 addHomeworkDialog = new AddHomeworkDialog(this); 374 intent.putExtra("type", type);
371 } 375 intent.putExtra("studentJson", new Gson().toJson(student));
372 addHomeworkDialog.show(paths, student -> { 376 startActivity(intent);
373 Intent intent = new Intent(context, AddSuccessActivity.class); 377 finish();
374 intent.putExtra("type", type); 378 });
375 intent.putExtra("studentJson", new Gson().toJson(student)); 379 }
376 startActivity(intent); 380 }
377 finish(); 381
378 }); 382 @Override
379 } 383 protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
380 } 384 super.onActivityResult(requestCode, resultCode, data);
381 385 if (requestCode == 1001) {
382 @Override 386 if (resultCode == 1002) {
383 protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { 387 if (list.size() > 1) {
384 super.onActivityResult(requestCode, resultCode, data); 388 list.remove(binding.viewPager.getCurrentItem());
389 if (list.size() <= 1) {
390 binding.rlPrevious.setVisibility(View.GONE);
391 binding.rlNext.setVisibility(View.GONE);
392 }
385 if (requestCode == 1001) { 393 imageAdapter.notifyItemRemoved(binding.viewPager.getCurrentItem());
386 if (resultCode == 1002) { 394 binding.tvTitle.setText((binding.viewPager.getCurrentItem() + 1) + "/" + list.size());
387 if (list.size() > 1) { 395 refreshNum();
388 list.remove(binding.viewPager.getCurrentItem()); 396 } else {
389 if (list.size() <= 1) { 397 finish();
390 binding.rlPrevious.setVisibility(View.GONE); 398 }
391 binding.rlNext.setVisibility(View.GONE); 399 } else if (resultCode == 1003) {
392 } 400 int position = binding.viewPager.getCurrentItem();
393 imageAdapter.notifyItemRemoved(binding.viewPager.getCurrentItem()); 401 String src = list.get(position).source;
394 binding.tvTitle.setText((binding.viewPager.getCurrentItem() + 1) + "/" + list.size()); 402 list.remove(position);
395 refreshNum(); 403 String path = data.getStringExtra("path");
396 } else { 404 ImageBean imageBean = new ImageBean();
397 finish(); 405 imageBean.setPath(path);
398 } 406 imageBean.source = src;
399 } else if (resultCode == 1003) { 407 list.add(position, imageBean);
400 int position = binding.viewPager.getCurrentItem(); 408 imageAdapter.notifyItemChanged(position);
401 String src = list.get(position).source; 409 clearText();
402 list.remove(position); 410 refreshNum();
403 String path = data.getStringExtra("path"); 411 } else if (resultCode == 1004) {
404 ImageBean imageBean = new ImageBean(); 412 Rect rect = data.getParcelableExtra("cut");
405 imageBean.setPath(path); 413 if (rect != null) {
406 imageBean.source = src; 414 int position = binding.viewPager.getCurrentItem();
407 list.add(position, imageBean); 415 ImageBean.Cut cut = new ImageBean.Cut();
408 imageAdapter.notifyItemChanged(position); 416 cut.setRect1(rect);
409 clearText(); 417 cut.setSelect(false);
410 refreshNum(); 418 if (list.get(position).getCuts() != null) {
411 } else if (resultCode == 1004) { 419 list.get(position).getCuts().add(cut);
412 Rect rect = data.getParcelableExtra("cut"); 420 } else {
413 if (rect != null) { 421 List<ImageBean.Cut> cuts =new ArrayList<>();
414 int position = binding.viewPager.getCurrentItem(); 422 cuts.add(cut);
415 ImageBean.Cut cut = new ImageBean.Cut(); 423 list.get(position).setCuts(cuts);
416 cut.setRect1(rect); 424 }
417 cut.setSelect(false); 425 imageAdapter.notifyItemChanged(position);
418 if (list.get(position).getCuts() != null) { 426 refreshNum();
419 list.get(position).getCuts().add(cut); 427 }
420 } else { 428 } else if (resultCode == 1005) {
421 List<ImageBean.Cut> cuts =new ArrayList<>(); 429 int i = data.getIntExtra("position", 0);
422 cuts.add(cut); 430 int position = binding.viewPager.getCurrentItem();
423 list.get(position).setCuts(cuts); 431 Rect rect = data.getParcelableExtra("cut");
424 } 432 if (rect != null) {
425 imageAdapter.notifyItemChanged(position); 433 ImageBean.Cut cut = new ImageBean.Cut();
426 refreshNum(); 434 cut.setRect1(rect);
427 } 435 cut.setSelect(false);
428 } else if (resultCode == 1005) { 436 list.get(position).getCuts().remove(i);
429 int i = data.getIntExtra("position", 0); 437 list.get(position).getCuts().add(i, cut);
430 int position = binding.viewPager.getCurrentItem(); 438 imageAdapter.notifyItemChanged(position);
431 Rect rect = data.getParcelableExtra("cut"); 439 refreshNum();
432 if (rect != null) { 440 } else {
433 ImageBean.Cut cut = new ImageBean.Cut(); 441 list.get(position).getCuts().remove(i);
434 cut.setRect1(rect); 442 imageAdapter.notifyItemChanged(position);
435 cut.setSelect(false); 443 refreshNum();
436 list.get(position).getCuts().remove(i); 444 }
437 list.get(position).getCuts().add(i, cut); 445 }
438 imageAdapter.notifyItemChanged(position); 446 } else if (requestCode == 1002 && resultCode == RESULT_OK && !TextUtils.isEmpty(filePath)) {
439 refreshNum(); 447 Bitmap b = BitmapUtils.compress(BitmapFactory.decodeFile(filePath));
440 } else { 448 String path = context.getExternalFilesDir("images").getPath() + "/" + String.valueOf(System.currentTimeMillis()) + CommonUtil.getStr() + ".jpg";
441 list.get(position).getCuts().remove(i); 449 CommonUtil.saveBitmapToUri(b, path);
442 imageAdapter.notifyItemChanged(position); 450 int position = binding.viewPager.getCurrentItem();
443 refreshNum(); 451 list.remove(position);
444 } 452 ImageBean imageBean = new ImageBean();
445 } 453 imageBean.setPath(path);
446 } else if (requestCode == 1002 && resultCode == RESULT_OK && !TextUtils.isEmpty(filePath)) { 454 imageBean.source = path;
447 Bitmap b = BitmapUtils.compress(BitmapFactory.decodeFile(filePath)); 455 list.add(position, imageBean);
448 String path = context.getExternalFilesDir("images").getPath() + "/" + String.valueOf(System.currentTimeMillis()) + CommonUtil.getStr() + ".jpg"; 456 imageAdapter.notifyItemChanged(position);
449 CommonUtil.saveBitmapToUri(b, path); 457 clearText();
450 int position = binding.viewPager.getCurrentItem(); 458 refreshNum();
451 list.remove(position); 459 }
452 ImageBean imageBean = new ImageBean(); 460 }
453 imageBean.setPath(path); 461
454 imageBean.source = path; 462 private void back() {
455 list.add(position, imageBean); 463 showTipDialog("温馨提示", "是否确认退出?", "取消", "确定", new TipDialog.TipDialogInterface() {
456 imageAdapter.notifyItemChanged(position); 464 @Override
457 clearText(); 465 public void onConfirm(Dialog dialog) {
458 refreshNum(); 466 dialog.dismiss();
459 } 467 finish();
460 } 468 }
461 469
462 private void back() { 470 @Override
463 showTipDialog("温馨提示", "是否确认退出?", "取消", "确定", new TipDialog.TipDialogInterface() { 471 public void onCancel(Dialog dialog) {
464 @Override 472 dialog.dismiss();
465 public void onConfirm(Dialog dialog) { 473 }
466 dialog.dismiss(); 474 });
467 finish(); 475 }
468 } 476
469 477 @Override
470 @Override 478 public boolean onKeyDown(int keyCode, KeyEvent event) {
471 public void onCancel(Dialog dialog) { 479 if (keyCode == KeyEvent.KEYCODE_BACK) {
472 dialog.dismiss(); 480 back();
473 } 481 return true;
474 }); 482 }
475 } 483 return super.onKeyDown(keyCode, event);
476 484 }
477 @Override 485 }
478 public boolean onKeyDown(int keyCode, KeyEvent event) { 486
app/src/main/java/com/hjx/parent/StuHomeworkActivity.java
1 package com.hjx.parent; 1 package com.hjx.parent;
2 2
3 import android.annotation.SuppressLint; 3 import android.annotation.SuppressLint;
4 import android.content.Intent; 4 import android.content.Intent;
5 import android.os.Bundle; 5 import android.os.Bundle;
6 import android.view.View; 6 import android.view.View;
7 import android.widget.LinearLayout; 7 import android.widget.LinearLayout;
8 import android.widget.PopupWindow; 8 import android.widget.PopupWindow;
9 9
10 import androidx.annotation.NonNull; 10 import androidx.annotation.NonNull;
11 import androidx.annotation.Nullable; 11 import androidx.annotation.Nullable;
12 import androidx.lifecycle.MutableLiveData; 12 import androidx.lifecycle.MutableLiveData;
13 13
14 import com.chad.library.adapter.base.BaseQuickAdapter; 14 import com.chad.library.adapter.base.BaseQuickAdapter;
15 import com.chad.library.adapter.base.BaseViewHolder; 15 import com.chad.library.adapter.base.BaseViewHolder;
16 import com.google.android.material.tabs.TabLayout; 16 import com.google.android.material.tabs.TabLayout;
17 import com.google.gson.Gson; 17 import com.google.gson.Gson;
18 import com.hjx.parent.adapter.HomeworkListAdapter; 18 import com.hjx.parent.adapter.HomeworkListAdapter;
19 import com.hjx.parent.databinding.ActivityStudentHomeworkBinding; 19 import com.hjx.parent.databinding.ActivityStudentHomeworkBinding;
20 import com.hjx.parent.databinding.PopupFilterFeedbackBinding; 20 import com.hjx.parent.databinding.PopupFilterFeedbackBinding;
21 import com.hjx.parent.databinding.PopupFilterGradeBinding; 21 import com.hjx.parent.databinding.PopupFilterGradeBinding;
22 import com.hjx.parent.databinding.PopupFilterSubjectBinding; 22 import com.hjx.parent.databinding.PopupFilterSubjectBinding;
23 import com.hjx.parent.databinding.PopupFilterTermBinding; 23 import com.hjx.parent.databinding.PopupFilterTermBinding;
24 import com.hjx.parent.dialog.MsgConfirmDialog; 24 import com.hjx.parent.dialog.MsgConfirmDialog;
25 import com.hjx.parent.dialog.StageHuyouDialog; 25 import com.hjx.parent.dialog.StageHuyouDialog;
26 import com.hjx.parent.function.Function1; 26 import com.hjx.parent.function.Function1;
27 import com.hjx.parent.rx.BaseRxActivity; 27 import com.hjx.parent.rx.BaseRxActivity;
28 import com.prws.common.bean.ResponseResult; 28 import com.prws.common.bean.ResponseResult;
29 import com.prws.common.bean.Student; 29 import com.prws.common.bean.Student;
30 import com.prws.common.bean.homework.HomeworkList; 30 import com.prws.common.bean.homework.HomeworkList;
31 import com.prws.common.bean.homework.StDetail; 31 import com.prws.common.bean.homework.StDetail;
32 import com.prws.common.net.NetWorks; 32 import com.prws.common.net.NetWorks;
33 import com.prws.common.utils.SharedPreferencesUtil; 33 import com.prws.common.utils.SharedPreferencesUtil;
34 import com.trello.rxlifecycle2.android.RxLifecycleAndroid; 34 import com.trello.rxlifecycle2.android.RxLifecycleAndroid;
35 35
36 import java.text.SimpleDateFormat; 36 import java.text.SimpleDateFormat;
37 import java.util.ArrayList; 37 import java.util.ArrayList;
38 import java.util.Calendar; 38 import java.util.Calendar;
39 import java.util.Date;
40 import java.util.HashMap; 39 import java.util.Date;
41 import java.util.List; 40 import java.util.HashMap;
42 import java.util.Locale; 41 import java.util.List;
43 import java.util.Map; 42 import java.util.Locale;
44 43 import java.util.Map;
45 import io.reactivex.Observable; 44
46 import io.reactivex.android.schedulers.AndroidSchedulers; 45 import io.reactivex.Observable;
47 import io.reactivex.schedulers.Schedulers; 46 import io.reactivex.android.schedulers.AndroidSchedulers;
48 47 import io.reactivex.schedulers.Schedulers;
49 public class StuHomeworkActivity extends BaseRxActivity<ActivityStudentHomeworkBinding> { 48
50 49 public class StuHomeworkActivity extends BaseRxActivity<ActivityStudentHomeworkBinding> {
51 private final HomeworkListAdapter homeworkAdapter = new HomeworkListAdapter(); 50
52 51 private final HomeworkListAdapter homeworkAdapter = new HomeworkListAdapter();
53 private final List<StDetail> mWeekList = new ArrayList<>(); 52
54 private final List<StDetail> mStageList = new ArrayList<>(); 53 private final List<StDetail> mWeekList = new ArrayList<>();
55 private final HuyouAdapter weekAdapter = new HuyouAdapter(mWeekList); 54 private final List<StDetail> mStageList = new ArrayList<>();
56 private final HuyouAdapter stageAdapter = new HuyouAdapter(mStageList); 55 private final HuyouAdapter weekAdapter = new HuyouAdapter(mWeekList);
57 56 private final HuyouAdapter stageAdapter = new HuyouAdapter(mStageList);
58 PopupWindow subjectFilter, gradeFilter, termFilter, feedbackFilter; 57
59 MsgConfirmDialog deleteDialog; 58 PopupWindow subjectFilter, gradeFilter, termFilter, feedbackFilter;
60 StageHuyouDialog stageHuyouDialog; 59 MsgConfirmDialog deleteDialog;
61 State state = new State(); 60 StageHuyouDialog stageHuyouDialog;
62 61 State state = new State();
63 private void handlerIntent() { 62
64 String json = getIntent().getStringExtra("studentJson"); 63 private void handlerIntent() {
65 if (json == null) json = (String) SharedPreferencesUtil.getData("student", ""); 64 String json = getIntent().getStringExtra("studentJson");
66 try { state.student = new Gson().fromJson(json, Student.class); } 65 if (json == null) json = (String) SharedPreferencesUtil.getData("student", "");
67 catch (Throwable t) { t.printStackTrace(); } 66 try { state.student = new Gson().fromJson(json, Student.class); }
68 } 67 catch (Throwable t) { t.printStackTrace(); }
69 68 }
70 @SuppressLint("SetTextI18n") 69
71 @Override 70 @SuppressLint("SetTextI18n")
72 public void initView(Bundle savedInstanceState) { 71 @Override
73 handlerIntent(); 72 public void initView(Bundle savedInstanceState) {
74 if (state.student == null) { 73 handlerIntent();
75 finish(); 74 if (state.student == null) {
76 return; 75 finish();
77 } 76 return;
78 binding.toolbar.setNavigationOnClickListener(v -> onBackPressed()); 77 }
79 binding.tvTitle.setText(state.student.stuName + "的全部作业"); 78 binding.toolbar.setNavigationOnClickListener(v -> onBackPressed());
80 setupTab(); 79 binding.tvTitle.setText(state.student.stuName + "的全部作业");
81 homeworkAdapter.setEmptyView(R.layout.empty_list_homework, binding.recyclerView); 80 setupTab();
82 weekAdapter.setEmptyView(R.layout.empty_huyou_list, binding.recyclerView); 81 homeworkAdapter.setEmptyView(R.layout.empty_list_homework, binding.recyclerView);
83 stageAdapter.setEmptyView(R.layout.empty_huyou_stage, binding.recyclerView); 82 weekAdapter.setEmptyView(R.layout.empty_huyou_list, binding.recyclerView);
84 binding.recyclerView.setAdapter(homeworkAdapter); 83 stageAdapter.setEmptyView(R.layout.empty_huyou_stage, binding.recyclerView);
85 84 binding.recyclerView.setAdapter(homeworkAdapter);
86 deleteDialog = new MsgConfirmDialog.Builder(this) 85
87 .setMessage("确认要删除吗?一旦删除不可恢复") 86 deleteDialog = new MsgConfirmDialog.Builder(this)
88 .setPositive("暂不删除") 87 .setMessage("确认要删除吗?一旦删除不可恢复")
89 .setNegative("确定删除") 88 .setPositive("暂不删除")
90 .build(); 89 .setNegative("确定删除")
91 90 .build();
92 binding.ftSubject.setOnClickListener(v -> showSubjectFilter()); 91
93 binding.ftGrade.setOnClickListener(v -> showGradeFilter()); 92 binding.ftSubject.setOnClickListener(v -> showSubjectFilter());
94 binding.ftTerm.setOnClickListener(v -> showTermFilter()); 93 binding.ftGrade.setOnClickListener(v -> showGradeFilter());
95 binding.ftFeedback.setOnClickListener(v -> showFeedbackFilter()); 94 binding.ftTerm.setOnClickListener(v -> showTermFilter());
96 homeworkAdapter.deleteCall = data -> { 95 binding.ftFeedback.setOnClickListener(v -> showFeedbackFilter());
97 deleteDialog.show(null, () -> { 96 homeworkAdapter.deleteCall = data -> {
98 deleteHomework(data); 97 deleteDialog.show(null, () -> {
99 return true; 98 deleteHomework(data);
100 }); 99 return true;
101 }; 100 });
102 homeworkAdapter.detailCall = data -> { 101 };
103 if (data.getRight() == null) { 102 homeworkAdapter.detailCall = data -> {
104 Intent intent = new Intent(this, HomeworkDetailActivity.class); 103 if (data.getRight() == null) {
105 intent.putExtra("data", data); 104 Intent intent = new Intent(this, HomeworkDetailActivity.class);
106 intent.putExtra("student", state.student); 105 intent.putExtra("data", data);
107 startActivity(intent); 106 intent.putExtra("student", state.student);
108 } else { 107 startActivity(intent);
109 Intent intent = new Intent(this, HomeworkShareActivity.class); 108 } else {
110 intent.putExtra("student", state.student); 109 Intent intent = new Intent(this, HomeworkShareActivity.class);
111 intent.putExtra("id", data.getId()); 110 intent.putExtra("student", state.student);
112 intent.putExtra("grade", data.getGrade()); 111 intent.putExtra("id", data.getId());
113 intent.putExtra("subject", data.getSubject()); 112 intent.putExtra("grade", data.getGrade());
114 String name = new SimpleDateFormat("yyyy年M月d日作业", Locale.CHINA).format(data.uploadTime); 113 intent.putExtra("subject", data.getSubject());
115 intent.putExtra("name", name); 114 String name = new SimpleDateFormat("yyyy年M月d日作业", Locale.CHINA).format(data.uploadTime);
116 startActivity(intent); 115 intent.putExtra("name", name);
117 } 116 startActivity(intent);
118 }; 117 }
119 118 };
120 binding.btnChangeStudent.setOnClickListener(v -> { 119
121 Intent intent = new Intent(this, TeacherChooseActivity.class); 120 binding.btnChangeStudent.setOnClickListener(v -> {
122 intent.putExtra("needBack", true); 121 Intent intent = new Intent(this, TeacherChooseActivity.class);
123 startActivityForResult(intent, 0xA01); 122 intent.putExtra("needBack", true);
124 }); 123 startActivityForResult(intent, 0xA01);
125 124 });
126 binding.btnGeneralHuyou.setOnClickListener(v -> generalWeek()); 125
127 binding.btnStageHuyou.setOnClickListener(v -> { 126 binding.btnGeneralHuyou.setOnClickListener(v -> generalWeek());
128 if (stageHuyouDialog == null) stageHuyouDialog = new StageHuyouDialog(this); 127 binding.btnStageHuyou.setOnClickListener(v -> {
129 stageHuyouDialog.show(this::generalStage); 128 if (stageHuyouDialog == null) stageHuyouDialog = new StageHuyouDialog(this);
130 }); 129 stageHuyouDialog.show(this::generalStage);
131 130 });
132 weekAdapter.detailCall = data -> goHuyou(data, 0); 131
133 stageAdapter.detailCall = data -> goHuyou(data, 1); 132 weekAdapter.detailCall = data -> goHuyou(data, 0);
134 weekAdapter.deleteCall = data -> { 133 stageAdapter.detailCall = data -> goHuyou(data, 1);
135 deleteDialog.show(null, () -> { 134 weekAdapter.deleteCall = data -> {
136 deleteHuyou(data); 135 deleteDialog.show(null, () -> {
137 return true; 136 deleteHuyou(data);
138 }); 137 return true;
139 }; 138 });
140 stageAdapter.deleteCall = weekAdapter.deleteCall; 139 };
141 140 stageAdapter.deleteCall = weekAdapter.deleteCall;
142 getWeekHuyou(); 141
143 getStageHuyou(); 142 getWeekHuyou();
144 } 143 getStageHuyou();
145 144 }
146 private void goHuyou(StDetail data, int type) { 145
147 Intent intent = new Intent(this, HuyouDetailActivity.class); 146 private void goHuyou(StDetail data, int type) {
148 intent.putExtra("id", data.id); 147 Intent intent = new Intent(this, HuyouDetailActivity.class);
149 intent.putExtra("type", type); 148 intent.putExtra("id", data.id);
150 intent.putExtra("student", state.student); 149 intent.putExtra("type", type);
151 startActivity(intent); 150 intent.putExtra("student", state.student);
152 } 151 startActivity(intent);
153 152 }
154 @Override 153
155 protected void onStart() { 154 @Override
156 super.onStart(); 155 protected void onStart() {
157 getHomework(); 156 super.onStart();
158 } 157 getHomework();
159 158 }
160 @SuppressLint("SetTextI18n") 159
161 @Override 160 @SuppressLint("SetTextI18n")
162 protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { 161 @Override
163 super.onActivityResult(requestCode, resultCode, data); 162 protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
164 if (requestCode == 0xA01 && resultCode == RESULT_OK) { 163 super.onActivityResult(requestCode, resultCode, data);
165 String json = (String) SharedPreferencesUtil.getData("student", ""); 164 if (requestCode == 0xA01 && resultCode == RESULT_OK) {
166 try { 165 String json = (String) SharedPreferencesUtil.getData("student", "");
167 state.student = new Gson().fromJson(json, Student.class); 166 try {
168 binding.tvTitle.setText(state.student.stuName + "的全部作业"); 167 state.student = new Gson().fromJson(json, Student.class);
169 getHomework(); 168 binding.tvTitle.setText(state.student.stuName + "的全部作业");
170 getWeekHuyou(); 169 getHomework();
171 getStageHuyou(); 170 getWeekHuyou();
172 } 171 getStageHuyou();
173 catch (Throwable t) { t.printStackTrace(); } 172 }
174 } 173 catch (Throwable t) { t.printStackTrace(); }
175 } 174 }
176 175 }
177 private void setupTab() { 176
178 binding.tabLayout.addTab(binding.tabLayout.newTab().setText("每日作业")); 177 private void setupTab() {
179 binding.tabLayout.addTab(binding.tabLayout.newTab().setText("每周总结")); 178 binding.tabLayout.addTab(binding.tabLayout.newTab().setText("每日作业"));
180 binding.tabLayout.addTab(binding.tabLayout.newTab().setText("阶段性总结")); 179 binding.tabLayout.addTab(binding.tabLayout.newTab().setText("每周总结"));
181 binding.tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { 180 binding.tabLayout.addTab(binding.tabLayout.newTab().setText("阶段性总结"));
182 @Override 181 binding.tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
183 public void onTabSelected(TabLayout.Tab tab) { 182 @Override
184 binding.filterBar.setVisibility(View.GONE); 183 public void onTabSelected(TabLayout.Tab tab) {
185 binding.weekBar.setVisibility(View.GONE); 184 binding.filterBar.setVisibility(View.GONE);
186 binding.stageBar.setVisibility(View.GONE); 185 binding.weekBar.setVisibility(View.GONE);
187 if (tab.getPosition() == 0) { //每日 186 binding.stageBar.setVisibility(View.GONE);
188 binding.filterBar.setVisibility(View.VISIBLE); 187 if (tab.getPosition() == 0) { //每日
189 binding.recyclerView.setAdapter(homeworkAdapter); 188 binding.filterBar.setVisibility(View.VISIBLE);
190 } else if (tab.getPosition() == 1) { //每周 189 binding.recyclerView.setAdapter(homeworkAdapter);
191 binding.weekBar.setVisibility(View.VISIBLE); 190 } else if (tab.getPosition() == 1) { //每周
192 binding.recyclerView.setAdapter(weekAdapter); 191 binding.weekBar.setVisibility(View.VISIBLE);
193 } else if (tab.getPosition() == 2) { //阶段 192 binding.recyclerView.setAdapter(weekAdapter);
194 binding.stageBar.setVisibility(View.VISIBLE); 193 } else if (tab.getPosition() == 2) { //阶段
195 binding.recyclerView.setAdapter(stageAdapter); 194 binding.stageBar.setVisibility(View.VISIBLE);
196 } 195 binding.recyclerView.setAdapter(stageAdapter);
197 } 196 }
198 @Override 197 }
199 public void onTabUnselected(TabLayout.Tab tab) { 198 @Override
200 } 199 public void onTabUnselected(TabLayout.Tab tab) {
201 @Override 200 }
202 public void onTabReselected(TabLayout.Tab tab) { 201 @Override
203 } 202 public void onTabReselected(TabLayout.Tab tab) {
204 }); 203 }
205 } 204 });
206 205 }
207 @SuppressLint("CheckResult") 206
208 protected void deleteHomework(HomeworkList data) { 207 @SuppressLint("CheckResult")
209 NetWorks.service_url.deleteHomework(NetWorks.getHeader(), data.getId()) 208 protected void deleteHomework(HomeworkList data) {
210 .subscribeOn(Schedulers.io()) 209 NetWorks.service_url.deleteHomework(NetWorks.getHeader(), data.getId())
211 .observeOn(AndroidSchedulers.mainThread()) 210 .subscribeOn(Schedulers.io())
212 .compose(RxLifecycleAndroid.bindActivity(getRxLifecycle())) 211 .observeOn(AndroidSchedulers.mainThread())
213 .subscribe((response, th) -> { 212 .compose(RxLifecycleAndroid.bindActivity(getRxLifecycle()))
214 if (th != null) th.printStackTrace(); 213 .subscribe((response, th) -> {
215 if (response != null && response.getSuccess()) { 214 if (th != null) th.printStackTrace();
216 getHomework(); 215 if (response != null && response.getSuccess()) {
217 } 216 getHomework();
218 }); 217 }
219 218 });
220 } 219
221 220 }
222 @SuppressLint("CheckResult") 221
223 protected void getHomework() { 222 @SuppressLint("CheckResult")
224 NetWorks.service_url.getStudentHomework(NetWorks.getHeader(), state.student.stuId) 223 protected void getHomework() {
225 .subscribeOn(Schedulers.io()) 224 NetWorks.service_url.getStudentHomework(NetWorks.getHeader(), state.student.stuId)
226 .observeOn(AndroidSchedulers.mainThread()) 225 .subscribeOn(Schedulers.io())
227 .compose(RxLifecycleAndroid.bindActivity(getRxLifecycle())) 226 .observeOn(AndroidSchedulers.mainThread())
228 .toObservable() 227 .compose(RxLifecycleAndroid.bindActivity(getRxLifecycle()))
229 .concatMap(response -> Observable.fromIterable(response.getData())) 228 .toObservable()
230 // 过滤 229 .concatMap(response -> Observable.fromIterable(response.getData()))
231 .filter(data -> { // 学科 230 // 过滤
232 String subject = state.subject.getValue(); 231 .filter(data -> { // 学科
233 if (subject == null || subject.isEmpty()) return true; 232 String subject = state.subject.getValue();
234 else return subject.equals(data.getSubject()); 233 if (subject == null || subject.isEmpty()) return true;
235 }) 234 else return subject.equals(data.getSubject());
236 .filter(data -> { // 年级 235 })
237 String grade = state.grade.getValue(); 236 .filter(data -> { // 年级
238 if (grade == null || grade.isEmpty()) return true; 237 String grade = state.grade.getValue();
239 else return grade.equals(data.getGrade()); 238 if (grade == null || grade.isEmpty()) return true;
240 }) 239 else return grade.equals(data.getGrade());
241 .filter(data -> { // 学期 240 })
242 String term = state.term.getValue(); 241 .filter(data -> { // 学期
243 if (term == null || term.isEmpty()) return true; 242 String term = state.term.getValue();
244 else return term.equals(data.getTerm()); 243 if (term == null || term.isEmpty()) return true;
245 }) 244 else return term.equals(data.getTerm());
246 .filter(data -> { // 反馈 245 })
247 Integer feedback = state.feedback.getValue(); 246 .filter(data -> { // 反馈
248 if (feedback == null || feedback == 0) return true; 247 Integer feedback = state.feedback.getValue();
249 else return (feedback == 1 && data.getRight() != null) || (feedback == 2 && data.getRight() == null); 248 if (feedback == null || feedback == 0) return true;
250 }) 249 else return (feedback == 1 && data.getRight() != null) || (feedback == 2 && data.getRight() == null);
251 // 过滤完成, 收集 250 })
252 .toList() 251 // 过滤完成, 收集
253 .subscribe((data, th) -> { 252 .toList()
254 if (th != null) th.printStackTrace(); 253 .subscribe((data, th) -> {
255 homeworkAdapter.setNewData(data); 254 if (th != null) th.printStackTrace();
256 }); 255 homeworkAdapter.setNewData(data);
257 } 256 });
258 257 }
259 @SuppressLint({"CheckResult", "NotifyDataSetChanged"}) 258
260 private void getWeekHuyou() { 259 @SuppressLint({"CheckResult", "NotifyDataSetChanged"})
261 NetWorks.service_url.getHuyouList(NetWorks.getHeader(), state.student.stuId, 0) 260 private void getWeekHuyou() {
262 .compose(transformSingle()) 261 NetWorks.service_url.getHuyouList(NetWorks.getHeader(), state.student.stuId, 0)
263 .map(ResponseResult::getData) 262 .compose(transformSingle())
264 .subscribe((list, throwable) -> { 263 .map(ResponseResult::getData)
265 if (throwable != null) { 264 .subscribe((list, throwable) -> {
266 throwable.printStackTrace(); 265 if (throwable != null) {
267 return; 266 throwable.printStackTrace();
268 } 267 return;
269 if (list != null) { 268 }
270 mWeekList.clear(); 269 if (list != null) {
271 mWeekList.addAll(list); 270 mWeekList.clear();
272 weekAdapter.notifyDataSetChanged(); 271 mWeekList.addAll(list);
273 272 weekAdapter.notifyDataSetChanged();
274 boolean exist = false; 273
275 int thisWeek = Calendar.getInstance().get(Calendar.WEEK_OF_YEAR); 274 boolean exist = false;
276 for (StDetail bean: mWeekList) { 275 int thisWeek = Calendar.getInstance().get(Calendar.WEEK_OF_YEAR);
277 Calendar other = Calendar.getInstance(); 276 for (StDetail bean: mWeekList) {
278 other.setTime(bean.endTime); 277 Calendar other = Calendar.getInstance();
279 if (other.get(Calendar.WEEK_OF_YEAR) == thisWeek) { 278 other.setTime(bean.endTime);
280 exist = true; 279 if (other.get(Calendar.WEEK_OF_YEAR) == thisWeek) {
281 break; 280 exist = true;
282 } 281 break;
283 } 282 }
284 binding.btnGeneralHuyou.setVisibility(exist ? View.GONE : View.VISIBLE); 283 }
285 } 284 binding.btnGeneralHuyou.setVisibility(exist ? View.GONE : View.VISIBLE);
286 }); 285 }
287 } 286 });
288 287 }
289 @SuppressLint({"CheckResult", "NotifyDataSetChanged"}) 288
290 private void getStageHuyou() { 289 @SuppressLint({"CheckResult", "NotifyDataSetChanged"})
291 NetWorks.service_url.getHuyouList(NetWorks.getHeader(), state.student.stuId, 1) 290 private void getStageHuyou() {
292 .compose(transformSingle()) 291 NetWorks.service_url.getHuyouList(NetWorks.getHeader(), state.student.stuId, 1)
293 .map(ResponseResult::getData) 292 .compose(transformSingle())
294 .subscribe((list, throwable) -> { 293 .map(ResponseResult::getData)
295 if (throwable != null) { 294 .subscribe((list, throwable) -> {
296 throwable.printStackTrace(); 295 if (throwable != null) {
297 return; 296 throwable.printStackTrace();
298 } 297 return;
299 if (list != null) { 298 }
300 mStageList.clear(); 299 if (list != null) {
301 mStageList.addAll(list); 300 mStageList.clear();
302 stageAdapter.notifyDataSetChanged(); 301 mStageList.addAll(list);
303 } 302 stageAdapter.notifyDataSetChanged();
304 }); 303 }
305 } 304 });
306 305 }
307 @SuppressLint("CheckResult") 306
308 private void generalWeek() { 307 @SuppressLint("CheckResult")
309 showLoadingDialog("稍等..."); 308 private void generalWeek() {
310 NetWorks.service_url.generalHuyou() 309 showLoadingDialog("稍等...");
311 .compose(transformSingle()) 310 NetWorks.service_url.generalHuyou()
312 .subscribe((response, throwable) -> { 311 .compose(transformSingle())
313 cancelLoadingDialog(); 312 .subscribe((response, throwable) -> {
314 if (throwable != null) { 313 cancelLoadingDialog();
315 loadFail("失败"); 314 if (throwable != null) {
316 throwable.printStackTrace(); 315 loadFail("失败");
317 return; 316 throwable.printStackTrace();
318 } 317 return;
319 if (response != null && response.getSuccess()) { 318 }
320 binding.btnGeneralHuyou.setVisibility(View.GONE); 319 if (response != null && response.getSuccess()) {
321 getWeekHuyou(); 320 binding.btnGeneralHuyou.setVisibility(View.GONE);
322 } 321 getWeekHuyou();
323 }); 322 }
324 } 323 });
325 324 }
326 @SuppressLint("CheckResult") 325
327 private void generalStage(Date startDate, Date endDate, String subject) { 326 @SuppressLint("CheckResult")
328 SimpleDateFormat format = new SimpleDateFormat("yyy-MM-dd HH:mm:ss", Locale.CHINA); 327 private void generalStage(Date startDate, Date endDate, String subject) {
329 Map<String, Object> body = new HashMap<>(); 328 SimpleDateFormat format = new SimpleDateFormat("yyy-MM-dd HH:mm:ss", Locale.CHINA);
330 body.put("stuId", state.student.stuId); 329 Map<String, Object> body = new HashMap<>();
331 body.put("startTime", format.format(startDate)); 330 body.put("stuId", state.student.stuId);
332 body.put("endTime", format.format(endDate)); 331 body.put("startTime", format.format(startDate));
333 body.put("subject", subject); 332 body.put("endTime", format.format(endDate));
334 showLoadingDialog("稍等..."); 333 body.put("subject", subject);
335 NetWorks.service_url.generalStageHuyou(NetWorks.getHeader(), body) 334 showLoadingDialog("稍等...");
336 .subscribeOn(Schedulers.io()) 335 NetWorks.service_url.generalStageHuyou(NetWorks.getHeader(), body)
337 .observeOn(AndroidSchedulers.mainThread()) 336 .subscribeOn(Schedulers.io())
338 .compose(RxLifecycleAndroid.bindActivity(getRxLifecycle())) 337 .observeOn(AndroidSchedulers.mainThread())
339 .subscribe((response, throwable) -> { 338 .compose(RxLifecycleAndroid.bindActivity(getRxLifecycle()))
340 if (throwable != null) { 339 .subscribe((response, throwable) -> {
341 loadFail("失败"); 340 if (throwable != null) {
342 throwable.printStackTrace(); 341 loadFail("失败");
343 return; 342 throwable.printStackTrace();
344 } 343 return;
345 if (response.getSuccess()) { 344 }
346 getStageHuyou(); 345 if (response.getSuccess()) {
347 cancelLoadingDialog(); 346 getStageHuyou();
348 } else { 347 cancelLoadingDialog();
349 loadFail(response.getMsg()); 348 } else {
350 } 349 loadFail(response.getMsg());
351 }); 350 }
352 } 351 });
353 352 }
354 @SuppressLint("CheckResult") 353
355 private void deleteHuyou(StDetail detail) { 354 @SuppressLint("CheckResult")
356 showLoadingDialog("稍等..."); 355 private void deleteHuyou(StDetail detail) {
357 NetWorks.service_url.deleteHuyou(NetWorks.getHeader(), detail.id) 356 showLoadingDialog("稍等...");
358 .subscribeOn(Schedulers.io()) 357 NetWorks.service_url.deleteHuyou(NetWorks.getHeader(), detail.id)
359 .observeOn(AndroidSchedulers.mainThread()) 358 .subscribeOn(Schedulers.io())
360 .compose(RxLifecycleAndroid.bindActivity(getRxLifecycle())) 359 .observeOn(AndroidSchedulers.mainThread())
361 .subscribe((response, throwable) -> { 360 .compose(RxLifecycleAndroid.bindActivity(getRxLifecycle()))
362 cancelLoadingDialog(); 361 .subscribe((response, throwable) -> {
363 if (throwable != null) { 362 cancelLoadingDialog();
364 loadFail("失败"); 363 if (throwable != null) {
365 throwable.printStackTrace(); 364 loadFail("失败");
366 return; 365 throwable.printStackTrace();
367 } 366 return;
368 if (detail.type == 0) { 367 }
369 getWeekHuyou(); 368 if (detail.type == 0) {
370 } else { 369 getWeekHuyou();
371 getStageHuyou(); 370 } else {
372 } 371 getStageHuyou();
373 }); 372 }
374 } 373 });
375 374 }
376 private void showSubjectFilter() { 375
377 if (subjectFilter == null) { 376 private void showSubjectFilter() {
378 PopupFilterSubjectBinding db = PopupFilterSubjectBinding.inflate(getLayoutInflater()); 377 if (subjectFilter == null) {
379 db.setLifecycleOwner(this); 378 PopupFilterSubjectBinding db = PopupFilterSubjectBinding.inflate(getLayoutInflater());
380 db.setState(state); 379 db.setLifecycleOwner(this);
381 db.bg.setOnClickListener(v -> subjectFilter.dismiss()); 380 db.setState(state);
382 subjectFilter = new PopupWindow(db.getRoot(), LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT); 381 db.bg.setOnClickListener(v -> subjectFilter.dismiss());
383 subjectFilter.setOutsideTouchable(true); 382 subjectFilter = new PopupWindow(db.getRoot(), LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
384 } 383 subjectFilter.setOutsideTouchable(true);
385 subjectFilter.showAsDropDown(binding.anchorView); 384 }
386 state.onFilter = i -> { 385 subjectFilter.showAsDropDown(binding.anchorView);
387 subjectFilter.dismiss(); 386 state.onFilter = i -> {
388 String subject = state.subject.getValue(); 387 subjectFilter.dismiss();
389 binding.ftSubject.setActivated(subject != null && !subject.isEmpty()); 388 String subject = state.subject.getValue();
390 binding.ftSubject.setText(subject == null || subject.isEmpty() ? "学科" : subject); 389 binding.ftSubject.setActivated(subject != null && !subject.isEmpty());
391 getHomework(); 390 binding.ftSubject.setText(subject == null || subject.isEmpty() ? "学科" : subject);
392 }; 391 getHomework();
393 } 392 };
394 393 }
395 private void showGradeFilter() { 394
396 if (gradeFilter == null) { 395 private void showGradeFilter() {
397 PopupFilterGradeBinding db = PopupFilterGradeBinding.inflate(getLayoutInflater()); 396 if (gradeFilter == null) {
398 db.setLifecycleOwner(this); 397 PopupFilterGradeBinding db = PopupFilterGradeBinding.inflate(getLayoutInflater());
399 db.setState(state); 398 db.setLifecycleOwner(this);
400 db.bg.setOnClickListener(v -> gradeFilter.dismiss()); 399 db.setState(state);
401 gradeFilter = new PopupWindow(db.getRoot(), LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT); 400 db.bg.setOnClickListener(v -> gradeFilter.dismiss());
402 gradeFilter.setOutsideTouchable(true); 401 gradeFilter = new PopupWindow(db.getRoot(), LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
403 } 402 gradeFilter.setOutsideTouchable(true);
404 gradeFilter.showAsDropDown(binding.anchorView); 403 }
405 state.onFilter = i -> { 404 gradeFilter.showAsDropDown(binding.anchorView);
406 gradeFilter.dismiss(); 405 state.onFilter = i -> {
407 String grade = state.grade.getValue(); 406 gradeFilter.dismiss();
408 binding.ftGrade.setActivated(grade != null && !grade.isEmpty()); 407 String grade = state.grade.getValue();
409 binding.ftGrade.setText(grade == null || grade.isEmpty() ? "年级" : grade); 408 binding.ftGrade.setActivated(grade != null && !grade.isEmpty());
410 409 binding.ftGrade.setText(grade == null || grade.isEmpty() ? "年级" : grade);
411 getHomework(); 410
412 }; 411 getHomework();
413 } 412 };
414 413 }
415 private void showTermFilter() { 414
416 if (termFilter == null) { 415 private void showTermFilter() {
417 PopupFilterTermBinding db = PopupFilterTermBinding.inflate(getLayoutInflater()); 416 if (termFilter == null) {
418 db.setLifecycleOwner(this); 417 PopupFilterTermBinding db = PopupFilterTermBinding.inflate(getLayoutInflater());
419 db.setState(state); 418 db.setLifecycleOwner(this);
420 db.bg.setOnClickListener(v -> termFilter.dismiss()); 419 db.setState(state);
421 termFilter = new PopupWindow(db.getRoot(), LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT); 420 db.bg.setOnClickListener(v -> termFilter.dismiss());
422 termFilter.setOutsideTouchable(true); 421 termFilter = new PopupWindow(db.getRoot(), LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
423 } 422 termFilter.setOutsideTouchable(true);
424 termFilter.showAsDropDown(binding.anchorView); 423 }
425 state.onFilter = i -> { 424 termFilter.showAsDropDown(binding.anchorView);
426 termFilter.dismiss(); 425 state.onFilter = i -> {
427 String term = state.term.getValue(); 426 termFilter.dismiss();
428 binding.ftTerm.setActivated(term != null && !term.isEmpty()); 427 String term = state.term.getValue();
429 binding.ftTerm.setText(term == null || term.isEmpty() ? "学期" : term); 428 binding.ftTerm.setActivated(term != null && !term.isEmpty());
430 429 binding.ftTerm.setText(term == null || term.isEmpty() ? "学期" : term);
431 getHomework(); 430
432 }; 431 getHomework();
433 } 432 };
434 433 }
435 private void showFeedbackFilter() { 434
436 if (feedbackFilter == null) { 435 private void showFeedbackFilter() {
437 PopupFilterFeedbackBinding db = PopupFilterFeedbackBinding.inflate(getLayoutInflater()); 436 if (feedbackFilter == null) {
438 db.setLifecycleOwner(this); 437 PopupFilterFeedbackBinding db = PopupFilterFeedbackBinding.inflate(getLayoutInflater());
439 db.setState(state); 438 db.setLifecycleOwner(this);
440 db.bg.setOnClickListener(v -> feedbackFilter.dismiss()); 439 db.setState(state);
441 feedbackFilter = new PopupWindow(db.getRoot(), LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT); 440 db.bg.setOnClickListener(v -> feedbackFilter.dismiss());
442 feedbackFilter.setOutsideTouchable(true); 441 feedbackFilter = new PopupWindow(db.getRoot(), LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
443 } 442 feedbackFilter.setOutsideTouchable(true);
444 feedbackFilter.showAsDropDown(binding.anchorView); 443 }
445 state.onFilter = i -> { 444 feedbackFilter.showAsDropDown(binding.anchorView);
446 feedbackFilter.dismiss(); 445 state.onFilter = i -> {
447 int feedback = state.feedback.getValue().intValue(); 446 feedbackFilter.dismiss();
448 binding.ftFeedback.setActivated(feedback != 0); 447 int feedback = state.feedback.getValue().intValue();
449 binding.ftFeedback.setText(feedback == 0 ? "反馈状态" : feedback == 1 ? "已反馈" : "未反馈"); 448 binding.ftFeedback.setActivated(feedback != 0);
450 449 binding.ftFeedback.setText(feedback == 0 ? "反馈状态" : feedback == 1 ? "已反馈" : "未反馈");
451 getHomework(); 450
452 }; 451 getHomework();
453 } 452 };
454 453 }
455 @Override 454
456 protected ActivityStudentHomeworkBinding getViewBinding() { 455 @Override
457 return ActivityStudentHomeworkBinding.inflate(getLayoutInflater()); 456 protected ActivityStudentHomeworkBinding getViewBinding() {
458 } 457 return ActivityStudentHomeworkBinding.inflate(getLayoutInflater());
459 458 }
460 public static class State { 459
461 public Student student; 460 public static class State {
462 461 public Student student;
463 public Function1<Integer> onFilter = i -> { }; 462
464 463 public Function1<Integer> onFilter = i -> { };
465 public MutableLiveData<String> subject = new MutableLiveData<>(""); 464
466 public void setSubject(String value) { 465 public MutableLiveData<String> subject = new MutableLiveData<>("");
467 subject.setValue(value); 466 public void setSubject(String value) {
468 onFilter.invoke(1); 467 subject.setValue(value);
469 } 468 onFilter.invoke(1);
470 469 }
471 public MutableLiveData<String> grade = new MutableLiveData<>(""); 470
472 public void setGrade(String value) { 471 public MutableLiveData<String> grade = new MutableLiveData<>("");
473 grade.setValue(value); 472 public void setGrade(String value) {
474 onFilter.invoke(2); 473 grade.setValue(value);
475 } 474 onFilter.invoke(2);
476 475 }
477 public MutableLiveData<String> term = new MutableLiveData<>(""); 476
478 public void setTerm(String value) { 477 public MutableLiveData<String> term = new MutableLiveData<>("");
479 term.setValue(value); 478 public void setTerm(String value) {
480 onFilter.invoke(3); 479 term.setValue(value);
481 } 480 onFilter.invoke(3);
482 481 }
483 //0:全部, 1: 已反馈, 2:未反馈 482
484 public MutableLiveData<Integer> feedback = new MutableLiveData<>(0); 483 //0:全部, 1: 已反馈, 2:未反馈
485 public void setFeedback(int value) { 484 public MutableLiveData<Integer> feedback = new MutableLiveData<>(0);
486 feedback.setValue(value); 485 public void setFeedback(int value) {
487 onFilter.invoke(4); 486 feedback.setValue(value);
488 } 487 onFilter.invoke(4);
489 } 488 }
490 489 }
491 static class HuyouAdapter extends BaseQuickAdapter<StDetail, BaseViewHolder> { 490
492 public Function1<StDetail> deleteCall; 491 static class HuyouAdapter extends BaseQuickAdapter<StDetail, BaseViewHolder> {
493 public Function1<StDetail> detailCall; 492 public Function1<StDetail> deleteCall;
494 public Student student; 493 public Function1<StDetail> detailCall;
495 494 public Student student;
496 public HuyouAdapter(@Nullable List<StDetail> data) { 495
497 super(R.layout.item_homework_list, data); 496 public HuyouAdapter(@Nullable List<StDetail> data) {
498 } 497 super(R.layout.item_homework_list, data);
499 498 }
500 @SuppressLint("SetTextI18n,SimpleDateFormat") 499
501 @Override 500 @SuppressLint("SetTextI18n,SimpleDateFormat")
502 protected void convert(@NonNull BaseViewHolder holder, StDetail data) { 501 @Override
503 holder.setGone(R.id.tvFlag, false); 502 protected void convert(@NonNull BaseViewHolder holder, StDetail data) {
504 int subjectImg; 503 holder.setGone(R.id.tvFlag, false);
505 switch (data.homeworkSubject) { 504 int subjectImg;
506 case "语文": 505 switch (data.homeworkSubject) {
507 subjectImg = R.drawable.png_cover_chinese; 506 case "语文":
508 break; 507 subjectImg = R.drawable.png_cover_chinese;
509 case "英语": 508 break;
510 subjectImg = R.drawable.png_cover_english; 509 case "英语":
511 break; 510 subjectImg = R.drawable.png_cover_english;
512 case "物理": 511 break;
513 subjectImg = R.drawable.png_cover_physics; 512 case "物理":
514 break; 513 subjectImg = R.drawable.png_cover_physics;
515 case "化学": 514 break;
516 subjectImg = R.drawable.png_cover_chemistry; 515 case "化学":
517 break; 516 subjectImg = R.drawable.png_cover_chemistry;
518 case "数学": 517 break;
519 default: 518 case "数学":
520 subjectImg = R.drawable.png_cover_math; 519 default:
521 } 520 subjectImg = R.drawable.png_cover_math;
522 holder.setImageResource(R.id.ivSubject, subjectImg); 521 }
523 Date endDate = new Date(data.endTime.getTime() - 1000); 522 holder.setImageResource(R.id.ivSubject, subjectImg);
524 String startStr = new SimpleDateFormat("yyyy.M.d").format(data.startTime); 523 Date endDate = new Date(data.endTime.getTime() - 1000);
525 String endStr = new SimpleDateFormat("-M.d").format(endDate); 524 String startStr = new SimpleDateFormat("yyyy.M.d").format(data.startTime);
526 String typeStr = data.type == 0 ? "作业周总结" : "作业阶段性总结"; 525 String endStr = new SimpleDateFormat("-M.d").format(endDate);
527 String title = startStr + endStr + data.homeworkSubject + typeStr; 526 String typeStr = data.type == 0 ? "作业周总结" : "作业阶段性总结";
528 holder.setText(R.id.tvName, title); 527 String title = startStr + endStr + data.homeworkSubject + typeStr;
529 holder.setText(R.id.tvGrade, data.grade); 528 holder.setText(R.id.tvName, title);
530 View btnDelete = holder.getView(R.id.btnDelete); 529 holder.setText(R.id.tvGrade, data.grade);
531 View btnDetail = holder.getView(R.id.btnDetail); 530 View btnDelete = holder.getView(R.id.btnDelete);
532 btnDelete.setOnClickListener(v -> { 531 View btnDetail = holder.getView(R.id.btnDetail);
533 if (deleteCall != null) deleteCall.invoke(data); 532 btnDelete.setOnClickListener(v -> {
534 }); 533 if (deleteCall != null) deleteCall.invoke(data);
535 btnDetail.setOnClickListener(v -> { 534 });
536 if (detailCall != null) detailCall.invoke(data); 535 btnDetail.setOnClickListener(v -> {
537 }); 536 if (detailCall != null) detailCall.invoke(data);
538 } 537 });
539 538 }
540 private SimpleDateFormat getFormatWithGmt8(String pattern) { 539
541 SimpleDateFormat format = new SimpleDateFormat(pattern, Locale.CHINA); 540 private SimpleDateFormat getFormatWithGmt8(String pattern) {
542 //format.setTimeZone(TimeZone.getTimeZone("GMT+16")); 541 SimpleDateFormat format = new SimpleDateFormat(pattern, Locale.CHINA);
543 return format; 542 //format.setTimeZone(TimeZone.getTimeZone("GMT+16"));
544 } 543 return format;
545 } 544 }
546 545 }
547 } 546
548 547 }
app/src/main/java/com/hjx/parent/adapter/HomeworkAdapter.java
1 package com.hjx.parent.adapter; 1 package com.hjx.parent.adapter;
2 2
3 import android.view.View; 3 import android.view.View;
4 import android.widget.TextView; 4 import android.widget.TextView;
5 5
6 import androidx.annotation.NonNull; 6 import androidx.annotation.NonNull;
7 7
8 import com.chad.library.adapter.base.BaseQuickAdapter; 8 import com.chad.library.adapter.base.BaseQuickAdapter;
9 import com.chad.library.adapter.base.BaseViewHolder; 9 import com.chad.library.adapter.base.BaseViewHolder;
10 import com.hjx.parent.R; 10 import com.hjx.parent.R;
11 import com.prws.common.bean.homework.HomeworkList; 11 import com.prws.common.bean.homework.HomeworkList;
12 12
13 public class HomeworkAdapter extends BaseQuickAdapter<HomeworkList, BaseViewHolder> { 13 public class HomeworkAdapter extends BaseQuickAdapter<HomeworkList, BaseViewHolder> {
14 14
15 public HomeworkAdapter() { 15 public HomeworkAdapter() {
16 super(R.layout.item_homework); 16 super(R.layout.item_homework);
17 } 17 }
18 18
19 @Override 19 @Override
20 protected void convert(@NonNull BaseViewHolder helper, HomeworkList homework) { 20 protected void convert(@NonNull BaseViewHolder helper, HomeworkList homework) {
21 helper.setText(R.id.tvName, homework.getName()); 21 helper.setText(R.id.tvName, homework.getName());
22 helper.setText(R.id.tvGrade, homework.getGrade() + "-" + homework.getTerm()); 22 helper.setText(R.id.tvGrade, homework.getGrade() + "-" + homework.getTerm());
23 int subjectImg; 23 int subjectImg;
24 switch (homework.getSubject()) { 24 switch (homework.getSubject()) {
25 case "语文": 25 case "语文":
26 subjectImg = R.drawable.png_cover_chinese; 26 subjectImg = R.drawable.png_cover_chinese;
27 break; 27 break;
28 case "英语": 28 case "英语":
29 subjectImg = R.drawable.png_cover_english; 29 subjectImg = R.drawable.png_cover_english;
30 break; 30 break;
31 case "物理": 31 case "物理":
32 subjectImg = R.drawable.png_cover_physics; 32 subjectImg = R.drawable.png_cover_physics;
33 break; 33 break;
34 case "化学": 34 case "化学":
35 subjectImg = R.drawable.png_cover_chemistry; 35 subjectImg = R.drawable.png_cover_chemistry;
36 break; 36 break;
37 case "数学": 37 case "数学":
38 default: 38 default:
39 subjectImg = R.drawable.png_cover_math; 39 subjectImg = R.drawable.png_cover_math;
40 } 40 }
41 helper.setImageResource(R.id.ivSubject, subjectImg); 41 helper.setImageResource(R.id.ivSubject, subjectImg);
42 42
43 TextView tvDate = helper.getView(R.id.tvDate); 43 TextView tvDate = helper.getView(R.id.tvDate);
44 int index = getData().indexOf(homework); 44 int index = getData().indexOf(homework);
45 if (index == 0) { 45 if (index == 0) {
46 tvDate.setVisibility(View.VISIBLE); 46 tvDate.setVisibility(View.VISIBLE);
47 } else if (!homework.getFormatTime().equals(getData().get(index - 1).getFormatTime())) { 47 } else if (!homework.getFormatTime().equals(getData().get(index - 1).getFormatTime())) {
48 tvDate.setVisibility(View.VISIBLE); 48 tvDate.setVisibility(View.VISIBLE);
49 } else { 49 } else {
50 tvDate.setVisibility(View.GONE); 50 tvDate.setVisibility(View.GONE);
51 } 51 }
52 tvDate.setText(homework.getFormatTime()); 52 tvDate.setText(homework.getFormatTime());
53 } 53 }
54 } 54 }
55 55
app/src/main/java/com/hjx/parent/adapter/HomeworkListAdapter.java
1 package com.hjx.parent.adapter; 1 package com.hjx.parent.adapter;
2 2
3 import android.view.View;
4 import android.widget.TextView; 3 import android.view.View;
5 4 import android.widget.TextView;
6 import androidx.annotation.NonNull; 5
7 6 import androidx.annotation.NonNull;
8 import com.chad.library.adapter.base.BaseQuickAdapter; 7
9 import com.chad.library.adapter.base.BaseViewHolder; 8 import com.chad.library.adapter.base.BaseQuickAdapter;
10 import com.hjx.parent.R; 9 import com.chad.library.adapter.base.BaseViewHolder;
11 import com.hjx.parent.function.Function1;
12 import com.prws.common.bean.homework.HomeworkList;
13 10 import com.hjx.parent.R;
14 public class HomeworkListAdapter extends BaseQuickAdapter<HomeworkList, BaseViewHolder> {
15 11 import com.hjx.parent.function.Function1;
16 public Function1<HomeworkList> deleteCall; 12 import com.prws.common.bean.homework.HomeworkList;
17 public Function1<HomeworkList> detailCall; 13
18 14 public class HomeworkListAdapter extends BaseQuickAdapter<HomeworkList, BaseViewHolder> {
19 public HomeworkListAdapter() { 15
20 super(R.layout.item_homework_list); 16 public Function1<HomeworkList> deleteCall;
21 } 17 public Function1<HomeworkList> detailCall;
22 18
23 @Override 19 public HomeworkListAdapter() {
24 protected void convert(@NonNull BaseViewHolder holder, HomeworkList homework) { 20 super(R.layout.item_homework_list);
25 holder.setGone(R.id.tvFlag, homework.getRight() != null); 21 }
26 holder.setText(R.id.tvName, homework.getName()); 22
27 holder.setText(R.id.tvGrade, homework.getGrade() + "-" + homework.getTerm()); 23 @Override
28 int subjectImg; 24 protected void convert(@NonNull BaseViewHolder holder, HomeworkList homework) {
29 switch (homework.getSubject()) { 25 holder.setGone(R.id.tvFlag, homework.getRight() != null);
30 case "语文": 26 holder.setText(R.id.tvName, homework.getName());
31 subjectImg = R.drawable.png_cover_chinese; 27 holder.setText(R.id.tvGrade, homework.getGrade() + "-" + homework.getTerm());
32 break; 28 int subjectImg;
33 case "英语": 29 switch (homework.getSubject()) {
34 subjectImg = R.drawable.png_cover_english; 30 case "语文":
35 break; 31 subjectImg = R.drawable.png_cover_chinese;
36 case "物理": 32 break;
37 subjectImg = R.drawable.png_cover_physics; 33 case "英语":
38 break; 34 subjectImg = R.drawable.png_cover_english;
39 case "化学": 35 break;
40 subjectImg = R.drawable.png_cover_chemistry; 36 case "物理":
41 break; 37 subjectImg = R.drawable.png_cover_physics;
42 case "数学": 38 break;
43 default: 39 case "化学":
44 subjectImg = R.drawable.png_cover_math; 40 subjectImg = R.drawable.png_cover_chemistry;
45 } 41 break;
46 holder.setImageResource(R.id.ivSubject, subjectImg); 42 case "数学":
47 43 default:
48 TextView tvDate = holder.getView(R.id.tvDate); 44 subjectImg = R.drawable.png_cover_math;
49 int index = getData().indexOf(homework); 45 }
50 if (index == 0) { 46 holder.setImageResource(R.id.ivSubject, subjectImg);
51 tvDate.setVisibility(View.VISIBLE); 47
52 } else if (!homework.getFormatTime().equals(getData().get(index - 1).getFormatTime())) { 48 TextView tvDate = holder.getView(R.id.tvDate);
53 tvDate.setVisibility(View.VISIBLE); 49 int index = getData().indexOf(homework);
54 } else { 50 if (index == 0) {
55 tvDate.setVisibility(View.GONE); 51 tvDate.setVisibility(View.VISIBLE);
56 } 52 } else if (!homework.getFormatTime().equals(getData().get(index - 1).getFormatTime())) {
57 tvDate.setText(homework.getFormatTime()); 53 tvDate.setVisibility(View.VISIBLE);
58 54 } else {
59 View btnDelete = holder.getView(R.id.btnDelete); 55 tvDate.setVisibility(View.GONE);
60 btnDelete.setOnClickListener(v -> { 56 }
61 if (deleteCall != null) deleteCall.invoke(homework); 57 tvDate.setText(homework.getFormatTime());
62 }); 58
63 59 View btnDelete = holder.getView(R.id.btnDelete);
64 View btnDetail = holder.getView(R.id.btnDetail); 60 btnDelete.setOnClickListener(v -> {
65 btnDetail.setOnClickListener(v -> { 61 if (deleteCall != null) deleteCall.invoke(homework);
66 if (detailCall != null) { 62 });
67 detailCall.invoke(homework); 63
68 } 64 View btnDetail = holder.getView(R.id.btnDetail);
69 }); 65 btnDetail.setOnClickListener(v -> {
70 holder.itemView.setOnClickListener(v -> { 66 if (detailCall != null) {
71 if (detailCall != null) { 67 detailCall.invoke(homework);
72 detailCall.invoke(homework); 68 }
73 } 69 });
74 }); 70 holder.itemView.setOnClickListener(v -> {
75 } 71 if (detailCall != null) {
76 } 72 detailCall.invoke(homework);
77 73 }
app/src/main/java/com/hjx/parent/fragment/ErrorFragment.java
1 package com.hjx.parent.fragment; 1 package com.hjx.parent.fragment;
2 2
3 import static android.app.Activity.RESULT_OK; 3 import static android.app.Activity.RESULT_OK;
4 4
5 import android.annotation.SuppressLint; 5 import android.annotation.SuppressLint;
6 import android.content.Intent; 6 import android.content.Intent;
7 import android.graphics.Bitmap; 7 import android.graphics.Bitmap;
8 import android.graphics.BitmapFactory; 8 import android.graphics.BitmapFactory;
9 import android.net.Uri; 9 import android.net.Uri;
10 import android.os.Bundle; 10 import android.os.Bundle;
11 import android.provider.MediaStore; 11 import android.provider.MediaStore;
12 import android.text.TextUtils; 12 import android.text.TextUtils;
13 import android.util.Log; 13 import android.util.Log;
14 import android.view.LayoutInflater; 14 import android.view.LayoutInflater;
15 import android.view.View; 15 import android.view.View;
16 import android.view.ViewGroup; 16 import android.view.ViewGroup;
17 import android.widget.TextView;
17 import android.widget.Toast; 18 import android.widget.Toast;
18 19
19 import androidx.annotation.NonNull; 20 import androidx.annotation.NonNull;
20 import androidx.annotation.Nullable; 21 import androidx.annotation.Nullable;
21 import androidx.core.content.FileProvider; 22 import androidx.core.content.FileProvider;
22 import androidx.recyclerview.widget.RecyclerView; 23 import androidx.recyclerview.widget.RecyclerView;
23 24
24 import com.bumptech.glide.Glide; 25 import com.bumptech.glide.Glide;
25 import com.bumptech.glide.load.resource.bitmap.RoundedCorners; 26 import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
26 import com.bumptech.glide.request.RequestOptions; 27 import com.bumptech.glide.request.RequestOptions;
27 import com.chad.library.adapter.base.BaseQuickAdapter; 28 import com.chad.library.adapter.base.BaseQuickAdapter;
28 import com.chad.library.adapter.base.BaseViewHolder; 29 import com.chad.library.adapter.base.BaseViewHolder;
29 import com.google.android.material.tabs.TabLayout; 30 import com.google.android.material.tabs.TabLayout;
30 import com.google.gson.Gson; 31 import com.google.gson.Gson;
31 import com.hjq.permissions.OnPermissionCallback; 32 import com.hjq.permissions.OnPermissionCallback;
32 import com.hjq.permissions.Permission; 33 import com.hjq.permissions.Permission;
33 import com.hjq.permissions.XXPermissions; 34 import com.hjq.permissions.XXPermissions;
34 import com.hjx.parent.ErrorListActivity; 35 import com.hjx.parent.ErrorListActivity;
35 import com.hjx.parent.HomeworkDetailActivity; 36 import com.hjx.parent.HomeworkDetailActivity;
36 import com.hjx.parent.HomeworkShareActivity; 37 import com.hjx.parent.HomeworkShareActivity;
37 import com.hjx.parent.ImageActivity; 38 import com.hjx.parent.ImageActivity;
38 import com.hjx.parent.R; 39 import com.hjx.parent.R;
39 import com.hjx.parent.StuHomeworkActivity; 40 import com.hjx.parent.StuHomeworkActivity;
40 import com.hjx.parent.TeacherChooseActivity; 41 import com.hjx.parent.TeacherChooseActivity;
41 import com.hjx.parent.adapter.ErrorAdapter; 42 import com.hjx.parent.adapter.ErrorAdapter;
42 import com.hjx.parent.adapter.HomeworkAdapter; 43 import com.hjx.parent.adapter.HomeworkAdapter;
43 import com.hjx.parent.bean.StudentBean; 44 import com.hjx.parent.bean.StudentBean;
44 import com.hjx.parent.databinding.FragmentErrorBookBinding; 45 import com.hjx.parent.databinding.FragmentErrorBookBinding;
45 import com.hjx.parent.rx.BaseRxFragment; 46 import com.hjx.parent.rx.BaseRxFragment;
46 import com.prws.common.bean.PageInfo; 47 import com.prws.common.bean.PageInfo;
47 import com.prws.common.bean.ResponseResult; 48 import com.prws.common.bean.ResponseResult;
48 import com.prws.common.bean.Student; 49 import com.prws.common.bean.Student;
49 import com.prws.common.bean.TopicBean; 50 import com.prws.common.bean.TopicBean;
50 import com.prws.common.bean.homework.HomeworkList; 51 import com.prws.common.bean.homework.HomeworkList;
51 import com.prws.common.net.NetWorks; 52 import com.prws.common.net.NetWorks;
52 import com.prws.common.utils.BitmapUtils; 53 import com.prws.common.utils.BitmapUtils;
53 import com.prws.common.utils.CommonUtil; 54 import com.prws.common.utils.CommonUtil;
54 import com.prws.common.utils.ScreenUtils; 55 import com.prws.common.utils.ScreenUtils;
55 import com.prws.common.utils.SharedPreferencesUtil; 56 import com.prws.common.utils.SharedPreferencesUtil;
56 import com.prws.common.utils.dialog.MyButtomDialog; 57 import com.prws.common.utils.dialog.MyButtomDialog;
57 import com.trello.rxlifecycle2.android.RxLifecycleAndroid; 58 import com.trello.rxlifecycle2.android.RxLifecycleAndroid;
58 import com.zhangteng.imagepicker.bean.ImageInfo; 59 import com.zhangteng.imagepicker.bean.ImageInfo;
59 import com.zhangteng.imagepicker.config.ImagePickerConfig; 60 import com.zhangteng.imagepicker.config.ImagePickerConfig;
60 import com.zhangteng.imagepicker.config.ImagePickerEnum; 61 import com.zhangteng.imagepicker.config.ImagePickerEnum;
61 import com.zhangteng.imagepicker.config.ImagePickerOpen; 62 import com.zhangteng.imagepicker.config.ImagePickerOpen;
62 import com.zhangteng.imagepicker.imageloader.GlideImageLoader; 63 import com.zhangteng.imagepicker.imageloader.GlideImageLoader;
63 import com.zhangteng.utils.IHandlerCallBack; 64 import com.zhangteng.utils.IHandlerCallBack;
64 65
65 import java.io.File; 66 import java.io.File;
66 import java.text.SimpleDateFormat; 67 import java.text.SimpleDateFormat;
67 import java.util.ArrayList; 68 import java.util.ArrayList;
68 import java.util.Arrays; 69 import java.util.Arrays;
69 import java.util.HashMap;
70 import java.util.List; 70 import java.util.HashMap;
71 import java.util.Locale; 71 import java.util.List;
72 import java.util.Map; 72 import java.util.Locale;
73 73 import java.util.Map;
74 import io.reactivex.Observable; 74
75 import io.reactivex.Observer; 75 import io.reactivex.Observable;
76 import io.reactivex.android.schedulers.AndroidSchedulers; 76 import io.reactivex.Observer;
77 import io.reactivex.disposables.Disposable; 77 import io.reactivex.android.schedulers.AndroidSchedulers;
78 import io.reactivex.schedulers.Schedulers; 78 import io.reactivex.disposables.Disposable;
79 79 import io.reactivex.schedulers.Schedulers;
80 public class ErrorFragment extends BaseRxFragment<FragmentErrorBookBinding> { 80
81 StudentBean studentBean; 81 public class ErrorFragment extends BaseRxFragment<FragmentErrorBookBinding> {
82 private int subject; 82 StudentBean studentBean;
83 private ErrorAdapter errorAdapter; 83 private int subject;
84 private HomeworkAdapter homeworkAdapter; 84 private ErrorAdapter errorAdapter;
85 private String filePath; 85 private HomeworkAdapter homeworkAdapter;
86 86 private String filePath;
87 @Override 87
88 protected FragmentErrorBookBinding onCreateViewBinding(@NonNull LayoutInflater inflater, @Nullable ViewGroup parent) { 88 @Override
89 return FragmentErrorBookBinding.inflate(inflater, parent, false); 89 protected FragmentErrorBookBinding onCreateViewBinding(@NonNull LayoutInflater inflater, @Nullable ViewGroup parent) {
90 } 90 return FragmentErrorBookBinding.inflate(inflater, parent, false);
91 91 }
92 public void refreshStudent() { 92
93 String student = (String) SharedPreferencesUtil.getData("student", ""); 93 public void refreshStudent() {
94 try { 94 String student = (String) SharedPreferencesUtil.getData("student", "");
95 studentBean = new Gson().fromJson(student, StudentBean.class); 95 try {
96 getBinding().tvChoose.setText(studentBean.getStuName()); 96 studentBean = new Gson().fromJson(student, StudentBean.class);
97 } catch (Exception e) { 97 getBinding().tvChoose.setText(studentBean.getStuName());
98 e.printStackTrace(); 98 } catch (Exception e) {
99 } 99 e.printStackTrace();
100 } 100 }
101 101 }
102 @Override 102
103 public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { 103 @Override
104 super.onViewCreated(view, savedInstanceState); 104 public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
105 String photo = (String) SharedPreferencesUtil.getData("photo", ""); 105 super.onViewCreated(view, savedInstanceState);
106 if (!TextUtils.isEmpty(photo)) { 106 String photo = (String) SharedPreferencesUtil.getData("photo", "");
107 RoundedCorners roundedCorners = new RoundedCorners(ScreenUtils.dpToPx(getContext(), 45)); 107 if (!TextUtils.isEmpty(photo)) {
108 RequestOptions options = RequestOptions.bitmapTransform(roundedCorners); 108 RoundedCorners roundedCorners = new RoundedCorners(ScreenUtils.dpToPx(getContext(), 45));
109 Glide.with(getContext()).load(photo).apply(options).into(getBinding().ivStudent); 109 RequestOptions options = RequestOptions.bitmapTransform(roundedCorners);
110 } 110 Glide.with(getContext()).load(photo).apply(options).into(getBinding().ivStudent);
111 String name = (String) SharedPreferencesUtil.getData("name", ""); 111 }
112 getBinding().tvName.setText(name); 112 String name = (String) SharedPreferencesUtil.getData("name", "");
113 refreshStudent(); 113 getBinding().tvName.setText(name);
114 getBinding().tvChoose.setOnClickListener(v -> startActivity(new Intent(getContext(), TeacherChooseActivity.class))); 114 refreshStudent();
115 getBinding().rlTakePhoto.setOnClickListener(v -> takePhoto(0)); 115 getBinding().tvChoose.setOnClickListener(v -> startActivity(new Intent(getContext(), TeacherChooseActivity.class)));
116 getBinding().flEntryHomework.setOnClickListener(v -> takePhoto(1)); 116 getBinding().rlTakePhoto.setOnClickListener(v -> takePhoto(0));
117 BaseQuickAdapter adapter = new BaseQuickAdapter(R.layout.item_subject, Arrays.asList(getResources().getStringArray(R.array.filter_subject))) { 117 getBinding().flEntryHomework.setOnClickListener(v -> takePhoto(1));
118 @Override 118 BaseQuickAdapter adapter = new BaseQuickAdapter(R.layout.item_subject, Arrays.asList(getResources().getStringArray(R.array.filter_subject))) {
119 public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) { 119 @Override
120 120 public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
121 } 121
122 122 }
123 @Override 123
124 protected void convert(@NonNull BaseViewHolder item, Object o) { 124 @Override
125 item.setText(R.id.tv_subject, getResources().getStringArray(R.array.filter_subject)[item.getAdapterPosition()]); 125 protected void convert(@NonNull BaseViewHolder item, Object o) {
126 switch (item.getAdapterPosition()) { 126 int position = item.getBindingAdapterPosition();
127 case 0: 127 String name = getResources().getStringArray(R.array.filter_subject)[position];
128 item.setImageResource(R.id.iv_subject, R.drawable.png_ic_chinese); 128 item.setText(R.id.tv_subject, name);
129 break; 129 switch (name) {
130 case "语文":
131 item.setImageResource(R.id.iv_subject, R.drawable.state_ic_chinese);
130 case 1: 132 break;
131 item.setImageResource(R.id.iv_subject, R.drawable.png_ic_math); 133 case "数学":
132 break; 134 item.setImageResource(R.id.iv_subject, R.drawable.state_ic_math);
133 case 2: 135 break;
134 item.setImageResource(R.id.iv_subject, R.drawable.png_ic_english); 136 case "英语":
135 break; 137 item.setImageResource(R.id.iv_subject, R.drawable.state_ic_english);
136 case 3: 138 break;
137 item.setImageResource(R.id.iv_subject, R.drawable.png_ic_physics); 139 case "物理":
138 break; 140 item.setImageResource(R.id.iv_subject, R.drawable.state_ic_physics);
139 case 4: 141 break;
140 item.setImageResource(R.id.iv_subject, R.drawable.png_ic_chemistry); 142 case "化学":
141 break; 143 item.setImageResource(R.id.iv_subject, R.drawable.state_ic_chemistry);
142 } 144 break;
143 ViewGroup.LayoutParams layoutParams = item.getView(R.id.rl_subject).getLayoutParams(); 145 }
146 item.itemView.setActivated(subject == position);
144 layoutParams.width = (CommonUtil.getScreenWidth(getContext()) - CommonUtil.dpToPx(getContext(), 30)) / 4; 147 ViewGroup.LayoutParams layoutParams = item.getView(R.id.rl_subject).getLayoutParams();
145 item.getView(R.id.rl_subject).setLayoutParams(layoutParams); 148 layoutParams.width = (CommonUtil.getScreenWidth(mContext) - CommonUtil.dpToPx(mContext, 30)) / 4;
146 item.getConvertView().setOnClickListener(v -> { 149 item.getView(R.id.rl_subject).setLayoutParams(layoutParams);
147 if (subject != item.getAdapterPosition()) { 150 item.itemView.setOnClickListener(v -> {
148 subject = item.getAdapterPosition(); 151 if (subject != position) {
149 String subStr = getResources().getStringArray(R.array.filter_subject)[subject]; 152 subject = position;
150 getError(subStr); 153 String subStr = getResources().getStringArray(R.array.filter_subject)[subject];
151 getHomework(subStr); 154 getError(subStr);
152 } 155 getHomework(subStr);
156 notifyDataSetChanged();
153 }); 157 }
154 } 158 });
155 }; 159 }
156 getBinding().rvSubject.setAdapter(adapter); 160 };
157 subject = 0; 161 getBinding().rvSubject.setAdapter(adapter);
158 getError(getResources().getStringArray(R.array.filter_subject)[subject]); 162 subject = 0;
159 getBinding().llAll.setOnClickListener(v -> { 163 getError(getResources().getStringArray(R.array.filter_subject)[subject]);
160 if (binding.tabLayout.getSelectedTabPosition() == 0) { 164 getBinding().llAll.setOnClickListener(v -> {
161 Intent intent = new Intent(getContext(), ErrorListActivity.class); 165 if (binding.tabLayout.getSelectedTabPosition() == 0) {
162 startActivity(intent); 166 Intent intent = new Intent(getContext(), ErrorListActivity.class);
163 } else { 167 startActivity(intent);
164 Intent intent = new Intent(getContext(), StuHomeworkActivity.class); 168 } else {
165 startActivity(intent); 169 Intent intent = new Intent(getContext(), StuHomeworkActivity.class);
166 } 170 startActivity(intent);
167 }); 171 }
168 172 });
169 errorAdapter = new ErrorAdapter(getActivity(), new ArrayList<>(), false); 173
170 homeworkAdapter = new HomeworkAdapter(); 174 errorAdapter = new ErrorAdapter(getActivity(), new ArrayList<>(), false);
171 homeworkAdapter.setOnItemClickListener((baseQuickAdapter, view1, i) -> { 175 homeworkAdapter = new HomeworkAdapter();
172 HomeworkList data = homeworkAdapter.getData().get(i); 176 homeworkAdapter.setOnItemClickListener((baseQuickAdapter, view1, i) -> {
173 Gson gson = new Gson(); 177 HomeworkList data = homeworkAdapter.getData().get(i);
174 String json = gson.toJson(studentBean); 178 Gson gson = new Gson();
175 Student s = gson.fromJson(json, Student.class); 179 String json = gson.toJson(studentBean);
176 if (data.getRight() == null) { 180 Student s = gson.fromJson(json, Student.class);
177 Intent intent = new Intent(requireContext(), HomeworkDetailActivity.class); 181 if (data.getRight() == null) {
178 intent.putExtra("student", s); 182 Intent intent = new Intent(requireContext(), HomeworkDetailActivity.class);
179 intent.putExtra("data", data); 183 intent.putExtra("student", s);
180 startActivity(intent); 184 intent.putExtra("data", data);
181 } else { 185 startActivity(intent);
182 Intent intent = new Intent(requireContext(), HomeworkShareActivity.class); 186 } else {
183 intent.putExtra("student", s); 187 Intent intent = new Intent(requireContext(), HomeworkShareActivity.class);
184 intent.putExtra("id", data.getId()); 188 intent.putExtra("student", s);
185 intent.putExtra("grade", data.getGrade()); 189 intent.putExtra("id", data.getId());
186 intent.putExtra("subject", data.getSubject()); 190 intent.putExtra("grade", data.getGrade());
187 String name1 = new SimpleDateFormat("yyyy年M月d日作业", Locale.CHINA).format(data.uploadTime); 191 intent.putExtra("subject", data.getSubject());
188 intent.putExtra("name", name1); 192 String name1 = new SimpleDateFormat("yyyy年M月d日作业", Locale.CHINA).format(data.uploadTime);
189 startActivity(intent); 193 intent.putExtra("name", name1);
190 } 194 startActivity(intent);
191 }); 195 }
192 binding.rvMain.setAdapter(errorAdapter); 196 });
193 binding.tabLayout.addTab(binding.tabLayout.newTab().setText("最近错题")); 197 binding.rvMain.setAdapter(errorAdapter);
194 binding.tabLayout.addTab(binding.tabLayout.newTab().setText("最近作业")); 198 binding.tabLayout.addTab(binding.tabLayout.newTab().setText("最近错题"));
195 binding.tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { 199 binding.tabLayout.addTab(binding.tabLayout.newTab().setText("最近作业"));
196 @Override 200 binding.tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
197 public void onTabSelected(TabLayout.Tab tab) { 201 @Override
198 if (tab.getPosition() == 0) { 202 public void onTabSelected(TabLayout.Tab tab) {
199 binding.rvMain.setAdapter(errorAdapter); 203 if (tab.getPosition() == 0) {
200 binding.rvMain.setVisibility(errorAdapter.list.isEmpty() ? View.GONE : View.VISIBLE); 204 binding.rvMain.setAdapter(errorAdapter);
201 binding.llEmpty.setVisibility(errorAdapter.list.isEmpty() ? View.VISIBLE : View.GONE); 205 binding.rvMain.setVisibility(errorAdapter.list.isEmpty() ? View.GONE : View.VISIBLE);
202 binding.tvListTitle.setText("最近错题"); 206 binding.llEmpty.setVisibility(errorAdapter.list.isEmpty() ? View.VISIBLE : View.GONE);
203 binding.tvEmpty.setText("暂无错题~"); 207 binding.tvListTitle.setText("最近错题");
204 } else { 208 binding.tvEmpty.setText("暂无错题~");
205 binding.rvMain.setAdapter(homeworkAdapter); 209 } else {
206 binding.rvMain.setVisibility(homeworkAdapter.getData().isEmpty() ? View.GONE : View.VISIBLE); 210 binding.rvMain.setAdapter(homeworkAdapter);
207 binding.llEmpty.setVisibility(homeworkAdapter.getData().isEmpty() ? View.VISIBLE : View.GONE); 211 binding.rvMain.setVisibility(homeworkAdapter.getData().isEmpty() ? View.GONE : View.VISIBLE);
208 binding.tvListTitle.setText("最近作业"); 212 binding.llEmpty.setVisibility(homeworkAdapter.getData().isEmpty() ? View.VISIBLE : View.GONE);
209 binding.tvEmpty.setText("暂无作业~"); 213 binding.tvListTitle.setText("最近作业");
210 } 214 binding.tvEmpty.setText("暂无作业~");
211 } 215 }
212 @Override 216 }
213 public void onTabUnselected(TabLayout.Tab tab) { 217 @Override
214 } 218 public void onTabUnselected(TabLayout.Tab tab) {
215 @Override 219 }
216 public void onTabReselected(TabLayout.Tab tab) { 220 @Override
217 } 221 public void onTabReselected(TabLayout.Tab tab) {
218 }); 222 }
219 } 223 });
220 224 }
221 private void takePhoto(int type) { 225
222 if (!XXPermissions.isGranted(getContext(), Permission.CAMERA, Permission.WRITE_EXTERNAL_STORAGE)) { 226 private void takePhoto(int type) {
223 XXPermissions.with(getContext()) 227 if (!XXPermissions.isGranted(getContext(), Permission.CAMERA, Permission.WRITE_EXTERNAL_STORAGE)) {
224 // 申请多个权限 228 XXPermissions.with(getContext())
225 .permission(Permission.CAMERA).request(new OnPermissionCallback() { 229 // 申请多个权限
226 @Override 230 .permission(Permission.CAMERA).request(new OnPermissionCallback() {
227 public void onGranted(List<String> permissions, boolean all) { 231 @Override
228 if (all) { 232 public void onGranted(List<String> permissions, boolean all) {
229 //开启扫码界面 233 if (all) {
230 showButtonDialog(type); 234 //开启扫码界面
231 } else { 235 showButtonDialog(type);
232 Toast.makeText(getContext(), "需要权限", Toast.LENGTH_SHORT).show(); 236 } else {
233 } 237 Toast.makeText(getContext(), "需要权限", Toast.LENGTH_SHORT).show();
234 } 238 }
235 239 }
236 @Override 240
237 public void onDenied(List<String> permissions, boolean never) { 241 @Override
238 XXPermissions.startPermissionActivity(getContext(), permissions); 242 public void onDenied(List<String> permissions, boolean never) {
239 } 243 XXPermissions.startPermissionActivity(getContext(), permissions);
240 }); 244 }
241 } else { 245 });
242 showButtonDialog(type); 246 } else {
243 } 247 showButtonDialog(type);
244 } 248 }
245 249 }
246 private void showButtonDialog(int type) { 250
247 MyButtomDialog dialog = new MyButtomDialog(getActivity(), R.style.BottomSheetDialog); 251 private void showButtonDialog(int type) {
248 View bottomView = LayoutInflater.from(getActivity()).inflate(R.layout.bottom_sheet_layout, null); 252 MyButtomDialog dialog = new MyButtomDialog(getActivity(), R.style.BottomSheetDialog);
249 dialog.setContentView(bottomView); 253 View bottomView = LayoutInflater.from(getActivity()).inflate(R.layout.bottom_sheet_layout, null);
250 bottomView.findViewById(R.id.take_photo).setOnClickListener(new View.OnClickListener() { 254 dialog.setContentView(bottomView);
251 @Override 255 bottomView.findViewById(R.id.take_photo).setOnClickListener(new View.OnClickListener() {
252 public void onClick(View view) { 256 @Override
253 dialog.dismiss(); 257 public void onClick(View view) {
254 Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 258 dialog.dismiss();
255 //确保有相机来处理Intent 259 Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
256 filePath = requireActivity().getExternalFilesDir("images").getPath() + "/" + System.currentTimeMillis() + CommonUtil.getStr() + ".jpg"; 260 //确保有相机来处理Intent
257 File photoFile = new File(filePath); 261 filePath = requireActivity().getExternalFilesDir("images").getPath() + "/" + System.currentTimeMillis() + CommonUtil.getStr() + ".jpg";
258 262 File photoFile = new File(filePath);
259 //适配Android 7.0文件权限,通过FileProvider创建一个content类型的Uri 263
260 Uri photoUri = FileProvider.getUriForFile(requireActivity(), "com.hjx.parent.fileprovider", photoFile); 264 //适配Android 7.0文件权限,通过FileProvider创建一个content类型的Uri
261 takePictureIntent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION); 265 Uri photoUri = FileProvider.getUriForFile(requireActivity(), "com.hjx.parent.fileprovider", photoFile);
262 takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoUri); 266 takePictureIntent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
263 startActivityForResult(takePictureIntent, type == 0 ? 0xA01 : 0xA02); 267 takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoUri);
264 } 268 startActivityForResult(takePictureIntent, type == 0 ? 0xA01 : 0xA02);
265 }); 269 }
266 bottomView.findViewById(R.id.choose_photo).setOnClickListener(new View.OnClickListener() { 270 });
267 @Override 271 bottomView.findViewById(R.id.choose_photo).setOnClickListener(new View.OnClickListener() {
268 public void onClick(View view) { 272 @Override
269 dialog.dismiss(); 273 public void onClick(View view) {
270 ImagePickerConfig imagePickerConfig = new ImagePickerConfig.Builder().provider(getActivity().getPackageName() + ".fileprovider").imageLoader(new GlideImageLoader()) //图片加载器 274 dialog.dismiss();
271 .iHandlerCallBack(new HandlerCallBack(type)) //图片选择器生命周期监听(直接打开摄像头时无效) 275 ImagePickerConfig imagePickerConfig = new ImagePickerConfig.Builder().provider(getActivity().getPackageName() + ".fileprovider").imageLoader(new GlideImageLoader()) //图片加载器
272 .multiSelect(true) //是否多选 276 .iHandlerCallBack(new HandlerCallBack(type)) //图片选择器生命周期监听(直接打开摄像头时无效)
273 .isShowCamera(false).isVideoPicker(false) //是否选择视频 默认false 277 .multiSelect(true) //是否多选
274 .isImagePicker(true).imagePickerType(ImagePickerEnum.PHOTO_PICKER) //选择器打开类型 278 .isShowCamera(false).isVideoPicker(false) //是否选择视频 默认false
275 .maxImageSelectable(5) //图片可选择数 279 .isImagePicker(true).imagePickerType(ImagePickerEnum.PHOTO_PICKER) //选择器打开类型
276 .maxHeight(1920) //图片最大高度 280 .maxImageSelectable(5) //图片可选择数
277 .maxWidth(1920) //图片最大宽度 281 .maxHeight(1920) //图片最大高度
278 .maxImageSize(3) //图片最大大小Mb 282 .maxWidth(1920) //图片最大宽度
279 .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(); 283 .maxImageSize(3) //图片最大大小Mb
280 ImagePickerOpen.getInstance().setImagePickerConfig(imagePickerConfig).pathList(new ArrayList<>()).open(getActivity()); 284 .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();
281 285 ImagePickerOpen.getInstance().setImagePickerConfig(imagePickerConfig).pathList(new ArrayList<>()).open(getActivity());
282 } 286
283 }); 287 }
284 bottomView.findViewById(R.id.cancel).setOnClickListener(new View.OnClickListener() { 288 });
285 @Override 289 bottomView.findViewById(R.id.cancel).setOnClickListener(new View.OnClickListener() {
286 public void onClick(View view) { 290 @Override
287 dialog.dismiss(); 291 public void onClick(View view) {
288 } 292 dialog.dismiss();
289 }); 293 }
290 dialog.show(); 294 });
291 } 295 dialog.show();
292 296 }
293 @SuppressLint("CheckResult") 297
294 protected void getHomework(String subject) { 298 @SuppressLint("CheckResult")
295 if (studentBean == null) return; 299 protected void getHomework(String subject) {
296 NetWorks.service_url.getStudentHomework(NetWorks.getHeader(), studentBean.getStuId()) 300 if (studentBean == null) return;
297 .subscribeOn(Schedulers.io()) 301 NetWorks.service_url.getStudentHomework(NetWorks.getHeader(), studentBean.getStuId())
298 .observeOn(AndroidSchedulers.mainThread()) 302 .subscribeOn(Schedulers.io())
299 .compose(RxLifecycleAndroid.bindFragment(getRxLifecycle())) 303 .observeOn(AndroidSchedulers.mainThread())
300 .map(ResponseResult::getData) 304 .compose(RxLifecycleAndroid.bindFragment(getRxLifecycle()))
301 .toObservable() 305 .map(ResponseResult::getData)
302 .concatMap(Observable::fromIterable) 306 .toObservable()
303 .filter(data -> subject.equals(data.getSubject())) 307 .concatMap(Observable::fromIterable)
304 //.filter(data -> data.getRight() == null) 308 .filter(data -> subject.equals(data.getSubject()))
305 .take(5) 309 //.filter(data -> data.getRight() == null)
306 .toList() 310 .take(5)
307 .subscribe((data, th) -> { 311 .toList()
308 if (th != null) th.printStackTrace(); 312 .subscribe((data, th) -> {
309 homeworkAdapter.setNewData(data); 313 if (th != null) th.printStackTrace();
310 if (binding.tabLayout.getSelectedTabPosition() == 1) { 314 homeworkAdapter.setNewData(data);
311 binding.rvMain.setVisibility(data == null || data.isEmpty() ? View.GONE : View.VISIBLE); 315 if (binding.tabLayout.getSelectedTabPosition() == 1) {
312 binding.llEmpty.setVisibility(data == null || data.isEmpty() ? View.VISIBLE : View.GONE); 316 binding.rvMain.setVisibility(data == null || data.isEmpty() ? View.GONE : View.VISIBLE);
313 } 317 binding.llEmpty.setVisibility(data == null || data.isEmpty() ? View.VISIBLE : View.GONE);
314 }); 318 }
315 } 319 });
316 320 }
317 private void getError(String subject) { 321
318 if (studentBean == null) { 322 private void getError(String subject) {
319 return; 323 if (studentBean == null) {
320 } 324 return;
321 Map<String, Object> map = new HashMap<>(); 325 }
322 map.put("subject", subject); 326 Map<String, Object> map = new HashMap<>();
323 map.put("stuId", studentBean.getStuId()); 327 map.put("subject", subject);
324 map.put("pageSize", 5); 328 map.put("stuId", studentBean.getStuId());
325 map.put("pageNum", 1); 329 map.put("pageSize", 5);
326 NetWorks.getError(map, new Observer<ResponseResult<PageInfo<TopicBean>>>() { 330 map.put("pageNum", 1);
327 @Override 331 NetWorks.getError(map, new Observer<ResponseResult<PageInfo<TopicBean>>>() {
328 public void onSubscribe(Disposable d) { 332 @Override
329 } 333 public void onSubscribe(Disposable d) {
330 @Override 334 }
331 public void onNext(ResponseResult<PageInfo<TopicBean>> result) { 335 @Override
332 if (result.getData() != null && result.getCode() == 200) { 336 public void onNext(ResponseResult<PageInfo<TopicBean>> result) {
333 List<TopicBean> topicBeans = result.getData().getList(); 337 if (result.getData() != null && result.getCode() == 200) {
334 errorAdapter.refresh(topicBeans); 338 List<TopicBean> topicBeans = result.getData().getList();
335 if (binding.tabLayout.getSelectedTabPosition() == 0) { 339 errorAdapter.refresh(topicBeans);
336 if (topicBeans.size() > 0) { 340 if (binding.tabLayout.getSelectedTabPosition() == 0) {
337 getBinding().rvMain.setVisibility(View.VISIBLE); 341 if (topicBeans.size() > 0) {
338 getBinding().llEmpty.setVisibility(View.GONE); 342 getBinding().rvMain.setVisibility(View.VISIBLE);
339 } else { 343 getBinding().llEmpty.setVisibility(View.GONE);
340 getBinding().rvMain.setVisibility(View.GONE); 344 } else {
341 getBinding().llEmpty.setVisibility(View.VISIBLE); 345 getBinding().rvMain.setVisibility(View.GONE);
342 } 346 getBinding().llEmpty.setVisibility(View.VISIBLE);
343 } 347 }
344 } 348 }
345 } 349 }
346 @Override 350 }
347 public void onError(Throwable e) { 351 @Override
348 e.printStackTrace(); 352 public void onError(Throwable e) {
349 } 353 e.printStackTrace();
350 @Override 354 }
351 public void onComplete() { 355 @Override
352 } 356 public void onComplete() {
353 }); 357 }
354 } 358 });
355 359 }
356 @Override 360
357 public void onResume() { 361 @Override
358 super.onResume(); 362 public void onResume() {
359 String subStr = getResources().getStringArray(R.array.filter_subject)[subject]; 363 super.onResume();
360 getError(subStr); 364 String subStr = getResources().getStringArray(R.array.filter_subject)[subject];
361 getHomework(subStr); 365 getError(subStr);
362 } 366 getHomework(subStr);
363 367 }
364 public class HandlerCallBack implements IHandlerCallBack<ImageInfo> { 368
365 int type; 369 public class HandlerCallBack implements IHandlerCallBack<ImageInfo> {
366 public HandlerCallBack(int type) { 370 int type;
367 this.type = type; 371 public HandlerCallBack(int type) {
368 } 372 this.type = type;
369 373 }
370 private String TAG = "---ImagePicker---"; 374
371 List<ImageInfo> photoList = new ArrayList<>(); 375 private String TAG = "---ImagePicker---";
372 376 List<ImageInfo> photoList = new ArrayList<>();
373 @Override 377
374 public void onStart() { 378 @Override
375 Log.i(TAG, "onStart: 开启"); 379 public void onStart() {
376 } 380 Log.i(TAG, "onStart: 开启");
377 381 }
378 @Override 382
379 public void onSuccess(List<ImageInfo> photoList) { 383 @Override
380 this.photoList = photoList; 384 public void onSuccess(List<ImageInfo> photoList) {
381 Log.i(TAG, "onSuccess: 返回数据"); 385 this.photoList = photoList;
382 } 386 Log.i(TAG, "onSuccess: 返回数据");
383 387 }
384 @Override 388
385 public void onCancel() { 389 @Override
386 Log.i(TAG, "onCancel: 取消"); 390 public void onCancel() {
387 } 391 Log.i(TAG, "onCancel: 取消");
388 392 }
389 @Override 393
390 public void onFinish(List<ImageInfo> selectImage) { 394 @Override
391 if (selectImage.size() == photoList.size()) { 395 public void onFinish(List<ImageInfo> selectImage) {
392 ArrayList<String> strings = new ArrayList<>(); 396 if (selectImage.size() == photoList.size()) {
393 Intent intent = new Intent(getActivity(), ImageActivity.class); 397 ArrayList<String> strings = new ArrayList<>();
394 for (ImageInfo imageInfo : selectImage) { 398 Intent intent = new Intent(getActivity(), ImageActivity.class);
395 strings.add(imageInfo.getPath()); 399 for (ImageInfo imageInfo : selectImage) {
396 } 400 strings.add(imageInfo.getPath());
397 intent.putStringArrayListExtra("images", strings); 401 }
398 intent.putExtra("type", type); 402 intent.putStringArrayListExtra("images", strings);
399 startActivity(intent); 403 intent.putExtra("type", type);
400 } 404 startActivity(intent);
401 } 405 }
402 406 }
403 @Override 407
404 public void onError() { 408 @Override
405 Log.i(TAG, "onError: 出错"); 409 public void onError() {
406 } 410 Log.i(TAG, "onError: 出错");
407 } 411 }
408 412 }
409 @Override 413
410 public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { 414 @Override
411 super.onActivityResult(requestCode, resultCode, data); 415 public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
412 if (resultCode != RESULT_OK) return; 416 super.onActivityResult(requestCode, resultCode, data);
413 if (requestCode == 0xA01 || requestCode == 0xA02 && !TextUtils.isEmpty(filePath)) { 417 if (resultCode != RESULT_OK) return;
414 Bitmap b = BitmapUtils.compress(BitmapFactory.decodeFile(filePath)); 418 if (requestCode == 0xA01 || requestCode == 0xA02 && !TextUtils.isEmpty(filePath)) {
415 String path = getContext().getExternalFilesDir("images").getPath() + "/" + System.currentTimeMillis() + CommonUtil.getStr() + ".jpg"; 419 Bitmap b = BitmapUtils.compress(BitmapFactory.decodeFile(filePath));
416 CommonUtil.saveBitmapToUri(b, path); 420 String path = getContext().getExternalFilesDir("images").getPath() + "/" + System.currentTimeMillis() + CommonUtil.getStr() + ".jpg";
417 ArrayList<String> strings = new ArrayList<>(); 421 CommonUtil.saveBitmapToUri(b, path);
418 Intent intent = new Intent(getContext(), ImageActivity.class); 422 ArrayList<String> strings = new ArrayList<>();
419 strings.add(path); 423 Intent intent = new Intent(getContext(), ImageActivity.class);
420 intent.putStringArrayListExtra("images", strings); 424 strings.add(path);
421 intent.putExtra("type", requestCode == 0xA01 ? 0 : 1); 425 intent.putStringArrayListExtra("images", strings);
422 startActivity(intent); 426 intent.putExtra("type", requestCode == 0xA01 ? 0 : 1);
423 } 427 startActivity(intent);
424 } 428 }
425 } 429 }
426 430 }
app/src/main/res/drawable/png_cover_chemistry.png

74.3 KB

app/src/main/res/drawable/png_cover_chinese.png

73.7 KB

app/src/main/res/drawable/png_cover_english.png

79.7 KB

app/src/main/res/drawable/png_cover_math.png

73 KB

app/src/main/res/drawable/png_cover_physics.png

71 KB

app/src/main/res/drawable/png_entry_error.png

212 KB | W: | H:

212 KB | W: | H:

  • 2-up
  • Swipe
  • Onion skin
app/src/main/res/drawable/png_entry_homework.png

209 KB | W: | H:

209 KB | W: | H:

  • 2-up
  • Swipe
  • Onion skin
app/src/main/res/drawable/png_ic_chemistry.png

17.2 KB

app/src/main/res/drawable/png_ic_chemistry_off.png

12.3 KB

app/src/main/res/drawable/png_ic_chinese.png

23.2 KB

app/src/main/res/drawable/png_ic_chinese_off.png

11.1 KB

app/src/main/res/drawable/png_ic_english.png

19 KB

app/src/main/res/drawable/png_ic_english_off.png

13.9 KB

app/src/main/res/drawable/png_ic_math.png

17.7 KB

app/src/main/res/drawable/png_ic_math_off.png

10.8 KB

app/src/main/res/drawable/png_ic_physics.png

17.1 KB

app/src/main/res/drawable/png_ic_physics_off.png

11.8 KB

app/src/main/res/drawable/state_ic_chemistry.xml
File was created 1 <?xml version="1.0" encoding="utf-8"?>
2 <selector xmlns:android="http://schemas.android.com/apk/res/android">
3 <item android:drawable="@drawable/png_ic_chemistry" android:state_activated="true"/>
4 <item android:drawable="@drawable/png_ic_chemistry_off"/>
5 </selector>
app/src/main/res/drawable/state_ic_chinese.xml
File was created 1 <?xml version="1.0" encoding="utf-8"?>
2 <selector xmlns:android="http://schemas.android.com/apk/res/android">
3 <item android:drawable="@drawable/png_ic_chinese" android:state_activated="true"/>
4 <item android:drawable="@drawable/png_ic_chinese_off" />
5 </selector>
app/src/main/res/drawable/state_ic_english.xml
File was created 1 <?xml version="1.0" encoding="utf-8"?>
2 <selector xmlns:android="http://schemas.android.com/apk/res/android">
3 <item android:drawable="@drawable/png_ic_english" android:state_activated="true"/>
4 <item android:drawable="@drawable/png_ic_english_off"/>
5 </selector>
app/src/main/res/drawable/state_ic_math.xml
File was created 1 <?xml version="1.0" encoding="utf-8"?>
2 <selector xmlns:android="http://schemas.android.com/apk/res/android">
3
4 <item android:drawable="@drawable/png_ic_math" android:state_activated="true"/>
5 <item android:drawable="@drawable/png_ic_math_off"/>
6
7 </selector>
app/src/main/res/drawable/state_ic_physics.xml
File was created 1 <?xml version="1.0" encoding="utf-8"?>
2 <selector xmlns:android="http://schemas.android.com/apk/res/android">
3 <item android:drawable="@drawable/png_ic_physics" android:state_activated="true"/>
4 <item android:drawable="@drawable/png_ic_physics_off"/>
5 </selector>
app/src/main/res/layout/fragment_error_book.xml
1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
2 xmlns:tools="http://schemas.android.com/tools" 2 xmlns:tools="http://schemas.android.com/tools"
3 android:layout_width="match_parent" 3 android:layout_width="match_parent"
4 android:layout_height="match_parent" 4 android:layout_height="match_parent"
5 xmlns:app="http://schemas.android.com/apk/res-auto" 5 xmlns:app="http://schemas.android.com/apk/res-auto"
6 android:orientation="vertical" 6 android:orientation="vertical"
7 tools:ignore="HardcodedText,ContentDescription,UseCompoundDrawables"> 7 tools:ignore="HardcodedText,ContentDescription,UseCompoundDrawables">
8 8
9 <RelativeLayout 9 <RelativeLayout
10 android:layout_width="match_parent" 10 android:layout_width="match_parent"
11 android:layout_height="40dp" 11 android:layout_height="40dp"
12 android:layout_marginTop="30dp"> 12 android:layout_marginTop="30dp">
13 13
14 <ImageView 14 <ImageView
15 android:id="@+id/iv_student" 15 android:id="@+id/iv_student"
16 android:layout_width="35dp" 16 android:layout_width="35dp"
17 android:layout_height="35dp" 17 android:layout_height="35dp"
18 android:layout_centerVertical="true" 18 android:layout_centerVertical="true"
19 android:layout_marginStart="15dp" /> 19 android:layout_marginStart="15dp" />
20 20
21 <TextView 21 <TextView
22 android:id="@+id/tv_name" 22 android:id="@+id/tv_name"
23 android:layout_width="wrap_content" 23 android:layout_width="wrap_content"
24 android:layout_height="wrap_content" 24 android:layout_height="wrap_content"
25 android:layout_centerVertical="true" 25 android:layout_centerVertical="true"
26 android:layout_marginStart="10dp" 26 android:layout_marginStart="10dp"
27 android:layout_toEndOf="@+id/iv_student" 27 android:layout_toEndOf="@+id/iv_student"
28 android:textColor="#333333" 28 android:textColor="#333333"
29 android:textSize="16sp" 29 android:textSize="16sp"
30 tools:ignore="RelativeOverlap" /> 30 tools:ignore="RelativeOverlap" />
31 31
32 <androidx.appcompat.widget.AppCompatTextView 32 <androidx.appcompat.widget.AppCompatTextView
33 android:id="@+id/tv_choose" 33 android:id="@+id/tv_choose"
34 android:layout_width="wrap_content" 34 android:layout_width="wrap_content"
35 android:layout_height="wrap_content" 35 android:layout_height="wrap_content"
36 android:layout_alignParentEnd="true" 36 android:layout_alignParentEnd="true"
37 android:layout_centerVertical="true" 37 android:layout_centerVertical="true"
38 android:layout_marginEnd="15dp" 38 android:layout_marginEnd="15dp"
39 android:drawableEnd="@drawable/ic_filter_black" 39 android:drawableEnd="@drawable/ic_filter_black"
40 android:drawablePadding="5dp" 40 android:drawablePadding="5dp"
41 android:text="选择学生" 41 android:text="选择学生"
42 android:textColor="#333333" 42 android:textColor="#333333"
43 android:textSize="14sp" /> 43 android:textSize="14sp" />
44 44
45 </RelativeLayout> 45 </RelativeLayout>
46 46
47 <LinearLayout 47 <LinearLayout
48 android:orientation="horizontal" 48 android:orientation="horizontal"
49 android:weightSum="2" 49 android:weightSum="2"
50 android:layout_width="match_parent" 50 android:layout_width="match_parent"
51 android:layout_height="wrap_content" 51 android:layout_height="wrap_content"
52 android:baselineAligned="false"> 52 android:baselineAligned="false">
53 <FrameLayout 53 <FrameLayout
54 android:id="@+id/rl_take_photo" 54 android:id="@+id/rl_take_photo"
55 android:layout_width="0dp" 55 android:layout_width="0dp"
56 android:layout_weight="1" 56 android:layout_weight="1"
57 android:layout_height="wrap_content"> 57 android:layout_height="wrap_content">
58 <ImageView 58 <ImageView
59 android:src="@drawable/png_entry_error" 59 android:src="@drawable/png_entry_error"
60 android:adjustViewBounds="true" 60 android:adjustViewBounds="true"
61 android:layout_width="match_parent" 61 android:layout_width="match_parent"
62 android:layout_height="wrap_content"/> 62 android:layout_height="wrap_content"/>
63 </FrameLayout>
64
65 <FrameLayout
66 android:id="@+id/flEntryHomework"
67 android:layout_width="0dp"
68 android:layout_weight="1"
69 android:layout_height="wrap_content">
70 <ImageView
71 android:src="@drawable/png_entry_homework"
72 android:adjustViewBounds="true"
73 android:layout_width="match_parent" 63 </FrameLayout>
74 android:layout_height="wrap_content"/> 64
75 65 <FrameLayout
76 </FrameLayout> 66 android:id="@+id/flEntryHomework"
77 </LinearLayout> 67 android:layout_width="0dp"
78 68 android:layout_weight="1"
79 <LinearLayout 69 android:layout_height="wrap_content">
80 android:orientation="vertical" 70 <ImageView
81 android:background="@drawable/shape_radius_10" 71 android:src="@drawable/png_entry_homework"
82 android:backgroundTint="@color/white" 72 android:adjustViewBounds="true"
83 android:layout_marginHorizontal="15dp" 73 android:layout_width="match_parent"
84 android:layout_marginTop="10dp" 74 android:layout_height="wrap_content"/>
85 android:layout_marginBottom="15dp" 75
86 android:layout_width="match_parent"
87 android:layout_height="match_parent">
88
89 <com.google.android.material.tabs.TabLayout
90 android:id="@+id/tabLayout"
91 app:tabMode="fixed"
92 app:tabGravity="fill"
93 app:tabIndicatorFullWidth="false"
94 app:tabIndicatorColor="#1C90F3"
95 app:tabTextColor="#333" 76 </FrameLayout>
96 app:tabSelectedTextColor="#1C90F3" 77 </LinearLayout>
97 app:tabTextAppearance="@style/tab_home_item" 78
98 app:tabRippleColor="@color/transparent" 79 <LinearLayout
99 android:background="@drawable/bg_tab_home" 80 android:orientation="vertical"
100 app:tabIndicatorHeight="2dp" 81 android:background="@drawable/shape_radius_10"
101 android:paddingVertical="8dp" 82 android:backgroundTint="@color/white"
102 android:layout_width="match_parent" 83 android:layout_marginHorizontal="15dp"
103 android:layout_height="48dp"/> 84 android:layout_marginTop="10dp"
104 85 android:layout_marginBottom="15dp"
105 <androidx.core.widget.NestedScrollView 86 android:layout_width="match_parent"
106 android:layout_width="match_parent" 87 android:layout_height="match_parent">
107 android:layout_height="match_parent"> 88
108 <LinearLayout 89 <com.google.android.material.tabs.TabLayout
109 android:orientation="vertical" 90 android:id="@+id/tabLayout"
110 android:layout_width="match_parent" 91 app:tabMode="fixed"
111 android:layout_height="wrap_content"> 92 app:tabGravity="fill"
112 93 app:tabIndicatorFullWidth="false"
113 <androidx.recyclerview.widget.RecyclerView 94 app:tabIndicatorColor="#1C90F3"
114 android:id="@+id/rvSubject" 95 app:tabTextColor="#333"
115 android:orientation="horizontal" 96 app:tabSelectedTextColor="#1C90F3"
116 app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" 97 app:tabTextAppearance="@style/tab_home_item"
117 android:layout_marginTop="15dp" 98 app:tabRippleColor="@color/transparent"
118 android:layout_width="match_parent" 99 android:background="@drawable/bg_tab_home"
119 android:layout_height="wrap_content" /> 100 app:tabIndicatorHeight="2dp"
120 101 android:paddingVertical="8dp"
121 <LinearLayout
122 android:layout_marginTop="16dp"
123 android:layout_marginHorizontal="10dp"
124 android:layout_width="match_parent"
125 android:layout_height="25dp">
126 <TextView
127 android:id="@+id/tvListTitle"
128 android:layout_width="wrap_content" 102 android:layout_width="match_parent"
129 android:layout_height="wrap_content" 103 android:layout_height="48dp"/>
130 android:text="最近错题" 104
131 android:textColor="#333333" 105 <androidx.core.widget.NestedScrollView
132 android:textSize="16sp"
133 android:textStyle="bold" />
134 106 android:layout_width="match_parent"
135 <Space style="@style/empty_space"/> 107 android:layout_height="match_parent">
136
137 <LinearLayout
138 android:id="@+id/ll_all"
139 android:layout_width="wrap_content"
140 android:layout_height="wrap_content"
141 android:layout_gravity="center_vertical">
142
143 <TextView
144 android:layout_width="wrap_content"
145 android:layout_height="wrap_content"
146 android:layout_gravity="center_vertical"
147 android:text="查看全部" 108 <LinearLayout
148 android:textColor="#666666" 109 android:orientation="vertical"
149 android:textSize="12sp" /> 110 android:layout_width="match_parent"
150 111 android:layout_height="wrap_content">
151 <ImageView 112
113 <androidx.recyclerview.widget.RecyclerView
114 android:id="@+id/rvSubject"
115 android:orientation="horizontal"
116 app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
117 android:layout_marginTop="15dp"
118 android:layout_width="match_parent"
119 android:layout_height="wrap_content" />
120
121 <LinearLayout
122 android:layout_marginTop="16dp"
123 android:layout_marginHorizontal="10dp"
124 android:layout_width="match_parent"
125 android:layout_height="25dp">
126 <TextView
127 android:id="@+id/tvListTitle"
128 android:layout_width="wrap_content"
129 android:layout_height="wrap_content"
130 android:text="最近错题"
131 android:textColor="#333333"
132 android:textSize="16sp"
133 android:textStyle="bold" />
134
135 <Space style="@style/empty_space"/>
136
137 <LinearLayout
138 android:id="@+id/ll_all"
139 android:layout_width="wrap_content"
140 android:layout_height="wrap_content"
141 android:layout_gravity="center_vertical">
142
143 <TextView
144 android:layout_width="wrap_content"
145 android:layout_height="wrap_content"
146 android:layout_gravity="center_vertical"
147 android:text="查看全部"
148 android:textColor="#666666"
149 android:textSize="12sp" />
150
151 <ImageView
152 android:layout_width="9dp"
153 android:layout_height="10dp"
154 android:layout_gravity="center_vertical"
app/src/main/res/layout/item_homework.xml
1 <?xml version="1.0" encoding="utf-8"?> 1 <?xml version="1.0" encoding="utf-8"?>
2 <LinearLayout 2 <LinearLayout
3 xmlns:android="http://schemas.android.com/apk/res/android" 3 xmlns:android="http://schemas.android.com/apk/res/android"
4 xmlns:app="http://schemas.android.com/apk/res-auto" 4 xmlns:app="http://schemas.android.com/apk/res-auto"
5 xmlns:tools="http://schemas.android.com/tools" 5 xmlns:tools="http://schemas.android.com/tools"
6 android:orientation="vertical" 6 android:orientation="vertical"
7 android:paddingHorizontal="10dp" 7 android:paddingHorizontal="10dp"
8 android:layout_marginVertical="8dp" 8 android:layout_marginVertical="8dp"
9 android:layout_width="match_parent" 9 android:layout_width="match_parent"
10 android:layout_height="wrap_content" 10 android:layout_height="wrap_content"
11 tools:ignore="SmallSp"> 11 tools:ignore="SmallSp">
12 12
13 <TextView 13 <TextView
14 android:id="@+id/tvDate" 14 android:id="@+id/tvDate"
15 android:visibility="gone" 15 android:visibility="gone"
16 tools:visibility="visible" 16 tools:visibility="visible"
17 tools:text="2024-09-25" 17 tools:text="2024-09-25"
18 android:textSize="12sp" 18 android:textSize="12sp"
19 android:textColor="#999" 19 android:textColor="#999"
20 android:layout_marginBottom="15dp" 20 android:layout_marginBottom="15dp"
21 android:layout_width="wrap_content" 21 android:layout_width="wrap_content"
22 android:layout_height="wrap_content"/> 22 android:layout_height="wrap_content"/>
23 23
24 <LinearLayout 24 <LinearLayout
25 android:orientation="horizontal" 25 android:orientation="horizontal"
26 android:gravity="center_vertical" 26 android:gravity="center_vertical"
27 android:background="@drawable/bg_homework" 27 android:background="@drawable/bg_homework"
28 android:layout_width="match_parent" 28 android:layout_width="match_parent"
29 android:layout_height="75dp"> 29 android:layout_height="75dp">
30 <ImageView 30 <ImageView
31 android:id="@+id/ivSubject" 31 android:id="@+id/ivSubject"
32 tools:src="@drawable/png_cover_math" 32 tools:src="@drawable/png_cover_math"
33 android:layout_marginStart="10dp" 33 android:layout_marginStart="10dp"
34 android:layout_width="44dp" 34 android:layout_width="44dp"
35 android:layout_height="56dp" 35 android:layout_height="56dp"
36 android:importantForAccessibility="no" /> 36 android:importantForAccessibility="no" />
37 <LinearLayout 37 <LinearLayout
38 android:orientation="vertical" 38 android:orientation="vertical"
39 android:layout_marginStart="14dp" 39 android:layout_marginStart="14dp"
40 android:layout_marginVertical="16dp" 40 android:layout_marginVertical="16dp"
41 android:layout_width="wrap_content" 41 android:layout_width="wrap_content"
42 android:layout_height="match_parent"> 42 android:layout_height="match_parent">
43 <TextView 43 <TextView
44 android:id="@+id/tvName" 44 android:id="@+id/tvName"
45 tools:text="作业名称作业名称作业名称作业名称作业名称" 45 tools:text="作业名称作业名称作业名称作业名称作业名称"
46 android:singleLine="true" 46 android:singleLine="true"
47 android:maxEms="12" 47 android:maxEms="12"
48 android:textSize="13sp" 48 android:textSize="13sp"
49 android:textColor="#333" 49 android:textColor="#333"
50 android:layout_width="wrap_content" 50 android:layout_width="wrap_content"
51 android:layout_height="wrap_content"/> 51 android:layout_height="wrap_content"/>
52 <Space style="@style/empty_space"/> 52 <Space style="@style/empty_space"/>
53 <TextView 53 <TextView
54 android:id="@+id/tvGrade" 54 android:id="@+id/tvGrade"
55 tools:text="七年级-上学期" 55 tools:text="七年级-上学期"
56 android:textSize="10sp" 56 android:textSize="10sp"
57 android:textColor="#666" 57 android:textColor="#666"
58 android:layout_width="wrap_content" 58 android:layout_width="wrap_content"
59 android:layout_height="wrap_content" /> 59 android:layout_height="wrap_content" />
60 </LinearLayout> 60 </LinearLayout>
61 <Space style="@style/empty_space"/> 61 <Space style="@style/empty_space"/>
62 <TextView 62 <TextView
63 android:text=">" 63 android:text=">"
64 android:textSize="20sp" 64 android:textSize="20sp"
65 android:textColor="#333" 65 android:textColor="#333"
66 android:layout_marginEnd="10dp" 66 android:layout_marginEnd="10dp"
67 android:layout_width="wrap_content" 67 android:layout_width="wrap_content"
68 android:layout_height="wrap_content" 68 android:layout_height="wrap_content"
69 tools:ignore="HardcodedText" /> 69 tools:ignore="HardcodedText" />
70 </LinearLayout> 70 </LinearLayout>
71 71
72 </LinearLayout> 72 </LinearLayout>
app/src/main/res/layout/item_homework_list.xml
1 <?xml version="1.0" encoding="utf-8"?> 1 <?xml version="1.0" encoding="utf-8"?>
2 <LinearLayout 2 <LinearLayout
3 xmlns:android="http://schemas.android.com/apk/res/android" 3 xmlns:android="http://schemas.android.com/apk/res/android"
4 xmlns:app="http://schemas.android.com/apk/res-auto" 4 xmlns:app="http://schemas.android.com/apk/res-auto"
5 xmlns:tools="http://schemas.android.com/tools" 5 xmlns:tools="http://schemas.android.com/tools"
6 android:orientation="vertical" 6 android:orientation="vertical"
7 android:paddingHorizontal="10dp" 7 android:paddingHorizontal="10dp"
8 android:layout_marginVertical="8dp" 8 android:layout_marginVertical="8dp"
9 android:layout_width="match_parent" 9 android:layout_width="match_parent"
10 android:layout_height="wrap_content" 10 android:layout_height="wrap_content"
11 tools:ignore="SmallSp,HardcodedText"> 11 tools:ignore="SmallSp,HardcodedText">
12 12
13 <TextView 13 <TextView
14 android:id="@+id/tvDate" 14 android:id="@+id/tvDate"
15 android:visibility="gone" 15 android:visibility="gone"
16 tools:visibility="visible" 16 tools:visibility="visible"
17 tools:text="2024-09-25" 17 tools:text="2024-09-25"
18 android:textSize="14sp" 18 android:textSize="14sp"
19 android:textColor="#999" 19 android:textColor="#999"
20 android:layout_marginBottom="12dp" 20 android:layout_marginBottom="12dp"
21 android:layout_width="wrap_content" 21 android:layout_width="wrap_content"
22 android:layout_height="wrap_content"/> 22 android:layout_height="wrap_content"/>
23 23
24 <FrameLayout 24 <FrameLayout
25 android:background="@drawable/shape_radius_10" 25 android:background="@drawable/shape_radius_10"
26 android:backgroundTint="@color/white" 26 android:backgroundTint="@color/white"
27 android:layout_width="match_parent" 27 android:layout_width="match_parent"
28 android:layout_height="80dp"> 28 android:layout_height="80dp">
29 <LinearLayout 29 <LinearLayout
30 android:orientation="horizontal" 30 android:orientation="horizontal"
31 android:gravity="center_vertical" 31 android:gravity="center_vertical"
32 android:layout_width="match_parent" 32 android:layout_width="match_parent"
33 android:layout_height="match_parent"> 33 android:layout_height="match_parent">
34 <ImageView 34 <ImageView
35 android:id="@+id/ivSubject" 35 android:id="@+id/ivSubject"
36 tools:src="@drawable/png_cover_math" 36 tools:src="@drawable/png_cover_math"
37 android:layout_marginStart="10dp" 37 android:layout_marginStart="10dp"
38 android:layout_width="50dp" 38 android:layout_width="50dp"
39 android:layout_height="64dp" 39 android:layout_height="64dp"
40 android:importantForAccessibility="no" /> 40 android:importantForAccessibility="no" />
41 <LinearLayout 41 <LinearLayout
42 android:orientation="vertical" 42 android:orientation="vertical"
43 android:layout_marginStart="14dp" 43 android:layout_marginStart="14dp"
44 android:layout_marginEnd="10dp" 44 android:layout_marginEnd="10dp"
45 android:layout_marginVertical="12dp" 45 android:layout_marginVertical="12dp"
46 android:layout_width="match_parent" 46 android:layout_width="match_parent"
47 android:layout_height="match_parent"> 47 android:layout_height="match_parent">
48 <TextView 48 <TextView
49 android:id="@+id/tvName" 49 android:id="@+id/tvName"
50 tools:text="作业名称作业名称作业名称作业名称作业名称作业名称作业名称" 50 tools:text="作业名称作业名称作业名称作业名称作业名称作业名称作业名称"
51 android:textSize="14sp" 51 android:textSize="14sp"
52 android:textColor="#333" 52 android:textColor="#333"
53 android:singleLine="true" 53 android:singleLine="true"
54 android:maxEms="12" 54 android:maxEms="12"
55 android:ellipsize="end" 55 android:ellipsize="end"
56 android:layout_width="wrap_content" 56 android:layout_width="wrap_content"
57 android:layout_height="wrap_content"/> 57 android:layout_height="wrap_content"/>
58 <Space style="@style/empty_space"/> 58 <Space style="@style/empty_space"/>
59 <LinearLayout 59 <LinearLayout
60 android:orientation="horizontal" 60 android:orientation="horizontal"
61 android:gravity="center_vertical" 61 android:gravity="center_vertical"
62 android:layout_width="match_parent" 62 android:layout_width="match_parent"
63 android:layout_height="wrap_content"> 63 android:layout_height="wrap_content">
64 <TextView 64 <TextView
65 android:id="@+id/tvGrade" 65 android:id="@+id/tvGrade"
66 tools:text="七年级-上学期" 66 tools:text="七年级-上学期"
67 android:textSize="12sp" 67 android:textSize="12sp"
68 android:textColor="#666" 68 android:textColor="#666"
69 android:layout_width="wrap_content" 69 android:layout_width="wrap_content"
70 android:layout_height="wrap_content" /> 70 android:layout_height="wrap_content" />
71 <Space style="@style/empty_space"/> 71 <Space style="@style/empty_space"/>
72 <androidx.appcompat.widget.AppCompatTextView 72 <androidx.appcompat.widget.AppCompatTextView
73 android:id="@+id/btnDelete" 73 android:id="@+id/btnDelete"
74 android:text="删除" 74 android:text="删除"
75 android:textSize="12sp" 75 android:textSize="12sp"
76 android:textColor="#666" 76 android:textColor="#666"
77 android:gravity="center_vertical" 77 android:gravity="center_vertical"
78 android:drawableStart="@drawable/svg_delete" 78 android:drawableStart="@drawable/svg_delete"
79 android:drawableTint="#C5C5C5" 79 android:drawableTint="#C5C5C5"
80 android:drawablePadding="2dp" 80 android:drawablePadding="2dp"
81 android:layout_width="wrap_content" 81 android:layout_width="wrap_content"
82 android:layout_height="wrap_content"/> 82 android:layout_height="wrap_content"/>
83 <View 83 <View
84 android:background="#F5F5F5" 84 android:background="#F5F5F5"
85 android:layout_marginHorizontal="15dp" 85 android:layout_marginHorizontal="15dp"
86 android:layout_width="1dp" 86 android:layout_width="1dp"
87 android:layout_height="10dp"/> 87 android:layout_height="10dp"/>
88 <androidx.appcompat.widget.AppCompatTextView 88 <androidx.appcompat.widget.AppCompatTextView
89 android:id="@+id/btnDetail" 89 android:id="@+id/btnDetail"
90 android:text="详情" 90 android:text="详情"
91 android:textSize="12sp" 91 android:textSize="12sp"
92 android:textColor="#666" 92 android:textColor="#666"
93 android:gravity="center_vertical" 93 android:gravity="center_vertical"
94 android:drawableStart="@drawable/svg_go_detail" 94 android:drawableStart="@drawable/svg_go_detail"
95 android:drawablePadding="5dp" 95 android:drawablePadding="5dp"
96 android:layout_width="wrap_content" 96 android:layout_width="wrap_content"
97 android:layout_height="wrap_content"/> 97 android:layout_height="wrap_content"/>
98 </LinearLayout> 98 </LinearLayout>
99 </LinearLayout> 99 </LinearLayout>
100 </LinearLayout> 100 </LinearLayout>
101 <TextView 101 <TextView
102 android:id="@+id/tvFlag" 102 android:id="@+id/tvFlag"
103 android:text="已反馈" 103 android:text="已反馈"
104 android:textSize="11sp" 104 android:textSize="11sp"
105 android:textColor="@color/white" 105 android:textColor="@color/white"
106 android:background="@drawable/bg_homework_feedback_flag" 106 android:background="@drawable/bg_homework_feedback_flag"
107 android:layout_gravity="end" 107 android:layout_gravity="end"
108 android:paddingHorizontal="7dp" 108 android:paddingHorizontal="7dp"
109 android:paddingVertical="2dp" 109 android:paddingVertical="2dp"
110 android:layout_width="wrap_content" 110 android:layout_width="wrap_content"
111 android:layout_height="wrap_content" /> 111 android:layout_height="wrap_content" />
112 </FrameLayout> 112 </FrameLayout>
113 113
114 </LinearLayout> 114 </LinearLayout>