Commit a83bcd8af8d5a99e3b1bd8b064ef2a48a229053d

Authored by shixianjie
1 parent e253e5291b
Exists in master

切图去字迹时避免重复触发

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.TipDialog; 29 import com.hjx.parent.dialog.TipDialog;
30 import com.hjx.parent.rx.BaseRxActivity; 30 import com.hjx.parent.rx.BaseRxActivity;
31 import com.prws.common.bean.CutPicBean; 31 import com.prws.common.bean.CutPicBean;
32 import com.prws.common.bean.ImageBean; 32 import com.prws.common.bean.ImageBean;
33 import com.prws.common.bean.TopicBean; 33 import com.prws.common.bean.TopicBean;
34 import com.prws.common.net.NetWorks; 34 import com.prws.common.net.NetWorks;
35 import com.prws.common.utils.BitmapUtils; 35 import com.prws.common.utils.BitmapUtils;
36 import com.prws.common.utils.CommonUtil; 36 import com.prws.common.utils.CommonUtil;
37 import com.xiasuhuei321.loadingdialog.view.LoadingDialog; 37 import com.xiasuhuei321.loadingdialog.view.LoadingDialog;
38 38
39 import java.io.File; 39 import java.io.File;
40 import java.util.ArrayList; 40 import java.util.ArrayList;
41 import java.util.List; 41 import java.util.List;
42 42
43 import io.reactivex.Observer; 43 import io.reactivex.Observer;
44 import io.reactivex.disposables.Disposable; 44 import io.reactivex.disposables.Disposable;
45 import retrofit2.Call; 45 import retrofit2.Call;
46 import retrofit2.Callback; 46 import retrofit2.Callback;
47 import retrofit2.Response; 47 import retrofit2.Response;
48 48
49 public class ImageActivity extends BaseRxActivity<ActivityImageBinding> implements View.OnClickListener { 49 public class ImageActivity extends BaseRxActivity<ActivityImageBinding> implements View.OnClickListener {
50 50
51 private List<String> images = new ArrayList<>(); 51 private List<String> images = new ArrayList<>();
52 private ImageAdapter imageAdapter; 52 private ImageAdapter imageAdapter;
53 private List<ImageBean> list = new ArrayList<>(); 53 private List<ImageBean> list = new ArrayList<>();
54 private String filePath; 54 private String filePath;
55 55
56 private int type = 0; 56 private int type = 0;
57 private AddHomeworkDialog addHomeworkDialog; 57 private AddHomeworkDialog addHomeworkDialog;
58 58
59 @Override 59 @Override
60 public void initView(Bundle savedInstanceState) { 60 public void initView(Bundle savedInstanceState) {
61 type = getIntent().getIntExtra("type", 0); 61 type = getIntent().getIntExtra("type", 0);
62 binding.tvSave.setText(type == 0 ? "保存错题" : "录入题目"); 62 binding.tvSave.setText(type == 0 ? "保存错题" : "录入题目");
63 63
64 images = getIntent().getStringArrayListExtra("images"); 64 images = getIntent().getStringArrayListExtra("images");
65 for (String s : images) { 65 for (String s : images) {
66 String filepath = context.getExternalFilesDir("images").getPath() + "/" + System.currentTimeMillis() + CommonUtil.getStr() + ".jpg"; 66 String filepath = context.getExternalFilesDir("images").getPath() + "/" + System.currentTimeMillis() + CommonUtil.getStr() + ".jpg";
67 ImageBean imageBean = new ImageBean(); 67 ImageBean imageBean = new ImageBean();
68 Bitmap bitmap = BitmapUtils.getimage(s); 68 Bitmap bitmap = BitmapUtils.getimage(s);
69 CommonUtil.saveBitmapToUri(bitmap, filepath); 69 CommonUtil.saveBitmapToUri(bitmap, filepath);
70 imageBean.setPath(filepath); 70 imageBean.setPath(filepath);
71 list.add(imageBean); 71 list.add(imageBean);
72 } 72 }
73 imageAdapter = new ImageAdapter(this, list); 73 imageAdapter = new ImageAdapter(this, list);
74 binding.viewPager.setAdapter(imageAdapter); 74 binding.viewPager.setAdapter(imageAdapter);
75 binding.viewPager.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() { 75 binding.viewPager.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
76 @Override 76 @Override
77 public void onPageSelected(int position) { 77 public void onPageSelected(int position) {
78 if (list.get(position).getCuts() == null) { 78 if (list.get(position).getCuts() == null) {
79 // binding.ivPrevious.setEnabled(false); 79 // binding.ivPrevious.setEnabled(false);
80 // binding.ivNext.setEnabled(false); 80 // binding.ivNext.setEnabled(false);
81 clearText(); 81 clearText();
82 } 82 }
83 binding.tvTitle.setText((binding.viewPager.getCurrentItem() + 1) + "/" + list.size()); 83 binding.tvTitle.setText((binding.viewPager.getCurrentItem() + 1) + "/" + list.size());
84 if (position == 0) { 84 if (position == 0) {
85 binding.ivPrevious.setImageResource(R.mipmap.ic_previous_gray); 85 binding.ivPrevious.setImageResource(R.mipmap.ic_previous_gray);
86 // binding.ivPrevious.setEnabled(true); 86 // binding.ivPrevious.setEnabled(true);
87 } else { 87 } else {
88 binding.ivPrevious.setImageResource(R.mipmap.ic_previous); 88 binding.ivPrevious.setImageResource(R.mipmap.ic_previous);
89 // binding.ivPrevious.setEnabled(false); 89 // binding.ivPrevious.setEnabled(false);
90 } 90 }
91 if (position == list.size() - 1) { 91 if (position == list.size() - 1) {
92 binding.ivNext.setImageResource(R.mipmap.ic_next_gray); 92 binding.ivNext.setImageResource(R.mipmap.ic_next_gray);
93 // binding.ivNext.setEnabled(true); 93 // binding.ivNext.setEnabled(true);
94 } else { 94 } else {
95 binding.ivNext.setImageResource(R.mipmap.ic_next); 95 binding.ivNext.setImageResource(R.mipmap.ic_next);
96 // binding.ivNext.setEnabled(false); 96 // binding.ivNext.setEnabled(false);
97 } 97 }
98 super.onPageSelected(position); 98 super.onPageSelected(position);
99 } 99 }
100 }); 100 });
101 binding.ivNext.setOnClickListener(this); 101 binding.ivNext.setOnClickListener(this);
102 binding.ivPrevious.setOnClickListener(this); 102 binding.ivPrevious.setOnClickListener(this);
103 binding.ivBack.setOnClickListener(this); 103 binding.ivBack.setOnClickListener(this);
104 binding.tvPhoto.setOnClickListener(this); 104 binding.tvPhoto.setOnClickListener(this);
105 binding.tvAdd.setOnClickListener(this); 105 binding.tvAdd.setOnClickListener(this);
106 binding.llEdit.setOnClickListener(this); 106 binding.llEdit.setOnClickListener(this);
107 binding.tvSave.setOnClickListener(this); 107 binding.tvSave.setOnClickListener(this);
108 } 108 }
109 109
110 public void clearText() { 110 public void clearText() {
111 int index = binding.viewPager.getCurrentItem(); 111 int index = binding.viewPager.getCurrentItem();
112 showLoadingDialog(getString(R.string.loading_text), new LoadingDialog.DismissListener() { 112 showLoadingDialog(getString(R.string.loading_text), new LoadingDialog.DismissListener() {
113 @Override 113 @Override
114 public void dimiss() { 114 public void dimiss() {
115 // binding.ivPrevious.setEnabled(index != 0); 115 // binding.ivPrevious.setEnabled(index != 0);
116 // binding.ivNext.setEnabled(index != list.size() - 1); 116 // binding.ivNext.setEnabled(index != list.size() - 1);
117 } 117 }
118 }); 118 });
119 Log.i("clearText", list.get(index).getPath()); 119 Log.i("clearText", list.get(index).getPath());
120 String base64 = BitmapUtils.imageToBase64(list.get(index).getPath()); 120 String base64 = BitmapUtils.imageToBase64(list.get(index).getPath());
121 NetWorks.removeWriting(base64, new Observer<JsonObject>() { 121 NetWorks.removeWriting(base64, new Observer<JsonObject>() {
122 @Override 122 @Override
123 public void onSubscribe(Disposable d) { 123 public void onSubscribe(Disposable d) {
124 124
125 } 125 }
126 126
127 @Override 127 @Override
128 public void onNext(JsonObject jsonObject) { 128 public void onNext(JsonObject jsonObject) {
129 if (jsonObject != null && jsonObject.get("image_processed") != null) { 129 if (jsonObject != null && jsonObject.get("image_processed") != null) {
130 String image = jsonObject.get("image_processed").getAsString(); 130 String image = jsonObject.get("image_processed").getAsString();
131 if (image != null) { 131 if (image != null) {
132 String filepath = context.getExternalFilesDir("images").getPath() + "/" + String.valueOf(System.currentTimeMillis()) + CommonUtil.getStr() + ".jpg"; 132 String filepath = context.getExternalFilesDir("images").getPath() + "/" + String.valueOf(System.currentTimeMillis()) + CommonUtil.getStr() + ".jpg";
133 CommonUtil.saveBitmapToUri(BitmapUtils.stringToBitmap(image), filepath); 133 CommonUtil.saveBitmapToUri(BitmapUtils.stringToBitmap(image), filepath);
134 list.get(index).setPath(filepath); 134 list.get(index).setPath(filepath);
135 if (list.get(index).getCuts() == null) {
136 list.get(index).setCuts(new ArrayList<>());
137 }
135 imageAdapter.notifyItemChanged(index); 138 imageAdapter.notifyItemChanged(index);
136 cut(filepath); 139 cut(filepath);
137 } else { 140 } else {
138 loadFail("去除字迹失败"); 141 loadFail("去除字迹失败");
139 } 142 }
140 } else { 143 } else {
141 loadFail("去除字迹失败"); 144 loadFail("去除字迹失败");
142 } 145 }
143 } 146 }
144 147
145 @Override 148 @Override
146 public void onError(Throwable e) { 149 public void onError(Throwable e) {
147 loadFail("去除字迹失败"); 150 loadFail("去除字迹失败");
148 } 151 }
149 152
150 @Override 153 @Override
151 public void onComplete() { 154 public void onComplete() {
152 155
153 } 156 }
154 }); 157 });
155 } 158 }
156 159
157 public void cut(String path) { 160 public void cut(String path) {
158 String base64 = BitmapUtils.imageToBase64(path); 161 String base64 = BitmapUtils.imageToBase64(path);
159 Log.i("figLoaction", path); 162 Log.i("figLoaction", path);
160 NetWorks.cut(base64, new Observer<CutPicBean>() { 163 NetWorks.cut(base64, new Observer<CutPicBean>() {
161 @Override 164 @Override
162 public void onSubscribe(Disposable d) { 165 public void onSubscribe(Disposable d) {
163 166
164 } 167 }
165 168
166 @Override 169 @Override
167 public void onNext(CutPicBean cutPicBean) { 170 public void onNext(CutPicBean cutPicBean) {
168 if (cutPicBean != null) { 171 if (cutPicBean != null) {
169 if (cutPicBean.getDirection() != 0) { 172 if (cutPicBean.getDirection() != 0) {
170 rotatingImage(cutPicBean); 173 rotatingImage(cutPicBean);
171 } else { 174 } else {
172 if (cutPicBean.getQus_figure() != null && cutPicBean.getQus_figure().size() > 0) { 175 if (cutPicBean.getQus_figure() != null && cutPicBean.getQus_figure().size() > 0) {
173 List<CutPicBean.FigLoaction> figLoactions = new ArrayList<>(); 176 List<CutPicBean.FigLoaction> figLoactions = new ArrayList<>();
174 for (CutPicBean.CutLocation cutLocation : cutPicBean.getQus_figure()) { 177 for (CutPicBean.CutLocation cutLocation : cutPicBean.getQus_figure()) {
175 figLoactions.add(cutLocation.getFig_location()); 178 figLoactions.add(cutLocation.getFig_location());
176 } 179 }
177 new Handler().postDelayed(new Runnable() { 180 new Handler().postDelayed(new Runnable() {
178 @Override 181 @Override
179 public void run() { 182 public void run() {
180 getRects(figLoactions); 183 getRects(figLoactions);
181 } 184 }
182 }, 1000); 185 }, 1000);
183 } else { 186 } else {
184 cancelLoadingDialog(); 187 cancelLoadingDialog();
185 } 188 }
186 } 189 }
187 } else { 190 } else {
188 loadFail("自动切题失败"); 191 loadFail("自动切题失败");
189 } 192 }
190 } 193 }
191 194
192 @Override 195 @Override
193 public void onError(Throwable e) { 196 public void onError(Throwable e) {
194 loadFail("自动切题失败"); 197 loadFail("自动切题失败");
195 } 198 }
196 199
197 @Override 200 @Override
198 public void onComplete() { 201 public void onComplete() {
199 202
200 } 203 }
201 }); 204 });
202 } 205 }
203 206
204 private void getRects(List<CutPicBean.FigLoaction> figLoactions) { 207 private void getRects(List<CutPicBean.FigLoaction> figLoactions) {
205 Log.i("figLoaction", new Gson().toJson(figLoactions)); 208 Log.i("figLoaction", new Gson().toJson(figLoactions));
206 int index = binding.viewPager.getCurrentItem(); 209 int index = binding.viewPager.getCurrentItem();
207 List<ImageBean.Cut> cuts = new ArrayList<>(); 210 List<ImageBean.Cut> cuts = new ArrayList<>();
208 for (CutPicBean.FigLoaction figLoaction : figLoactions) { 211 for (CutPicBean.FigLoaction figLoaction : figLoactions) {
209 ImageBean.Cut cut = new ImageBean.Cut(); 212 ImageBean.Cut cut = new ImageBean.Cut();
210 cut.setRect(figLoaction); 213 cut.setRect(figLoaction);
211 cut.setSelect(false); 214 cut.setSelect(false);
212 cuts.add(cut); 215 cuts.add(cut);
213 } 216 }
214 list.get(index).setCuts(cuts); 217 list.get(index).setCuts(cuts);
215 imageAdapter.notifyItemChanged(index); 218 imageAdapter.notifyItemChanged(index);
216 cancelLoadingDialog(); 219 cancelLoadingDialog();
217 } 220 }
218 221
219 private void rotatingImage(CutPicBean cutPicBean) { 222 private void rotatingImage(CutPicBean cutPicBean) {
220 int index = binding.viewPager.getCurrentItem(); 223 int index = binding.viewPager.getCurrentItem();
221 Bitmap bitmap = BitmapFactory.decodeFile(list.get(index).getPath()); 224 Bitmap bitmap = BitmapFactory.decodeFile(list.get(index).getPath());
222 int angle = 0; 225 int angle = 0;
223 switch (cutPicBean.getDirection()) { 226 switch (cutPicBean.getDirection()) {
224 case 1: 227 case 1:
225 angle = 90; 228 angle = 90;
226 break; 229 break;
227 case 2: 230 case 2:
228 angle = 180; 231 angle = 180;
229 break; 232 break;
230 case 3: 233 case 3:
231 angle = 270; 234 angle = 270;
232 break; 235 break;
233 } 236 }
234 if (cutPicBean.getQus_figure() != null && cutPicBean.getQus_figure().size() > 0) { 237 if (cutPicBean.getQus_figure() != null && cutPicBean.getQus_figure().size() > 0) {
235 List<CutPicBean.FigLoaction> figLoactions = new ArrayList<>(); 238 List<CutPicBean.FigLoaction> figLoactions = new ArrayList<>();
236 for (CutPicBean.CutLocation cutLocation : cutPicBean.getQus_figure()) { 239 for (CutPicBean.CutLocation cutLocation : cutPicBean.getQus_figure()) {
237 figLoactions.add(cutLocation.getFig_location()); 240 figLoactions.add(cutLocation.getFig_location());
238 } 241 }
239 figLoactions = CommonUtil.rotaingLocation(angle, figLoactions, bitmap.getWidth(), bitmap.getHeight()); 242 figLoactions = CommonUtil.rotaingLocation(angle, figLoactions, bitmap.getWidth(), bitmap.getHeight());
240 bitmap = CommonUtil.rotaingImageView(angle, bitmap); 243 bitmap = CommonUtil.rotaingImageView(angle, bitmap);
241 String filepath = context.getExternalFilesDir("images").getPath() + "/" + String.valueOf(System.currentTimeMillis()) + CommonUtil.getStr() + ".jpg"; 244 String filepath = context.getExternalFilesDir("images").getPath() + "/" + String.valueOf(System.currentTimeMillis()) + CommonUtil.getStr() + ".jpg";
242 CommonUtil.saveBitmapToUri(bitmap, filepath); 245 CommonUtil.saveBitmapToUri(bitmap, filepath);
243 list.get(index).setPath(filepath); 246 list.get(index).setPath(filepath);
244 imageAdapter.notifyItemChanged(index); 247 imageAdapter.notifyItemChanged(index);
245 List<CutPicBean.FigLoaction> finalFigLoactions = figLoactions; 248 List<CutPicBean.FigLoaction> finalFigLoactions = figLoactions;
246 new Handler().postDelayed(new Runnable() { 249 new Handler().postDelayed(new Runnable() {
247 @Override 250 @Override
248 public void run() { 251 public void run() {
249 getRects(finalFigLoactions); 252 getRects(finalFigLoactions);
250 } 253 }
251 }, 500); 254 }, 500);
252 } else { 255 } else {
253 cancelLoadingDialog(); 256 cancelLoadingDialog();
254 } 257 }
255 } 258 }
256 259
257 @Override 260 @Override
258 protected ActivityImageBinding getViewBinding() { 261 protected ActivityImageBinding getViewBinding() {
259 return ActivityImageBinding.inflate(getLayoutInflater()); 262 return ActivityImageBinding.inflate(getLayoutInflater());
260 } 263 }
261 264
262 @SuppressLint("SetTextI18n") 265 @SuppressLint("SetTextI18n")
263 public void refreshNum() { 266 public void refreshNum() {
264 int num = 0; 267 int num = 0;
265 for (ImageBean imageBean : list) { 268 for (ImageBean imageBean : list) {
266 if (imageBean.getCuts() != null && imageBean.getCuts().size() > 0) { 269 if (imageBean.getCuts() != null && imageBean.getCuts().size() > 0) {
267 for (ImageBean.Cut cut : imageBean.getCuts()) { 270 for (ImageBean.Cut cut : imageBean.getCuts()) {
268 if (cut.isSelect()) { 271 if (cut.isSelect()) {
269 num++; 272 num++;
270 } 273 }
271 } 274 }
272 } 275 }
273 } 276 }
274 String btnText = type == 0 ? "保存错题" : "录入题目"; 277 String btnText = type == 0 ? "保存错题" : "录入题目";
275 if (num > 0) { 278 if (num > 0) {
276 binding.tvSave.setEnabled(true); 279 binding.tvSave.setEnabled(true);
277 binding.tvSave.setBackgroundResource(R.drawable.bg_soild_blue_5); 280 binding.tvSave.setBackgroundResource(R.drawable.bg_soild_blue_5);
278 binding.tvSave.setText(btnText + "(" + num + ")"); 281 binding.tvSave.setText(btnText + "(" + num + ")");
279 } else { 282 } else {
280 binding.tvSave.setEnabled(false); 283 binding.tvSave.setEnabled(false);
281 binding.tvSave.setBackgroundResource(R.drawable.bg_soild_blue_light_5); 284 binding.tvSave.setBackgroundResource(R.drawable.bg_soild_blue_light_5);
282 binding.tvSave.setText(btnText); 285 binding.tvSave.setText(btnText);
283 } 286 }
284 } 287 }
285 288
286 @Override 289 @Override
287 public void onClick(View v) { 290 public void onClick(View v) {
288 switch (v.getId()) { 291 switch (v.getId()) {
289 case R.id.iv_back: 292 case R.id.iv_back:
290 back(); 293 back();
291 break; 294 break;
292 case R.id.iv_next: 295 case R.id.iv_next:
293 if (binding.viewPager.getCurrentItem() + 1 < list.size()) { 296 if (binding.viewPager.getCurrentItem() + 1 < list.size()) {
294 binding.viewPager.setCurrentItem(binding.viewPager.getCurrentItem() + 1); 297 binding.viewPager.setCurrentItem(binding.viewPager.getCurrentItem() + 1);
295 } 298 }
296 break; 299 break;
297 case R.id.iv_previous: 300 case R.id.iv_previous:
298 if (binding.viewPager.getCurrentItem() != 0) { 301 if (binding.viewPager.getCurrentItem() != 0) {
299 binding.viewPager.setCurrentItem(binding.viewPager.getCurrentItem() - 1); 302 binding.viewPager.setCurrentItem(binding.viewPager.getCurrentItem() - 1);
300 } 303 }
301 break; 304 break;
302 case R.id.ll_edit: 305 case R.id.ll_edit:
303 Intent intent = new Intent(context, ImageEditActivity.class); 306 Intent intent = new Intent(context, ImageEditActivity.class);
304 intent.putExtra("path", list.get(binding.viewPager.getCurrentItem()).getPath()); 307 intent.putExtra("path", list.get(binding.viewPager.getCurrentItem()).getPath());
305 startActivityForResult(intent, 1001); 308 startActivityForResult(intent, 1001);
306 break; 309 break;
307 case R.id.tv_photo: 310 case R.id.tv_photo:
308 Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 311 Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
309 //确保有相机来处理Intent 312 //确保有相机来处理Intent
310 filePath = context.getExternalFilesDir("images").getPath() + "/" + String.valueOf(System.currentTimeMillis()) + CommonUtil.getStr() + ".jpg"; 313 filePath = context.getExternalFilesDir("images").getPath() + "/" + String.valueOf(System.currentTimeMillis()) + CommonUtil.getStr() + ".jpg";
311 File photoFile = new File(filePath); 314 File photoFile = new File(filePath);
312 if (photoFile != null) { 315 if (photoFile != null) {
313 //适配Android 7.0文件权限,通过FileProvider创建一个content类型的Uri 316 //适配Android 7.0文件权限,通过FileProvider创建一个content类型的Uri
314 Uri photoUri = FileProvider.getUriForFile(activity, "com.hjx.parent.fileprovider", photoFile); 317 Uri photoUri = FileProvider.getUriForFile(activity, "com.hjx.parent.fileprovider", photoFile);
315 takePictureIntent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION); 318 takePictureIntent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
316 takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoUri); 319 takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoUri);
317 activity.startActivityForResult(takePictureIntent, 1002); 320 activity.startActivityForResult(takePictureIntent, 1002);
318 } 321 }
319 break; 322 break;
320 case R.id.tv_add: 323 case R.id.tv_add:
321 Intent intent1 = new Intent(context, ImageSelectActivity.class); 324 Intent intent1 = new Intent(context, ImageSelectActivity.class);
322 intent1.putExtra("path", list.get(binding.viewPager.getCurrentItem()).getPath()); 325 intent1.putExtra("path", list.get(binding.viewPager.getCurrentItem()).getPath());
323 startActivityForResult(intent1, 1001); 326 startActivityForResult(intent1, 1001);
324 break; 327 break;
325 case R.id.tv_save: 328 case R.id.tv_save:
326 List<TopicBean> topicBeans = new ArrayList<>(); 329 List<TopicBean> topicBeans = new ArrayList<>();
327 for (ImageBean imageBean : list) { 330 for (ImageBean imageBean : list) {
328 if (imageBean.getCuts() != null && imageBean.getCuts().size() > 0) { 331 if (imageBean.getCuts() != null && imageBean.getCuts().size() > 0) {
329 for (ImageBean.Cut cut : imageBean.getCuts()) { 332 for (ImageBean.Cut cut : imageBean.getCuts()) {
330 if (cut.isSelect()) { 333 if (cut.isSelect()) {
331 TopicBean bean = new TopicBean(); 334 TopicBean bean = new TopicBean();
332 String path = context.getExternalFilesDir("images").getPath() + "/" + String.valueOf(System.currentTimeMillis()) + CommonUtil.getStr() + ".jpg"; 335 String path = context.getExternalFilesDir("images").getPath() + "/" + String.valueOf(System.currentTimeMillis()) + CommonUtil.getStr() + ".jpg";
333 BitmapUtils.saveBitmap(cut.getBitmap(), path); 336 BitmapUtils.saveBitmap(cut.getBitmap(), path);
334 bean.setPath(path); 337 bean.setPath(path);
335 topicBeans.add(bean); 338 topicBeans.add(bean);
336 } 339 }
337 } 340 }
338 } 341 }
339 } 342 }
340 save(topicBeans); 343 save(topicBeans);
341 break; 344 break;
342 } 345 }
343 } 346 }
344 347
345 private void save(List<TopicBean> topicBeans) { 348 private void save(List<TopicBean> topicBeans) {
346 if (type == 0) { 349 if (type == 0) {
347 ErrorInputDialog dialog = new ErrorInputDialog(this, topicBeans); 350 ErrorInputDialog dialog = new ErrorInputDialog(this, topicBeans);
348 dialog.show(); 351 dialog.show();
349 } else { 352 } else {
350 List<String> paths = new ArrayList<>(); 353 List<String> paths = new ArrayList<>();
351 for (TopicBean it: topicBeans) { 354 for (TopicBean it: topicBeans) {
352 paths.add(it.getPath()); 355 paths.add(it.getPath());
353 } 356 }
354 if (addHomeworkDialog == null) { 357 if (addHomeworkDialog == null) {
355 addHomeworkDialog = new AddHomeworkDialog(this); 358 addHomeworkDialog = new AddHomeworkDialog(this);
356 } 359 }
357 addHomeworkDialog.show(paths, student -> { 360 addHomeworkDialog.show(paths, student -> {
358 Intent intent = new Intent(context, AddSuccessActivity.class); 361 Intent intent = new Intent(context, AddSuccessActivity.class);
359 intent.putExtra("type", type); 362 intent.putExtra("type", type);
360 intent.putExtra("studentJson", new Gson().toJson(student)); 363 intent.putExtra("studentJson", new Gson().toJson(student));
361 startActivity(intent); 364 startActivity(intent);
362 finish(); 365 finish();
363 }); 366 });
364 } 367 }
365 } 368 }
366 369
367 @Override 370 @Override
368 protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { 371 protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
369 super.onActivityResult(requestCode, resultCode, data); 372 super.onActivityResult(requestCode, resultCode, data);
370 if (requestCode == 1001) { 373 if (requestCode == 1001) {
371 if (resultCode == 1002) { 374 if (resultCode == 1002) {
372 if (list.size() > 1) { 375 if (list.size() > 1) {
373 list.remove(binding.viewPager.getCurrentItem()); 376 list.remove(binding.viewPager.getCurrentItem());
374 imageAdapter.notifyItemRemoved(binding.viewPager.getCurrentItem()); 377 imageAdapter.notifyItemRemoved(binding.viewPager.getCurrentItem());
375 binding.tvTitle.setText((binding.viewPager.getCurrentItem() + 1) + "/" + list.size()); 378 binding.tvTitle.setText((binding.viewPager.getCurrentItem() + 1) + "/" + list.size());
376 refreshNum(); 379 refreshNum();
377 } else { 380 } else {
378 finish(); 381 finish();
379 } 382 }
380 } else if (resultCode == 1003) { 383 } else if (resultCode == 1003) {
381 int position = binding.viewPager.getCurrentItem(); 384 int position = binding.viewPager.getCurrentItem();
382 list.remove(position); 385 list.remove(position);
383 String path = data.getStringExtra("path"); 386 String path = data.getStringExtra("path");
384 ImageBean imageBean = new ImageBean(); 387 ImageBean imageBean = new ImageBean();
385 imageBean.setPath(path); 388 imageBean.setPath(path);
386 list.add(position, imageBean); 389 list.add(position, imageBean);
387 imageAdapter.notifyItemChanged(position); 390 imageAdapter.notifyItemChanged(position);
388 clearText(); 391 clearText();
389 refreshNum(); 392 refreshNum();
390 } else if (resultCode == 1004) { 393 } else if (resultCode == 1004) {
391 Rect rect = data.getParcelableExtra("cut"); 394 Rect rect = data.getParcelableExtra("cut");
392 if (rect != null) { 395 if (rect != null) {
393 int position = binding.viewPager.getCurrentItem(); 396 int position = binding.viewPager.getCurrentItem();
394 ImageBean.Cut cut = new ImageBean.Cut(); 397 ImageBean.Cut cut = new ImageBean.Cut();
395 cut.setRect1(rect); 398 cut.setRect1(rect);
396 cut.setSelect(false); 399 cut.setSelect(false);
397 if (list.get(position).getCuts() != null) { 400 if (list.get(position).getCuts() != null) {
398 list.get(position).getCuts().add(cut); 401 list.get(position).getCuts().add(cut);
399 } else { 402 } else {
400 List<ImageBean.Cut> cuts =new ArrayList<>(); 403 List<ImageBean.Cut> cuts =new ArrayList<>();
401 cuts.add(cut); 404 cuts.add(cut);
402 list.get(position).setCuts(cuts); 405 list.get(position).setCuts(cuts);
403 } 406 }
404 imageAdapter.notifyItemChanged(position); 407 imageAdapter.notifyItemChanged(position);
405 refreshNum(); 408 refreshNum();
406 } 409 }
407 } else if (resultCode == 1005) { 410 } else if (resultCode == 1005) {
408 int i = data.getIntExtra("position", 0); 411 int i = data.getIntExtra("position", 0);
409 int position = binding.viewPager.getCurrentItem(); 412 int position = binding.viewPager.getCurrentItem();
410 Rect rect = data.getParcelableExtra("cut"); 413 Rect rect = data.getParcelableExtra("cut");
411 if (rect != null) { 414 if (rect != null) {
412 ImageBean.Cut cut = new ImageBean.Cut(); 415 ImageBean.Cut cut = new ImageBean.Cut();
413 cut.setRect1(rect); 416 cut.setRect1(rect);
414 cut.setSelect(false); 417 cut.setSelect(false);
415 list.get(position).getCuts().remove(i); 418 list.get(position).getCuts().remove(i);
416 list.get(position).getCuts().add(i, cut); 419 list.get(position).getCuts().add(i, cut);
417 imageAdapter.notifyItemChanged(position); 420 imageAdapter.notifyItemChanged(position);
418 refreshNum(); 421 refreshNum();
419 } else { 422 } else {
420 list.get(position).getCuts().remove(i); 423 list.get(position).getCuts().remove(i);
421 imageAdapter.notifyItemChanged(position); 424 imageAdapter.notifyItemChanged(position);
422 refreshNum(); 425 refreshNum();
423 } 426 }
424 } 427 }
425 } else if (requestCode == 1002 && resultCode == RESULT_OK && !TextUtils.isEmpty(filePath)) { 428 } else if (requestCode == 1002 && resultCode == RESULT_OK && !TextUtils.isEmpty(filePath)) {
426 Bitmap b = BitmapUtils.compress(BitmapFactory.decodeFile(filePath)); 429 Bitmap b = BitmapUtils.compress(BitmapFactory.decodeFile(filePath));
427 String path = context.getExternalFilesDir("images").getPath() + "/" + String.valueOf(System.currentTimeMillis()) + CommonUtil.getStr() + ".jpg"; 430 String path = context.getExternalFilesDir("images").getPath() + "/" + String.valueOf(System.currentTimeMillis()) + CommonUtil.getStr() + ".jpg";
428 CommonUtil.saveBitmapToUri(b, path); 431 CommonUtil.saveBitmapToUri(b, path);
429 int position = binding.viewPager.getCurrentItem(); 432 int position = binding.viewPager.getCurrentItem();
430 list.remove(position); 433 list.remove(position);
431 ImageBean imageBean = new ImageBean(); 434 ImageBean imageBean = new ImageBean();
432 imageBean.setPath(path); 435 imageBean.setPath(path);
433 list.add(position, imageBean); 436 list.add(position, imageBean);
434 imageAdapter.notifyItemChanged(position); 437 imageAdapter.notifyItemChanged(position);
435 clearText(); 438 clearText();
436 refreshNum(); 439 refreshNum();
437 } 440 }
438 } 441 }
439 442
440 private void back() { 443 private void back() {
441 showTipDialog("温馨提示", "是否确认退出?", "取消", "确定", new TipDialog.TipDialogInterface() { 444 showTipDialog("温馨提示", "是否确认退出?", "取消", "确定", new TipDialog.TipDialogInterface() {
442 @Override 445 @Override
443 public void onConfirm(Dialog dialog) { 446 public void onConfirm(Dialog dialog) {
444 dialog.dismiss(); 447 dialog.dismiss();
445 finish(); 448 finish();
446 } 449 }
447 450
448 @Override 451 @Override
449 public void onCancel(Dialog dialog) { 452 public void onCancel(Dialog dialog) {
450 dialog.dismiss(); 453 dialog.dismiss();
451 } 454 }
452 }); 455 });
453 } 456 }
454 457
455 @Override 458 @Override
456 public boolean onKeyDown(int keyCode, KeyEvent event) { 459 public boolean onKeyDown(int keyCode, KeyEvent event) {
457 if (keyCode == KeyEvent.KEYCODE_BACK) { 460 if (keyCode == KeyEvent.KEYCODE_BACK) {
458 back(); 461 back();
459 return true; 462 return true;
460 } 463 }
461 return super.onKeyDown(keyCode, event); 464 return super.onKeyDown(keyCode, event);
462 } 465 }
463 } 466 }
464 467