From 5b758396c8d563e220cc79e6d5fc0a4414d637c7 Mon Sep 17 00:00:00 2001 From: JSpiner Date: Tue, 13 Feb 2018 13:27:55 +0900 Subject: [PATCH 1/6] create onErrorNotImplementedexception, change onErrorListener --- .../tedbottompicker/TedBottomPicker.java | 68 +++++++++++-------- .../OnErrorNotImplementedException.java | 20 ++++++ 2 files changed, 61 insertions(+), 27 deletions(-) create mode 100644 tedbottompicker/src/main/java/gun0912/tedbottompicker/exception/OnErrorNotImplementedException.java diff --git a/tedbottompicker/src/main/java/gun0912/tedbottompicker/TedBottomPicker.java b/tedbottompicker/src/main/java/gun0912/tedbottompicker/TedBottomPicker.java index 1683620..1a17390 100644 --- a/tedbottompicker/src/main/java/gun0912/tedbottompicker/TedBottomPicker.java +++ b/tedbottompicker/src/main/java/gun0912/tedbottompicker/TedBottomPicker.java @@ -55,6 +55,7 @@ import java.util.Locale; import gun0912.tedbottompicker.adapter.GalleryAdapter; +import gun0912.tedbottompicker.exception.OnErrorNotImplementedException; import gun0912.tedbottompicker.util.RealPathUtil; public class TedBottomPicker extends BottomSheetDialogFragment { @@ -114,7 +115,8 @@ private void setupSavedInstanceState(Bundle savedInstanceState) { if (savedInstanceState == null) { cameraImageUri = builder.selectedUri; tempUriList = builder.selectedUriList; - } else { + } + else { cameraImageUri = savedInstanceState.getParcelable(EXTRA_CAMERA_IMAGE_URI); tempUriList = savedInstanceState.getParcelableArrayList(EXTRA_CAMERA_SELECTED_IMAGE_URI); } @@ -177,7 +179,8 @@ public void setupDialog(Dialog dialog, int style) { if (builder.onImageSelectedListener != null && cameraImageUri != null) { addUri(cameraImageUri); - } else if (builder.onMultiImageSelectedListener != null && tempUriList != null) { + } + else if (builder.onMultiImageSelectedListener != null && tempUriList != null) { for (Uri uri : tempUriList) { addUri(uri); } @@ -219,7 +222,8 @@ private void onMultiSelectComplete() { String message; if (builder.selectMinCountErrorText != null) { message = builder.selectMinCountErrorText; - } else { + } + else { message = String.format(getResources().getString(R.string.select_min_count), builder.selectMinCount); } @@ -273,7 +277,8 @@ public void onItemClick(View view, int position) { GalleryAdapter.PickerTile pickerTile = imageGalleryAdapter.getItem(position); - switch (pickerTile.getTileType()) { + int tileType = pickerTile.getTileType(); + switch (tileType) { case GalleryAdapter.PickerTile.CAMERA: startCameraIntent(); break; @@ -286,7 +291,7 @@ public void onItemClick(View view, int position) { break; default: - errorMessage(); + onError(new IllegalStateException("Unexpected type : " + tileType)); } } @@ -301,12 +306,14 @@ private void complete(final Uri uri) { if (selectedUriList.contains(uri)) { removeImage(uri); - } else { + } + else { addUri(uri); } - } else { + } + else { builder.onImageSelectedListener.onImageSelected(uri); dismissAllowingStateLoss(); } @@ -320,7 +327,8 @@ private boolean addUri(final Uri uri) { String message; if (builder.selectMaxCountErrorText != null) { message = builder.selectMaxCountErrorText; - } else { + } + else { message = String.format(getResources().getString(R.string.select_max_count), builder.selectMaxCount); } @@ -351,7 +359,8 @@ private boolean addUri(final Uri uri) { .placeholder(R.drawable.ic_gallery) .error(R.drawable.img_error) .into(thumbnail); - } else { + } + else { builder.imageProvider.onProvideImage(thumbnail, uri); } @@ -399,7 +408,8 @@ private void updateSelectedView() { if (selectedUriList == null || selectedUriList.size() == 0) { selected_photos_empty.setVisibility(View.VISIBLE); selected_photos_container.setVisibility(View.GONE); - } else { + } + else { selected_photos_empty.setVisibility(View.GONE); selected_photos_container.setVisibility(View.VISIBLE); } @@ -413,13 +423,14 @@ private void startCameraIntent() { if (builder.mediaType == Builder.MediaType.IMAGE) { cameraInent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); mediaFile = getImageFile(); - } else { + } + else { cameraInent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE); mediaFile = getVideoFile(); } if (cameraInent.resolveActivity(getActivity().getPackageManager()) == null) { - errorMessage("This Application do not have Camera Application"); + onError("This Application do not have Camera Application"); return; } @@ -459,7 +470,7 @@ private File getImageFile() { cameraImageUri = Uri.fromFile(imageFile); } catch (IOException e) { e.printStackTrace(); - errorMessage("Could not create imageFile for camera"); + onError("Could not create imageFile for camera"); } @@ -488,20 +499,25 @@ private File getVideoFile() { cameraImageUri = Uri.fromFile(videoFile); } catch (IOException e) { e.printStackTrace(); - errorMessage("Could not create imageFile for camera"); + onError("Could not create imageFile for camera"); } return videoFile; } - private void errorMessage(String message) { + private void onError(String message) { String errorMessage = message == null ? "Something wrong." : message; + onError(new RuntimeException(errorMessage)); + } + + private void onError(Throwable throwable) { if (builder.onErrorListener == null) { - Toast.makeText(getActivity(), errorMessage, Toast.LENGTH_SHORT).show(); - } else { - builder.onErrorListener.onError(errorMessage); + throw new OnErrorNotImplementedException("Error listener is not implemented", throwable); + } + else { + builder.onErrorListener.onError(throwable); } } @@ -511,14 +527,15 @@ private void startGalleryIntent() { if (builder.mediaType == Builder.MediaType.IMAGE) { galleryIntent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI); galleryIntent.setType("image/*"); - } else { + } + else { galleryIntent = new Intent(Intent.ACTION_PICK, MediaStore.Video.Media.EXTERNAL_CONTENT_URI); galleryIntent.setType("video/*"); } if (galleryIntent.resolveActivity(getActivity().getPackageManager()) == null) { - errorMessage("This Application do not have Gallery Application"); + onError("This Application do not have Gallery Application"); return; } @@ -526,10 +543,6 @@ private void startGalleryIntent() { } - private void errorMessage() { - errorMessage(null); - } - private void setTitle() { if (!builder.showTitle) { @@ -571,7 +584,7 @@ public void onActivityResult(int requestCode, int resultCode, Intent data) { break; default: - errorMessage(); + onError(new IllegalStateException("Unexpected code : " + requestCode)); } @@ -606,7 +619,8 @@ private void onActivityResultGallery(Intent data) { Uri temp = data.getData(); if (temp == null) { - errorMessage(); + onError(new NullPointerException("Intent data is null")); + return; } String realPath = RealPathUtil.getRealPath(getActivity(), temp); @@ -632,7 +646,7 @@ public interface OnImageSelectedListener { } public interface OnErrorListener { - void onError(String message); + void onError(Throwable throwable); } public interface ImageProvider { diff --git a/tedbottompicker/src/main/java/gun0912/tedbottompicker/exception/OnErrorNotImplementedException.java b/tedbottompicker/src/main/java/gun0912/tedbottompicker/exception/OnErrorNotImplementedException.java new file mode 100644 index 0000000..4df80f3 --- /dev/null +++ b/tedbottompicker/src/main/java/gun0912/tedbottompicker/exception/OnErrorNotImplementedException.java @@ -0,0 +1,20 @@ +package gun0912.tedbottompicker.exception; + +public class OnErrorNotImplementedException extends RuntimeException { + + public OnErrorNotImplementedException() { + super(); + } + + public OnErrorNotImplementedException(String message) { + super(message); + } + + public OnErrorNotImplementedException(String message, Throwable cause) { + super(message, cause); + } + + public OnErrorNotImplementedException(Throwable cause) { + super(cause); + } +} From 2015d73bd302f149a60d2db2f1f1b3c824a2cf94 Mon Sep 17 00:00:00 2001 From: JSpiner Date: Mon, 19 Feb 2018 11:17:52 +0900 Subject: [PATCH 2/6] add default error listener, add error handling in adapter --- .../gun0912/tedbottompicker/TedBottomPicker.java | 15 +++++++++------ .../tedbottompicker/adapter/GalleryAdapter.java | 6 +++++- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/tedbottompicker/src/main/java/gun0912/tedbottompicker/TedBottomPicker.java b/tedbottompicker/src/main/java/gun0912/tedbottompicker/TedBottomPicker.java index 1a17390..edfa325 100644 --- a/tedbottompicker/src/main/java/gun0912/tedbottompicker/TedBottomPicker.java +++ b/tedbottompicker/src/main/java/gun0912/tedbottompicker/TedBottomPicker.java @@ -513,12 +513,7 @@ private void onError(String message) { } private void onError(Throwable throwable) { - if (builder.onErrorListener == null) { - throw new OnErrorNotImplementedException("Error listener is not implemented", throwable); - } - else { - builder.onErrorListener.onError(throwable); - } + builder.onErrorListener.onError(throwable); } private void startGalleryIntent() { @@ -691,9 +686,17 @@ public static class Builder { ArrayList selectedUriList; Uri selectedUri; + private OnErrorListener defaultErrorListener = new OnErrorListener() { + @Override + public void onError(Throwable throwable) { + throw new OnErrorNotImplementedException("Error listener is not implemented", throwable); + } + }; + public Builder(@NonNull Context context) { this.context = context; + this.onErrorListener = defaultErrorListener; setCameraTile(R.drawable.ic_camera); setGalleryTile(R.drawable.ic_gallery); diff --git a/tedbottompicker/src/main/java/gun0912/tedbottompicker/adapter/GalleryAdapter.java b/tedbottompicker/src/main/java/gun0912/tedbottompicker/adapter/GalleryAdapter.java index 2a46cdc..8a81efb 100644 --- a/tedbottompicker/src/main/java/gun0912/tedbottompicker/adapter/GalleryAdapter.java +++ b/tedbottompicker/src/main/java/gun0912/tedbottompicker/adapter/GalleryAdapter.java @@ -99,6 +99,7 @@ public GalleryAdapter(Context context, TedBottomPicker.Builder builder) { } catch (Exception e) { e.printStackTrace(); + onError(e); } finally { if (cursor != null && !cursor.isClosed()) { cursor.close(); @@ -220,6 +221,9 @@ public interface OnItemClickListener { public void onItemClick(View view, int position); } + private void onError(Throwable throwable){ + builder.onErrorListener.onError(throwable); + } public static class PickerTile { @@ -263,7 +267,7 @@ public String toString() { } else if (isGalleryTile()) { return "PickerTile"; } else { - return "Invalid item"; + throw new IllegalArgumentException("Invalid item"); } } From e3f1d279c949bf8a775dfebbb397ee6bfbc1b8be Mon Sep 17 00:00:00 2001 From: JSpiner Date: Mon, 19 Feb 2018 11:21:37 +0900 Subject: [PATCH 3/6] fix indent --- .../tedbottompicker/TedBottomPicker.java | 30 +++++++------------ 1 file changed, 10 insertions(+), 20 deletions(-) diff --git a/tedbottompicker/src/main/java/gun0912/tedbottompicker/TedBottomPicker.java b/tedbottompicker/src/main/java/gun0912/tedbottompicker/TedBottomPicker.java index edfa325..1df7cba 100644 --- a/tedbottompicker/src/main/java/gun0912/tedbottompicker/TedBottomPicker.java +++ b/tedbottompicker/src/main/java/gun0912/tedbottompicker/TedBottomPicker.java @@ -115,8 +115,7 @@ private void setupSavedInstanceState(Bundle savedInstanceState) { if (savedInstanceState == null) { cameraImageUri = builder.selectedUri; tempUriList = builder.selectedUriList; - } - else { + } else { cameraImageUri = savedInstanceState.getParcelable(EXTRA_CAMERA_IMAGE_URI); tempUriList = savedInstanceState.getParcelableArrayList(EXTRA_CAMERA_SELECTED_IMAGE_URI); } @@ -179,8 +178,7 @@ public void setupDialog(Dialog dialog, int style) { if (builder.onImageSelectedListener != null && cameraImageUri != null) { addUri(cameraImageUri); - } - else if (builder.onMultiImageSelectedListener != null && tempUriList != null) { + } else if (builder.onMultiImageSelectedListener != null && tempUriList != null) { for (Uri uri : tempUriList) { addUri(uri); } @@ -222,8 +220,7 @@ private void onMultiSelectComplete() { String message; if (builder.selectMinCountErrorText != null) { message = builder.selectMinCountErrorText; - } - else { + } else { message = String.format(getResources().getString(R.string.select_min_count), builder.selectMinCount); } @@ -306,14 +303,12 @@ private void complete(final Uri uri) { if (selectedUriList.contains(uri)) { removeImage(uri); - } - else { + } else { addUri(uri); } - } - else { + } else { builder.onImageSelectedListener.onImageSelected(uri); dismissAllowingStateLoss(); } @@ -327,8 +322,7 @@ private boolean addUri(final Uri uri) { String message; if (builder.selectMaxCountErrorText != null) { message = builder.selectMaxCountErrorText; - } - else { + } else { message = String.format(getResources().getString(R.string.select_max_count), builder.selectMaxCount); } @@ -359,8 +353,7 @@ private boolean addUri(final Uri uri) { .placeholder(R.drawable.ic_gallery) .error(R.drawable.img_error) .into(thumbnail); - } - else { + } else { builder.imageProvider.onProvideImage(thumbnail, uri); } @@ -408,8 +401,7 @@ private void updateSelectedView() { if (selectedUriList == null || selectedUriList.size() == 0) { selected_photos_empty.setVisibility(View.VISIBLE); selected_photos_container.setVisibility(View.GONE); - } - else { + } else { selected_photos_empty.setVisibility(View.GONE); selected_photos_container.setVisibility(View.VISIBLE); } @@ -423,8 +415,7 @@ private void startCameraIntent() { if (builder.mediaType == Builder.MediaType.IMAGE) { cameraInent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); mediaFile = getImageFile(); - } - else { + } else { cameraInent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE); mediaFile = getVideoFile(); } @@ -522,8 +513,7 @@ private void startGalleryIntent() { if (builder.mediaType == Builder.MediaType.IMAGE) { galleryIntent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI); galleryIntent.setType("image/*"); - } - else { + } else { galleryIntent = new Intent(Intent.ACTION_PICK, MediaStore.Video.Media.EXTERNAL_CONTENT_URI); galleryIntent.setType("video/*"); From 58987f0a104fb325cc789a09a1b9ea0ce0171d7f Mon Sep 17 00:00:00 2001 From: JSpiner Date: Mon, 19 Feb 2018 11:22:58 +0900 Subject: [PATCH 4/6] change to stateexception --- .../java/gun0912/tedbottompicker/adapter/GalleryAdapter.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tedbottompicker/src/main/java/gun0912/tedbottompicker/adapter/GalleryAdapter.java b/tedbottompicker/src/main/java/gun0912/tedbottompicker/adapter/GalleryAdapter.java index 8a81efb..fe951d8 100644 --- a/tedbottompicker/src/main/java/gun0912/tedbottompicker/adapter/GalleryAdapter.java +++ b/tedbottompicker/src/main/java/gun0912/tedbottompicker/adapter/GalleryAdapter.java @@ -267,7 +267,7 @@ public String toString() { } else if (isGalleryTile()) { return "PickerTile"; } else { - throw new IllegalArgumentException("Invalid item"); + throw new IllegalStateException("Invalid item"); } } From 4bd1c3fc87d23c4c216ee07b0840c1f74ce12f00 Mon Sep 17 00:00:00 2001 From: jspiner Date: Sun, 27 May 2018 16:02:06 +0900 Subject: [PATCH 5/6] add setErrorListener at README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 57395bf..fce2802 100644 --- a/README.md +++ b/README.md @@ -135,6 +135,7 @@ You can customize something ...
* `showTitle(Boolean) (default: true)` * `setTitleBackgroundResId(R.color.xxx)` * `setImageProvider(ImageProvider)` +* `setOnErrorListener(OnErrorListener onErrorListener)` : If you want load grid image yourself, you can use your ImageProvider #### Single Select From 84c4d6f5915d0f8edd307de62a24bcc9eafe7737 Mon Sep 17 00:00:00 2001 From: jspiner Date: Sun, 27 May 2018 16:11:05 +0900 Subject: [PATCH 6/6] add setOnErrorListener error sample case --- .../gun0912/tedbottompickerdemo/MainActivity.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/app/src/main/java/gun0912/tedbottompickerdemo/MainActivity.java b/app/src/main/java/gun0912/tedbottompickerdemo/MainActivity.java index 90ab191..f67f03a 100644 --- a/app/src/main/java/gun0912/tedbottompickerdemo/MainActivity.java +++ b/app/src/main/java/gun0912/tedbottompickerdemo/MainActivity.java @@ -90,6 +90,13 @@ public void run() { .setSelectedUri(selectedUri) //.showVideoMedia() .setPeekHeight(1200) + .setOnErrorListener(new TedBottomPicker.OnErrorListener() { + @Override + public void onError(Throwable throwable) { + throwable.printStackTrace(); + Toast.makeText(getBaseContext(), "Error : " + throwable.getMessage(), Toast.LENGTH_SHORT).show(); + } + }) .create(); bottomSheetDialogFragment.show(getSupportFragmentManager()); @@ -141,6 +148,13 @@ public void onImagesSelected(ArrayList uriList) { .setCompleteButtonText("Done") .setEmptySelectionText("No Select") .setSelectedUriList(selectedUriList) + .setOnErrorListener(new TedBottomPicker.OnErrorListener() { + @Override + public void onError(Throwable throwable) { + throwable.printStackTrace(); + Toast.makeText(getBaseContext(), "Error : " + throwable.getMessage(), Toast.LENGTH_SHORT).show(); + } + }) .create(); bottomSheetDialogFragment.show(getSupportFragmentManager());