Compare View
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
app/src/main/res/drawable/png_entry_homework.png
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> |