Commit 4bc0e09f5123fd92b54a2d00353ccb0409a9e50f

Authored by 吴奎庆
1 parent d23df86b

错误文件类型过滤

app/src/main/java/com/cnlive/strike/debug/MainActivity.java
... ... @@ -76,14 +76,15 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe
76 76 new ImagePicker.Builder()
77 77 .maxNum(9)
78 78 .setSelectGif(true)
  79 + .isSinglePick(true)
79 80 .maxImageSize(25 * 1024 * 1024)
80 81 .maxVideoSize(100*1024*1024)
81 82 .isReturnUri(AndroidQUtil.isAndroidQ())
82 83 .selectMode(PickerConfig.PICKER_IMAGE_VIDEO)
83 84 .defaultSelectList(new ArrayList<Media>())
  85 + .doCrop(1, 1, 900, 900)
84 86 .needCamera(true)
85 87 .builder()
86   -// .doCrop(1, 1, 900, 900)
87 88 .start(this, PickerConfig.PICKER_IMAGE, PickerConfig.DEFAULT_RESULT_CODE);
88 89 break;
89 90 }
... ...
config.gradle
... ... @@ -21,7 +21,7 @@ ext {
21 21 //编译方式
22 22 debug : false,
23 23 //版本号
24   - version: "1.0.6",
  24 + version: "1.0.8",
25 25 //Lib库前缀
26 26 packeg : "com.cnlive.media",
27 27 //Lib库名称
... ...
lib_media/src/main/java/com/cnlive/media/frame/view/MediaPickerFragmentView.java
... ... @@ -94,7 +94,9 @@ public class MediaPickerFragmentView implements MvpView {
94 94 if (media.mediaType != 1) {
95 95 showMessage("请选择图片");
96 96 } else {
97   - MediaOpenActivityObservable.getInstance().openActivity(new MediaOpenInfo(2, media));
  97 + if (isCheckMediaSupport(mActivity, media)) {
  98 + MediaOpenActivityObservable.getInstance().openActivity(new MediaOpenInfo(2, media));
  99 + }
98 100 }
99 101 } else {
100 102 if (isCheckMediaSupport(mActivity, media)) {
... ... @@ -149,7 +151,7 @@ public class MediaPickerFragmentView implements MvpView {
149 151 }
150 152  
151 153 //文件是否存在
152   - if (media.size <= 0) {
  154 + if (media.size <= 0||media.isFail()) {
153 155 showMessage(mFragment.getResources().getString(R.string.string_file_err));
154 156 return false;
155 157 }
... ... @@ -169,6 +171,12 @@ public class MediaPickerFragmentView implements MvpView {
169 171 showMessage(mFragment.getResources().getString(R.string.media_msg_video_limit));
170 172 return false;
171 173 }
  174 +
  175 + //文件格式
  176 + if (media.mediaType == 1 && FileTypeUtil.checkImageType(media.path)) {
  177 + showMessage(mFragment.getResources().getString(R.string.media_msg_img_limit));
  178 + return false;
  179 + }
172 180 //视频时长限制
173 181 if (media.mediaType == 3 && media.duration > mActivity.maxVideoTime) {
174 182 showMessage(mFragment.getResources().getString(R.string.media_msg_time_limit) + (MediaStringUtils.gennerMinSec(mActivity.maxVideoTime / 1000)));
... ...
lib_media/src/main/java/com/cnlive/media/frame/view/MediaView.java
... ... @@ -239,7 +239,7 @@ public class MediaView implements MvpView {
239 239 if (mActivity.selects.indexOf(mMedia) < 0) {
240 240 previewBottomAdapter = new PreviewBottomMediaAdapter(mActivity, 0, mActivity.isPre);
241 241 } else {
242   - previewBottomAdapter = new PreviewBottomMediaAdapter(mActivity, mActivity.selects.indexOf(mMedia),true);
  242 + previewBottomAdapter = new PreviewBottomMediaAdapter(mActivity, mActivity.selects.indexOf(mMedia), true);
243 243 }
244 244 bottomRv.setAdapter(previewBottomAdapter);
245 245 if (mActivity.selects != null && mActivity.selects.size() > 0) {
... ... @@ -315,7 +315,7 @@ public class MediaView implements MvpView {
315 315 }
316 316 //文件是否存在
317 317 //文件是否存在
318   - if (media.size <= 0) {
  318 + if (media.size <= 0 || media.isFail()) {
319 319 showMessage(mActivity.getResources().getString(R.string.string_file_err));
320 320 return false;
321 321 }
... ... @@ -335,6 +335,12 @@ public class MediaView implements MvpView {
335 335 showMessage(mActivity.getResources().getString(R.string.media_msg_video_limit));
336 336 return false;
337 337 }
  338 +
  339 + //文件格式
  340 + if (media.mediaType == 1 && FileTypeUtil.checkImageType(media.path)) {
  341 + showMessage(mActivity.getResources().getString(R.string.media_msg_img_limit));
  342 + return false;
  343 + }
338 344 //视频时长限制
339 345 if (media.mediaType == 3 && media.duration > mActivity.maxVideoTime) {
340 346 showMessage(mActivity.getResources().getString(R.string.media_msg_time_limit) + (MediaStringUtils.gennerMinSec(mActivity.maxVideoTime / 1000)));
... ... @@ -454,7 +460,7 @@ public class MediaView implements MvpView {
454 460 barTitle.setText(barTitleText);
455 461 checkLayout.setVisibility(View.GONE);
456 462 } else {
457   - if (mActivity.allMedias.get(0).mediaType==0) {
  463 + if (mActivity.allMedias.get(0).mediaType == 0) {
458 464 String barTitleText = String.format(mActivity.getResources().getString(R.string.btn_bar_title), mActivity.allMedias.indexOf(media), mActivity.allMedias.size() - 1);
459 465 barTitle.setText(barTitleText);
460 466 checkLayout.setVisibility(View.VISIBLE);
... ...
lib_media/src/main/java/com/cnlive/media/media/entity/Media.java
... ... @@ -38,6 +38,16 @@ public class Media implements Parcelable {
38 38 public int imgHeight;
39 39  
40 40 public boolean isLongImg;
  41 + //损坏图片
  42 + public boolean isFail;
  43 +
  44 + public boolean isFail() {
  45 + return isFail;
  46 + }
  47 +
  48 + public void setFail(boolean fail) {
  49 + isFail = fail;
  50 + }
41 51  
42 52 public int getImgWidth() {
43 53 return imgWidth;
... ...
lib_media/src/main/java/com/cnlive/media/utils/FileTypeUtil.java
... ... @@ -223,7 +223,7 @@ public class FileTypeUtil {
223 223  
224 224 private static final String video_types = ".avi.asf.asx.flv.lsf.lsx.mov.mp3.mp4.mpeg.mpg4";
225 225 private static final String gif_types = ".gif";
226   - private static final String no_support_types = ".bmp";
  226 + private static final String no_support_types = ".bmp.tiff";
227 227  
228 228 public static boolean checkVideoType(String path) {
229 229 if (TextUtils.isEmpty(path)) return false;
... ... @@ -234,6 +234,15 @@ public class FileTypeUtil {
234 234 if (TextUtils.isEmpty(type)) return false;
235 235 return !video_types.contains(type);
236 236 }
  237 + public static boolean checkImageType(String path) {
  238 + if (TextUtils.isEmpty(path)) return false;
  239 + int end = path.lastIndexOf(".");
  240 + if (end <= 0) return false;
  241 +
  242 + String type = path.substring(end);
  243 + if (TextUtils.isEmpty(type)) return false;
  244 + return no_support_types.contains(type);
  245 + }
237 246  
238 247 public static boolean isGif(String path) {
239 248 if (TextUtils.isEmpty(path)) return false;
... ...
lib_media/src/main/java/com/cnlive/media/utils/GlideCacheUtil.java
... ... @@ -329,16 +329,16 @@ public class GlideCacheUtil {
329 329 }
330 330 if (AndroidQUtil.isAndroidQ()) {
331 331 view.setTag(mediaUri.toString());
332   - showAndroidQ(context, media.mediaType, mediaUri, view, loading, option);
  332 + showAndroidQ(context, media, mediaUri, view, loading, option);
333 333 } else {
334 334 if (media.mediaType == 1) {
335   - showNoAndroidQ(context, media.mediaType, media.fileUri, view, loading, option);
  335 + showNoAndroidQ(context, media, media.fileUri, view, loading, option);
336 336 } else if (media.mediaType == 3) {
337 337 if (ThumbnailsUtils.thumbnails.containsKey(media.id + "")) {
338   - showVideoNoAndroidQ(context, media.mediaType, ThumbnailsUtils.thumbnails.get(media.id + ""), view, loading, option);
  338 + showVideoNoAndroidQ(context, media, ThumbnailsUtils.thumbnails.get(media.id + ""), view, loading, option);
339 339 } else {
340 340 view.setTag(media.id);
341   - showVideoThumbnail(context, media.mediaType, media.id, media.path, view, loading, option);
  341 + showVideoThumbnail(context, media, media.id, media.path, view, loading, option);
342 342 }
343 343 }
344 344 }
... ... @@ -349,13 +349,14 @@ public class GlideCacheUtil {
349 349 }
350 350 }
351 351  
352   - private static void showAndroidQUri(Context context, Uri path, ImageView view, ProgressBar loading, RequestOptions option) {
  352 + private static void showAndroidQUri(Context context, Media media, Uri path, ImageView view, ProgressBar loading, RequestOptions option) {
353 353 RequestBuilder rb = Glide.with(context).load(path);
354 354 rb.listener(new RequestListener() {
355 355 @Override
356 356 public boolean onLoadFailed(@Nullable GlideException e, Object model, Target target, boolean isFirstResource) {
357 357 view.setScaleType(ImageView.ScaleType.CENTER);
358 358 if (loading != null) loading.setVisibility(View.GONE);
  359 + media.setFail(true);
359 360 return false;
360 361 }
361 362  
... ... @@ -369,7 +370,7 @@ public class GlideCacheUtil {
369 370 rb.apply(option).into(view);
370 371 }
371 372  
372   - private static void showAndroidQ(Context context, int mediaType, Uri mediaUri, ImageView view, ProgressBar loading, RequestOptions option) {
  373 + private static void showAndroidQ(Context context, Media media, Uri mediaUri, ImageView view, ProgressBar loading, RequestOptions option) {
373 374  
374 375 Observable.create(new ObservableOnSubscribe<Bitmap>() {
375 376 @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
... ... @@ -391,14 +392,14 @@ public class GlideCacheUtil {
391 392 @Override
392 393 public void onNext(Bitmap bean) {
393 394 if (view.getTag() != null && mediaUri.toString().equals(view.getTag())) {
394   - showThumbnail(context, bean, view, loading, option);
  395 + showThumbnail(context, media,bean, view, loading, option);
395 396 }
396 397 }
397 398  
398 399 @Override
399 400 public void onError(Throwable e) {
400 401 if (view.getTag() != null && mediaUri.toString().equals(view.getTag())) {
401   - showAndroidQUri(context, mediaUri, view, loading, option);
  402 + showAndroidQUri(context,media, mediaUri, view, loading, option);
402 403 }
403 404 if (loading != null) loading.setVisibility(View.GONE);
404 405 }
... ... @@ -410,13 +411,14 @@ public class GlideCacheUtil {
410 411 });
411 412 }
412 413  
413   - private static void showVideoNoAndroidQ(Context context, int mediaType, String path, ImageView view, ProgressBar loading, RequestOptions option) {
  414 + private static void showVideoNoAndroidQ(Context context, Media media, String path, ImageView view, ProgressBar loading, RequestOptions option) {
414 415 RequestBuilder rb = Glide.with(context).load(path);
415 416 rb.listener(new RequestListener() {
416 417 @Override
417 418 public boolean onLoadFailed(@Nullable GlideException e, Object model, Target target, boolean isFirstResource) {
418 419 view.setScaleType(ImageView.ScaleType.CENTER);
419 420 if (loading != null) loading.setVisibility(View.GONE);
  421 + media.setFail(true);
420 422 return false;
421 423 }
422 424  
... ... @@ -430,13 +432,14 @@ public class GlideCacheUtil {
430 432 rb.thumbnail(0.05f).apply(option).into(view);
431 433 }
432 434  
433   - private static void showNoAndroidQ(Context context, int mediaType, String path, ImageView view, ProgressBar loading, RequestOptions option) {
  435 + private static void showNoAndroidQ(Context context, Media media, String path, ImageView view, ProgressBar loading, RequestOptions option) {
434 436 RequestBuilder rb = Glide.with(context).load(path);
435 437 rb.listener(new RequestListener() {
436 438 @Override
437 439 public boolean onLoadFailed(@Nullable GlideException e, Object model, Target target, boolean isFirstResource) {
438 440 view.setScaleType(ImageView.ScaleType.CENTER);
439 441 if (loading != null) loading.setVisibility(View.GONE);
  442 + media.setFail(true);
440 443 return false;
441 444 }
442 445  
... ... @@ -451,7 +454,7 @@ public class GlideCacheUtil {
451 454 }
452 455  
453 456  
454   - private static void showVideoThumbnail(Context context, int mediaType, long id, String path, ImageView view, ProgressBar loading, RequestOptions option) {
  457 + private static void showVideoThumbnail(Context context, Media media, long id, String path, ImageView view, ProgressBar loading, RequestOptions option) {
455 458 // // 步骤1:创建被观察者 = Flowable
456 459 Flowable.create(new FlowableOnSubscribe<Bitmap>() {
457 460 @Override
... ... @@ -472,12 +475,12 @@ public class GlideCacheUtil {
472 475 @Override
473 476 public void onNext(Bitmap thumbnails) {
474 477 if (view.getTag() != null && view.getTag().toString().equals(id + ""))
475   - showThumbnail(context, thumbnails, view, loading, option);
  478 + showThumbnail(context, media, thumbnails, view, loading, option);
476 479 }
477 480  
478 481 @Override
479 482 public void onError(Throwable t) {
480   - showNoAndroidQ(context, mediaType, path, view, loading, option);
  483 + showNoAndroidQ(context, media, path, view, loading, option);
481 484 if (loading != null) loading.setVisibility(View.GONE);
482 485 }
483 486  
... ... @@ -488,13 +491,14 @@ public class GlideCacheUtil {
488 491 }
489 492  
490 493  
491   - private static void showThumbnail(Context context, Bitmap bm, ImageView view, ProgressBar loading, RequestOptions option) {
  494 + private static void showThumbnail(Context context, Media media, Bitmap bm, ImageView view, ProgressBar loading, RequestOptions option) {
492 495 RequestBuilder rb = Glide.with(context).load(bm);
493 496 rb.listener(new RequestListener() {
494 497 @Override
495 498 public boolean onLoadFailed(@Nullable GlideException e, Object model, Target target, boolean isFirstResource) {
496 499 view.setScaleType(ImageView.ScaleType.CENTER);
497 500 if (loading != null) loading.setVisibility(View.GONE);
  501 + media.setFail(true);
498 502 return false;
499 503 }
500 504  
... ...
lib_media/src/main/res/values/strings.xml
... ... @@ -40,6 +40,7 @@
40 40 <string name="media_msg_time_limit">请压缩和剪切后上传,时长最大只支持</string>
41 41  
42 42 <string name="media_msg_video_limit">不支持这种格式的视频</string>
  43 + <string name="media_msg_img_limit">不支持这种格式的图片</string>
43 44  
44 45 <string name="msg_gif_limit">请选择其他图片,Gif格式不被支持</string>
45 46 <string name="select_null">请选择文件</string>
... ... @@ -64,6 +65,6 @@
64 65 <string name="msg_no_camera">没有系统相机</string>
65 66 <string name="msg_no_camera_permission">相机开启失败,请开启系统相机权限</string>
66 67 <string name="msg_error_camera">相机开启失败</string>
67   - <string name="string_file_err">文件损坏</string>
  68 + <string name="string_file_err">文件损坏</string>
68 69  
69 70 </resources>
... ...