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