Commit 7a017e7a6ea380c25c70c7f0468fabffe9d201fe

Authored by shixianjie
1 parent a83bcd8af8
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.rlNext.setOnClickListener(this);
102 binding.ivPrevious.setOnClickListener(this); 102 binding.rlPrevious.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) { 135 if (list.get(index).getCuts() == null) {
136 list.get(index).setCuts(new ArrayList<>()); 136 list.get(index).setCuts(new ArrayList<>());
137 } 137 }
138 imageAdapter.notifyItemChanged(index); 138 imageAdapter.notifyItemChanged(index);
139 cut(filepath); 139 cut(filepath);
140 } else { 140 } else {
141 loadFail("去除字迹失败"); 141 loadFail("去除字迹失败");
142 } 142 }
143 } else { 143 } else {
144 loadFail("去除字迹失败"); 144 loadFail("去除字迹失败");
145 } 145 }
146 } 146 }
147 147
148 @Override 148 @Override
149 public void onError(Throwable e) { 149 public void onError(Throwable e) {
150 loadFail("去除字迹失败"); 150 loadFail("去除字迹失败");
151 } 151 }
152 152
153 @Override 153 @Override
154 public void onComplete() { 154 public void onComplete() {
155 155
156 } 156 }
157 }); 157 });
158 } 158 }
159 159
160 public void cut(String path) { 160 public void cut(String path) {
161 String base64 = BitmapUtils.imageToBase64(path); 161 String base64 = BitmapUtils.imageToBase64(path);
162 Log.i("figLoaction", path); 162 Log.i("figLoaction", path);
163 NetWorks.cut(base64, new Observer<CutPicBean>() { 163 NetWorks.cut(base64, new Observer<CutPicBean>() {
164 @Override 164 @Override
165 public void onSubscribe(Disposable d) { 165 public void onSubscribe(Disposable d) {
166 166
167 } 167 }
168 168
169 @Override 169 @Override
170 public void onNext(CutPicBean cutPicBean) { 170 public void onNext(CutPicBean cutPicBean) {
171 if (cutPicBean != null) { 171 if (cutPicBean != null) {
172 if (cutPicBean.getDirection() != 0) { 172 if (cutPicBean.getDirection() != 0) {
173 rotatingImage(cutPicBean); 173 rotatingImage(cutPicBean);
174 } else { 174 } else {
175 if (cutPicBean.getQus_figure() != null && cutPicBean.getQus_figure().size() > 0) { 175 if (cutPicBean.getQus_figure() != null && cutPicBean.getQus_figure().size() > 0) {
176 List<CutPicBean.FigLoaction> figLoactions = new ArrayList<>(); 176 List<CutPicBean.FigLoaction> figLoactions = new ArrayList<>();
177 for (CutPicBean.CutLocation cutLocation : cutPicBean.getQus_figure()) { 177 for (CutPicBean.CutLocation cutLocation : cutPicBean.getQus_figure()) {
178 figLoactions.add(cutLocation.getFig_location()); 178 figLoactions.add(cutLocation.getFig_location());
179 } 179 }
180 new Handler().postDelayed(new Runnable() { 180 new Handler().postDelayed(new Runnable() {
181 @Override 181 @Override
182 public void run() { 182 public void run() {
183 getRects(figLoactions); 183 getRects(figLoactions);
184 } 184 }
185 }, 1000); 185 }, 1000);
186 } else { 186 } else {
187 cancelLoadingDialog(); 187 cancelLoadingDialog();
188 } 188 }
189 } 189 }
190 } else { 190 } else {
191 loadFail("自动切题失败"); 191 loadFail("自动切题失败");
192 } 192 }
193 } 193 }
194 194
195 @Override 195 @Override
196 public void onError(Throwable e) { 196 public void onError(Throwable e) {
197 loadFail("自动切题失败"); 197 loadFail("自动切题失败");
198 } 198 }
199 199
200 @Override 200 @Override
201 public void onComplete() { 201 public void onComplete() {
202 202
203 } 203 }
204 }); 204 });
205 } 205 }
206 206
207 private void getRects(List<CutPicBean.FigLoaction> figLoactions) { 207 private void getRects(List<CutPicBean.FigLoaction> figLoactions) {
208 Log.i("figLoaction", new Gson().toJson(figLoactions)); 208 Log.i("figLoaction", new Gson().toJson(figLoactions));
209 int index = binding.viewPager.getCurrentItem(); 209 int index = binding.viewPager.getCurrentItem();
210 List<ImageBean.Cut> cuts = new ArrayList<>(); 210 List<ImageBean.Cut> cuts = new ArrayList<>();
211 for (CutPicBean.FigLoaction figLoaction : figLoactions) { 211 for (CutPicBean.FigLoaction figLoaction : figLoactions) {
212 ImageBean.Cut cut = new ImageBean.Cut(); 212 ImageBean.Cut cut = new ImageBean.Cut();
213 cut.setRect(figLoaction); 213 cut.setRect(figLoaction);
214 cut.setSelect(false); 214 cut.setSelect(false);
215 cuts.add(cut); 215 cuts.add(cut);
216 } 216 }
217 list.get(index).setCuts(cuts); 217 list.get(index).setCuts(cuts);
218 imageAdapter.notifyItemChanged(index); 218 imageAdapter.notifyItemChanged(index);
219 cancelLoadingDialog(); 219 cancelLoadingDialog();
220 } 220 }
221 221
222 private void rotatingImage(CutPicBean cutPicBean) { 222 private void rotatingImage(CutPicBean cutPicBean) {
223 int index = binding.viewPager.getCurrentItem(); 223 int index = binding.viewPager.getCurrentItem();
224 Bitmap bitmap = BitmapFactory.decodeFile(list.get(index).getPath()); 224 Bitmap bitmap = BitmapFactory.decodeFile(list.get(index).getPath());
225 int angle = 0; 225 int angle = 0;
226 switch (cutPicBean.getDirection()) { 226 switch (cutPicBean.getDirection()) {
227 case 1: 227 case 1:
228 angle = 90; 228 angle = 90;
229 break; 229 break;
230 case 2: 230 case 2:
231 angle = 180; 231 angle = 180;
232 break; 232 break;
233 case 3: 233 case 3:
234 angle = 270; 234 angle = 270;
235 break; 235 break;
236 } 236 }
237 if (cutPicBean.getQus_figure() != null && cutPicBean.getQus_figure().size() > 0) { 237 if (cutPicBean.getQus_figure() != null && cutPicBean.getQus_figure().size() > 0) {
238 List<CutPicBean.FigLoaction> figLoactions = new ArrayList<>(); 238 List<CutPicBean.FigLoaction> figLoactions = new ArrayList<>();
239 for (CutPicBean.CutLocation cutLocation : cutPicBean.getQus_figure()) { 239 for (CutPicBean.CutLocation cutLocation : cutPicBean.getQus_figure()) {
240 figLoactions.add(cutLocation.getFig_location()); 240 figLoactions.add(cutLocation.getFig_location());
241 } 241 }
242 figLoactions = CommonUtil.rotaingLocation(angle, figLoactions, bitmap.getWidth(), bitmap.getHeight()); 242 figLoactions = CommonUtil.rotaingLocation(angle, figLoactions, bitmap.getWidth(), bitmap.getHeight());
243 bitmap = CommonUtil.rotaingImageView(angle, bitmap); 243 bitmap = CommonUtil.rotaingImageView(angle, bitmap);
244 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";
245 CommonUtil.saveBitmapToUri(bitmap, filepath); 245 CommonUtil.saveBitmapToUri(bitmap, filepath);
246 list.get(index).setPath(filepath); 246 list.get(index).setPath(filepath);
247 imageAdapter.notifyItemChanged(index); 247 imageAdapter.notifyItemChanged(index);
248 List<CutPicBean.FigLoaction> finalFigLoactions = figLoactions; 248 List<CutPicBean.FigLoaction> finalFigLoactions = figLoactions;
249 new Handler().postDelayed(new Runnable() { 249 new Handler().postDelayed(new Runnable() {
250 @Override 250 @Override
251 public void run() { 251 public void run() {
252 getRects(finalFigLoactions); 252 getRects(finalFigLoactions);
253 } 253 }
254 }, 500); 254 }, 500);
255 } else { 255 } else {
256 cancelLoadingDialog(); 256 cancelLoadingDialog();
257 } 257 }
258 } 258 }
259 259
260 @Override 260 @Override
261 protected ActivityImageBinding getViewBinding() { 261 protected ActivityImageBinding getViewBinding() {
262 return ActivityImageBinding.inflate(getLayoutInflater()); 262 return ActivityImageBinding.inflate(getLayoutInflater());
263 } 263 }
264 264
265 @SuppressLint("SetTextI18n") 265 @SuppressLint("SetTextI18n")
266 public void refreshNum() { 266 public void refreshNum() {
267 int num = 0; 267 int num = 0;
268 for (ImageBean imageBean : list) { 268 for (ImageBean imageBean : list) {
269 if (imageBean.getCuts() != null && imageBean.getCuts().size() > 0) { 269 if (imageBean.getCuts() != null && imageBean.getCuts().size() > 0) {
270 for (ImageBean.Cut cut : imageBean.getCuts()) { 270 for (ImageBean.Cut cut : imageBean.getCuts()) {
271 if (cut.isSelect()) { 271 if (cut.isSelect()) {
272 num++; 272 num++;
273 } 273 }
274 } 274 }
275 } 275 }
276 } 276 }
277 String btnText = type == 0 ? "保存错题" : "录入题目"; 277 String btnText = type == 0 ? "保存错题" : "录入题目";
278 if (num > 0) { 278 if (num > 0) {
279 binding.tvSave.setEnabled(true); 279 binding.tvSave.setEnabled(true);
280 binding.tvSave.setBackgroundResource(R.drawable.bg_soild_blue_5); 280 binding.tvSave.setBackgroundResource(R.drawable.bg_soild_blue_5);
281 binding.tvSave.setText(btnText + "(" + num + ")"); 281 binding.tvSave.setText(btnText + "(" + num + ")");
282 } else { 282 } else {
283 binding.tvSave.setEnabled(false); 283 binding.tvSave.setEnabled(false);
284 binding.tvSave.setBackgroundResource(R.drawable.bg_soild_blue_light_5); 284 binding.tvSave.setBackgroundResource(R.drawable.bg_soild_blue_light_5);
285 binding.tvSave.setText(btnText); 285 binding.tvSave.setText(btnText);
286 } 286 }
287 } 287 }
288 288
289 @Override 289 @Override
290 public void onClick(View v) { 290 public void onClick(View v) {
291 switch (v.getId()) { 291 switch (v.getId()) {
292 case R.id.iv_back: 292 case R.id.iv_back:
293 back(); 293 back();
294 break; 294 break;
295 case R.id.iv_next: 295 case R.id.rl_next:
296 if (binding.viewPager.getCurrentItem() + 1 < list.size()) { 296 if (binding.viewPager.getCurrentItem() + 1 < list.size()) {
297 binding.viewPager.setCurrentItem(binding.viewPager.getCurrentItem() + 1); 297 binding.viewPager.setCurrentItem(binding.viewPager.getCurrentItem() + 1);
298 } 298 }
299 break; 299 break;
300 case R.id.iv_previous: 300 case R.id.rl_previous:
301 if (binding.viewPager.getCurrentItem() != 0) { 301 if (binding.viewPager.getCurrentItem() != 0) {
302 binding.viewPager.setCurrentItem(binding.viewPager.getCurrentItem() - 1); 302 binding.viewPager.setCurrentItem(binding.viewPager.getCurrentItem() - 1);
303 } 303 }
304 break; 304 break;
305 case R.id.ll_edit: 305 case R.id.ll_edit:
306 Intent intent = new Intent(context, ImageEditActivity.class); 306 Intent intent = new Intent(context, ImageEditActivity.class);
307 intent.putExtra("path", list.get(binding.viewPager.getCurrentItem()).getPath()); 307 intent.putExtra("path", list.get(binding.viewPager.getCurrentItem()).getPath());
308 startActivityForResult(intent, 1001); 308 startActivityForResult(intent, 1001);
309 break; 309 break;
310 case R.id.tv_photo: 310 case R.id.tv_photo:
311 Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 311 Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
312 //确保有相机来处理Intent 312 //确保有相机来处理Intent
313 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";
314 File photoFile = new File(filePath); 314 File photoFile = new File(filePath);
315 if (photoFile != null) { 315 if (photoFile != null) {
316 //适配Android 7.0文件权限,通过FileProvider创建一个content类型的Uri 316 //适配Android 7.0文件权限,通过FileProvider创建一个content类型的Uri
317 Uri photoUri = FileProvider.getUriForFile(activity, "com.hjx.parent.fileprovider", photoFile); 317 Uri photoUri = FileProvider.getUriForFile(activity, "com.hjx.parent.fileprovider", photoFile);
318 takePictureIntent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION); 318 takePictureIntent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
319 takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoUri); 319 takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoUri);
320 activity.startActivityForResult(takePictureIntent, 1002); 320 activity.startActivityForResult(takePictureIntent, 1002);
321 } 321 }
322 break; 322 break;
323 case R.id.tv_add: 323 case R.id.tv_add:
324 Intent intent1 = new Intent(context, ImageSelectActivity.class); 324 Intent intent1 = new Intent(context, ImageSelectActivity.class);
325 intent1.putExtra("path", list.get(binding.viewPager.getCurrentItem()).getPath()); 325 intent1.putExtra("path", list.get(binding.viewPager.getCurrentItem()).getPath());
326 startActivityForResult(intent1, 1001); 326 startActivityForResult(intent1, 1001);
327 break; 327 break;
328 case R.id.tv_save: 328 case R.id.tv_save:
329 List<TopicBean> topicBeans = new ArrayList<>(); 329 List<TopicBean> topicBeans = new ArrayList<>();
330 for (ImageBean imageBean : list) { 330 for (ImageBean imageBean : list) {
331 if (imageBean.getCuts() != null && imageBean.getCuts().size() > 0) { 331 if (imageBean.getCuts() != null && imageBean.getCuts().size() > 0) {
332 for (ImageBean.Cut cut : imageBean.getCuts()) { 332 for (ImageBean.Cut cut : imageBean.getCuts()) {
333 if (cut.isSelect()) { 333 if (cut.isSelect()) {
334 TopicBean bean = new TopicBean(); 334 TopicBean bean = new TopicBean();
335 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";
336 BitmapUtils.saveBitmap(cut.getBitmap(), path); 336 BitmapUtils.saveBitmap(cut.getBitmap(), path);
337 bean.setPath(path); 337 bean.setPath(path);
338 topicBeans.add(bean); 338 topicBeans.add(bean);
339 } 339 }
340 } 340 }
341 } 341 }
342 } 342 }
343 save(topicBeans); 343 save(topicBeans);
344 break; 344 break;
345 } 345 }
346 } 346 }
347 347
348 private void save(List<TopicBean> topicBeans) { 348 private void save(List<TopicBean> topicBeans) {
349 if (type == 0) { 349 if (type == 0) {
350 ErrorInputDialog dialog = new ErrorInputDialog(this, topicBeans); 350 ErrorInputDialog dialog = new ErrorInputDialog(this, topicBeans);
351 dialog.show(); 351 dialog.show();
352 } else { 352 } else {
353 List<String> paths = new ArrayList<>(); 353 List<String> paths = new ArrayList<>();
354 for (TopicBean it: topicBeans) { 354 for (TopicBean it: topicBeans) {
355 paths.add(it.getPath()); 355 paths.add(it.getPath());
356 } 356 }
357 if (addHomeworkDialog == null) { 357 if (addHomeworkDialog == null) {
358 addHomeworkDialog = new AddHomeworkDialog(this); 358 addHomeworkDialog = new AddHomeworkDialog(this);
359 } 359 }
360 addHomeworkDialog.show(paths, student -> { 360 addHomeworkDialog.show(paths, student -> {
361 Intent intent = new Intent(context, AddSuccessActivity.class); 361 Intent intent = new Intent(context, AddSuccessActivity.class);
362 intent.putExtra("type", type); 362 intent.putExtra("type", type);
363 intent.putExtra("studentJson", new Gson().toJson(student)); 363 intent.putExtra("studentJson", new Gson().toJson(student));
364 startActivity(intent); 364 startActivity(intent);
365 finish(); 365 finish();
366 }); 366 });
367 } 367 }
368 } 368 }
369 369
370 @Override 370 @Override
371 protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { 371 protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
372 super.onActivityResult(requestCode, resultCode, data); 372 super.onActivityResult(requestCode, resultCode, data);
373 if (requestCode == 1001) { 373 if (requestCode == 1001) {
374 if (resultCode == 1002) { 374 if (resultCode == 1002) {
375 if (list.size() > 1) { 375 if (list.size() > 1) {
376 list.remove(binding.viewPager.getCurrentItem()); 376 list.remove(binding.viewPager.getCurrentItem());
377 imageAdapter.notifyItemRemoved(binding.viewPager.getCurrentItem()); 377 imageAdapter.notifyItemRemoved(binding.viewPager.getCurrentItem());
378 binding.tvTitle.setText((binding.viewPager.getCurrentItem() + 1) + "/" + list.size()); 378 binding.tvTitle.setText((binding.viewPager.getCurrentItem() + 1) + "/" + list.size());
379 refreshNum(); 379 refreshNum();
380 } else { 380 } else {
381 finish(); 381 finish();
382 } 382 }
383 } else if (resultCode == 1003) { 383 } else if (resultCode == 1003) {
384 int position = binding.viewPager.getCurrentItem(); 384 int position = binding.viewPager.getCurrentItem();
385 list.remove(position); 385 list.remove(position);
386 String path = data.getStringExtra("path"); 386 String path = data.getStringExtra("path");
387 ImageBean imageBean = new ImageBean(); 387 ImageBean imageBean = new ImageBean();
388 imageBean.setPath(path); 388 imageBean.setPath(path);
389 list.add(position, imageBean); 389 list.add(position, imageBean);
390 imageAdapter.notifyItemChanged(position); 390 imageAdapter.notifyItemChanged(position);
391 clearText(); 391 clearText();
392 refreshNum(); 392 refreshNum();
393 } else if (resultCode == 1004) { 393 } else if (resultCode == 1004) {
394 Rect rect = data.getParcelableExtra("cut"); 394 Rect rect = data.getParcelableExtra("cut");
395 if (rect != null) { 395 if (rect != null) {
396 int position = binding.viewPager.getCurrentItem(); 396 int position = binding.viewPager.getCurrentItem();
397 ImageBean.Cut cut = new ImageBean.Cut(); 397 ImageBean.Cut cut = new ImageBean.Cut();
398 cut.setRect1(rect); 398 cut.setRect1(rect);
399 cut.setSelect(false); 399 cut.setSelect(false);
400 if (list.get(position).getCuts() != null) { 400 if (list.get(position).getCuts() != null) {
401 list.get(position).getCuts().add(cut); 401 list.get(position).getCuts().add(cut);
402 } else { 402 } else {
403 List<ImageBean.Cut> cuts =new ArrayList<>(); 403 List<ImageBean.Cut> cuts =new ArrayList<>();
404 cuts.add(cut); 404 cuts.add(cut);
405 list.get(position).setCuts(cuts); 405 list.get(position).setCuts(cuts);
406 } 406 }
407 imageAdapter.notifyItemChanged(position); 407 imageAdapter.notifyItemChanged(position);
408 refreshNum(); 408 refreshNum();
409 } 409 }
410 } else if (resultCode == 1005) { 410 } else if (resultCode == 1005) {
411 int i = data.getIntExtra("position", 0); 411 int i = data.getIntExtra("position", 0);
412 int position = binding.viewPager.getCurrentItem(); 412 int position = binding.viewPager.getCurrentItem();
413 Rect rect = data.getParcelableExtra("cut"); 413 Rect rect = data.getParcelableExtra("cut");
414 if (rect != null) { 414 if (rect != null) {
415 ImageBean.Cut cut = new ImageBean.Cut(); 415 ImageBean.Cut cut = new ImageBean.Cut();
416 cut.setRect1(rect); 416 cut.setRect1(rect);
417 cut.setSelect(false); 417 cut.setSelect(false);
418 list.get(position).getCuts().remove(i); 418 list.get(position).getCuts().remove(i);
419 list.get(position).getCuts().add(i, cut); 419 list.get(position).getCuts().add(i, cut);
420 imageAdapter.notifyItemChanged(position); 420 imageAdapter.notifyItemChanged(position);
421 refreshNum(); 421 refreshNum();
422 } else { 422 } else {
423 list.get(position).getCuts().remove(i); 423 list.get(position).getCuts().remove(i);
424 imageAdapter.notifyItemChanged(position); 424 imageAdapter.notifyItemChanged(position);
425 refreshNum(); 425 refreshNum();
426 } 426 }
427 } 427 }
428 } else if (requestCode == 1002 && resultCode == RESULT_OK && !TextUtils.isEmpty(filePath)) { 428 } else if (requestCode == 1002 && resultCode == RESULT_OK && !TextUtils.isEmpty(filePath)) {
429 Bitmap b = BitmapUtils.compress(BitmapFactory.decodeFile(filePath)); 429 Bitmap b = BitmapUtils.compress(BitmapFactory.decodeFile(filePath));
430 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";
431 CommonUtil.saveBitmapToUri(b, path); 431 CommonUtil.saveBitmapToUri(b, path);
432 int position = binding.viewPager.getCurrentItem(); 432 int position = binding.viewPager.getCurrentItem();
433 list.remove(position); 433 list.remove(position);
434 ImageBean imageBean = new ImageBean(); 434 ImageBean imageBean = new ImageBean();
435 imageBean.setPath(path); 435 imageBean.setPath(path);
436 list.add(position, imageBean); 436 list.add(position, imageBean);
437 imageAdapter.notifyItemChanged(position); 437 imageAdapter.notifyItemChanged(position);
438 clearText(); 438 clearText();
439 refreshNum(); 439 refreshNum();
440 } 440 }
441 } 441 }
442 442
443 private void back() { 443 private void back() {
444 showTipDialog("温馨提示", "是否确认退出?", "取消", "确定", new TipDialog.TipDialogInterface() { 444 showTipDialog("温馨提示", "是否确认退出?", "取消", "确定", new TipDialog.TipDialogInterface() {
445 @Override 445 @Override
446 public void onConfirm(Dialog dialog) { 446 public void onConfirm(Dialog dialog) {
447 dialog.dismiss(); 447 dialog.dismiss();
448 finish(); 448 finish();
449 } 449 }
450 450
451 @Override 451 @Override
452 public void onCancel(Dialog dialog) { 452 public void onCancel(Dialog dialog) {
453 dialog.dismiss(); 453 dialog.dismiss();
454 } 454 }
455 }); 455 });
456 } 456 }
457 457
458 @Override 458 @Override
459 public boolean onKeyDown(int keyCode, KeyEvent event) { 459 public boolean onKeyDown(int keyCode, KeyEvent event) {
460 if (keyCode == KeyEvent.KEYCODE_BACK) { 460 if (keyCode == KeyEvent.KEYCODE_BACK) {
461 back(); 461 back();
462 return true; 462 return true;
463 } 463 }
464 return super.onKeyDown(keyCode, event); 464 return super.onKeyDown(keyCode, event);
465 } 465 }
466 } 466 }
467 467