diff --git a/README.md b/README.md
index 3bda46d..4e2d7a6 100644
--- a/README.md
+++ b/README.md
@@ -138,6 +138,7 @@ You can customize something ...
#### Common
* `showVideoMedia()` : Not only load image, but also load video
+* `showImageAndVideoMedia()` : Load both images and video
* `setPreviewMaxCount(Int) (default: 25)`
* `setPeekHeight(Int)`
* `setPeekHeightResId(R.dimen.xxx)`
diff --git a/app/src/main/java/gun0912/tedbottompickerdemo/MainActivity.java b/app/src/main/java/gun0912/tedbottompickerdemo/MainActivity.java
index 754e98e..85ca5c9 100644
--- a/app/src/main/java/gun0912/tedbottompickerdemo/MainActivity.java
+++ b/app/src/main/java/gun0912/tedbottompickerdemo/MainActivity.java
@@ -4,7 +4,6 @@
import android.net.Uri;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
-import android.util.Log;
import android.util.TypedValue;
import android.view.LayoutInflater;
import android.view.View;
@@ -12,6 +11,7 @@
import android.widget.Button;
import android.widget.FrameLayout;
import android.widget.ImageView;
+import android.widget.TextView;
import android.widget.Toast;
import com.bumptech.glide.Glide;
@@ -28,80 +28,109 @@
import io.reactivex.disposables.Disposable;
public class MainActivity extends AppCompatActivity {
-
- private ImageView iv_image;
private List selectedUriList;
private Uri selectedUri;
private Disposable singleImageDisposable;
private Disposable multiImageDisposable;
- private ViewGroup mSelectedImagesContainer;
private RequestManager requestManager;
+ private ImageView ivImage;
+ private TextView tvFilePath;
+ private ViewGroup selectedImagesContainer;
+
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
- iv_image = findViewById(R.id.iv_image);
- mSelectedImagesContainer = findViewById(R.id.selected_photos_container);
+ tvFilePath = findViewById(R.id.tv_path);
+ ivImage = findViewById(R.id.iv_image);
+ selectedImagesContainer = findViewById(R.id.selected_photos_container);
requestManager = Glide.with(this);
+ setImageAndVideoPickerButton();
setSingleShowButton();
setMultiShowButton();
setRxSingleShowButton();
setRxMultiShowButton();
-
}
private void setSingleShowButton() {
-
Button btnSingleShow = findViewById(R.id.btn_single_show);
btnSingleShow.setOnClickListener(view -> {
PermissionListener permissionlistener = new PermissionListener() {
@Override
public void onPermissionGranted() {
-
TedBottomPicker.with(MainActivity.this)
//.setPeekHeight(getResources().getDisplayMetrics().heightPixels/2)
.setSelectedUri(selectedUri)
//.showVideoMedia()
.setPeekHeight(1200)
.show(uri -> {
- Log.d("ted", "uri: " + uri);
- Log.d("ted", "uri.getPath(): " + uri.getPath());
selectedUri = uri;
- iv_image.setVisibility(View.VISIBLE);
- mSelectedImagesContainer.setVisibility(View.GONE);
+ tvFilePath.setText(selectedUri.toString());
+ ivImage.setVisibility(View.VISIBLE);
+ selectedImagesContainer.setVisibility(View.GONE);
requestManager
.load(uri)
- .into(iv_image);
+ .into(ivImage);
});
-
-
}
@Override
public void onPermissionDenied(ArrayList deniedPermissions) {
- Toast.makeText(MainActivity.this, "Permission Denied\n" + deniedPermissions.toString(), Toast.LENGTH_SHORT).show();
+ showNoPermissionToast(deniedPermissions);
}
+ };
+ checkPermission(permissionlistener);
+ });
+ }
+ private void setImageAndVideoPickerButton() {
+ Button btnSingleShow = findViewById(R.id.btn_single_image_video);
+ btnSingleShow.setOnClickListener(view -> {
+ PermissionListener permissionlistener = new PermissionListener() {
+ @Override
+ public void onPermissionGranted() {
+ TedBottomPicker.with(MainActivity.this)
+ .setSelectedUri(selectedUri)
+ .showImageAndVideoMedia()
+ .setPeekHeight(1200)
+ .show(uri -> {
+ selectedUri = uri;
+
+ tvFilePath.setText(selectedUri.toString());
+ ivImage.setVisibility(View.VISIBLE);
+ selectedImagesContainer.setVisibility(View.GONE);
+
+ requestManager
+ .load(uri)
+ .into(ivImage);
+ });
+ }
+
+ @Override
+ public void onPermissionDenied(ArrayList deniedPermissions) {
+ showNoPermissionToast(deniedPermissions);
+ }
};
checkPermission(permissionlistener);
});
}
- private void setMultiShowButton() {
+ private void showNoPermissionToast(ArrayList deniedPermissions) {
+ Toast.makeText(MainActivity.this, "Permission Denied\n" + deniedPermissions.toString(), Toast.LENGTH_SHORT).show();
+ }
+ private void setMultiShowButton() {
Button btnMultiShow = findViewById(R.id.btn_multi_show);
btnMultiShow.setOnClickListener(view -> {
-
PermissionListener permissionlistener = new PermissionListener() {
@Override
public void onPermissionGranted() {
-
TedBottomPicker.with(MainActivity.this)
//.setPeekHeight(getResources().getDisplayMetrics().heightPixels/2)
.setPeekHeight(1600)
@@ -113,74 +142,60 @@ public void onPermissionGranted() {
selectedUriList = uriList;
showUriList(uriList);
});
-
-
}
@Override
public void onPermissionDenied(ArrayList deniedPermissions) {
- Toast.makeText(MainActivity.this, "Permission Denied\n" + deniedPermissions.toString(), Toast.LENGTH_SHORT).show();
+ showNoPermissionToast(deniedPermissions);
}
-
-
};
checkPermission(permissionlistener);
-
});
-
}
-
private void setRxSingleShowButton() {
-
Button btnSingleShow = findViewById(R.id.btn_rx_single_show);
btnSingleShow.setOnClickListener(view -> {
PermissionListener permissionlistener = new PermissionListener() {
@Override
public void onPermissionGranted() {
-
singleImageDisposable = TedRxBottomPicker.with(MainActivity.this)
//.setPeekHeight(getResources().getDisplayMetrics().heightPixels/2)
.setSelectedUri(selectedUri)
- //.showVideoMedia()
+ .showVideoMedia()
.setPeekHeight(1200)
.show()
.subscribe(uri -> {
selectedUri = uri;
- iv_image.setVisibility(View.VISIBLE);
- mSelectedImagesContainer.setVisibility(View.GONE);
+ tvFilePath.setText(selectedUri.toString());
+ ivImage.setVisibility(View.VISIBLE);
+ selectedImagesContainer.setVisibility(View.GONE);
requestManager
.load(uri)
- .into(iv_image);
- }, Throwable::printStackTrace);
-
+ .into(ivImage);
+ }, Throwable::printStackTrace);
}
@Override
public void onPermissionDenied(ArrayList deniedPermissions) {
- Toast.makeText(MainActivity.this, "Permission Denied\n" + deniedPermissions.toString(), Toast.LENGTH_SHORT).show();
+ showNoPermissionToast(deniedPermissions);
}
-
-
};
checkPermission(permissionlistener);
});
}
-
private void setRxMultiShowButton() {
-
Button btnRxMultiShow = findViewById(R.id.btn_rx_multi_show);
btnRxMultiShow.setOnClickListener(view -> {
PermissionListener permissionlistener = new PermissionListener() {
@Override
public void onPermissionGranted() {
-
multiImageDisposable = TedRxBottomPicker.with(MainActivity.this)
//.setPeekHeight(getResources().getDisplayMetrics().heightPixels/2)
.setPeekHeight(1600)
@@ -193,21 +208,16 @@ public void onPermissionGranted() {
selectedUriList = uris;
showUriList(uris);
}, Throwable::printStackTrace);
-
-
}
@Override
public void onPermissionDenied(ArrayList deniedPermissions) {
- Toast.makeText(MainActivity.this, "Permission Denied\n" + deniedPermissions.toString(), Toast.LENGTH_SHORT).show();
+ showNoPermissionToast(deniedPermissions);
}
-
-
};
checkPermission(permissionlistener);
});
-
}
private void checkPermission(PermissionListener permissionlistener) {
@@ -221,17 +231,16 @@ private void checkPermission(PermissionListener permissionlistener) {
private void showUriList(List uriList) {
// Remove all views before
// adding the new ones.
- mSelectedImagesContainer.removeAllViews();
+ selectedImagesContainer.removeAllViews();
- iv_image.setVisibility(View.GONE);
- mSelectedImagesContainer.setVisibility(View.VISIBLE);
+ ivImage.setVisibility(View.GONE);
+ selectedImagesContainer.setVisibility(View.VISIBLE);
int widthPixel = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 100, getResources().getDisplayMetrics());
int heightPixel = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 100, getResources().getDisplayMetrics());
for (Uri uri : uriList) {
-
View imageHolder = LayoutInflater.from(this).inflate(R.layout.image_item, null);
ImageView thumbnail = imageHolder.findViewById(R.id.media_image);
@@ -240,12 +249,10 @@ private void showUriList(List uriList) {
.apply(new RequestOptions().fitCenter())
.into(thumbnail);
- mSelectedImagesContainer.addView(imageHolder);
+ selectedImagesContainer.addView(imageHolder);
thumbnail.setLayoutParams(new FrameLayout.LayoutParams(widthPixel, heightPixel));
-
}
-
}
@Override
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index 9c5067a..952d2b5 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -1,72 +1,77 @@
-
+ android:text="Show image/video picker" />
+
-
-
+ android:text="Show image picker (Multi)" />
-
+
+
-
-
+ android:foregroundGravity="left">
-
diff --git a/tedbottompicker/src/main/java/gun0912/tedbottompicker/TedBottomPicker.java b/tedbottompicker/src/main/java/gun0912/tedbottompicker/TedBottomPicker.java
index cc6e8cf..3a208dd 100644
--- a/tedbottompicker/src/main/java/gun0912/tedbottompicker/TedBottomPicker.java
+++ b/tedbottompicker/src/main/java/gun0912/tedbottompicker/TedBottomPicker.java
@@ -24,6 +24,4 @@ public void showMultiImage(OnMultiImageSelectedListener onMultiImageSelectedList
create().show(fragmentActivity.getSupportFragmentManager());
}
}
-
-
}
diff --git a/tedbottompicker/src/main/java/gun0912/tedbottompicker/TedBottomSheetDialogFragment.java b/tedbottompicker/src/main/java/gun0912/tedbottompicker/TedBottomSheetDialogFragment.java
index ac9e277..e299c54 100644
--- a/tedbottompicker/src/main/java/gun0912/tedbottompicker/TedBottomSheetDialogFragment.java
+++ b/tedbottompicker/src/main/java/gun0912/tedbottompicker/TedBottomSheetDialogFragment.java
@@ -43,7 +43,6 @@
import com.bumptech.glide.Glide;
import com.bumptech.glide.request.RequestOptions;
import com.gun0912.tedonactivityresult.TedOnActivityResult;
-import com.gun0912.tedonactivityresult.listener.OnActivityResultListener;
import java.io.File;
import java.io.IOException;
@@ -62,30 +61,29 @@ public class TedBottomSheetDialogFragment extends BottomSheetDialogFragment {
private static final String EXTRA_CAMERA_IMAGE_URI = "camera_image_uri";
private static final String EXTRA_CAMERA_SELECTED_IMAGE_URI = "camera_selected_image_uri";
+
public BaseBuilder builder;
- private GalleryAdapter imageGalleryAdapter;
- private View view_title_container;
- private TextView tv_title;
- private Button btn_done;
- private FrameLayout selected_photos_container_frame;
- private LinearLayout selected_photos_container;
+ private GalleryAdapter imageGalleryAdapter;
- private TextView selected_photos_empty;
private List selectedUriList;
private List tempUriList;
private Uri cameraImageUri;
- private RecyclerView rc_gallery;
- private BottomSheetBehavior.BottomSheetCallback mBottomSheetBehaviorCallback = new BottomSheetBehavior.BottomSheetCallback() {
+ private FrameLayout selectedPhotosContainerFrame;
+ private LinearLayout selectedPhotosContainer;
+ private Button btnDone;
+ private RecyclerView rcGallery;
+ private TextView selectedPhotosEmpty;
+ private TextView tvTitle;
+ private View viewTitleContainer;
+ private BottomSheetBehavior.BottomSheetCallback bottomSheetCallback = new BottomSheetBehavior.BottomSheetCallback() {
@Override
public void onStateChanged(@NonNull View bottomSheet, int newState) {
if (newState == BottomSheetBehavior.STATE_HIDDEN) {
dismissAllowingStateLoss();
}
-
-
}
@Override
@@ -122,7 +120,6 @@ public void show(FragmentManager fragmentManager) {
ft.commitAllowingStateLoss();
}
-
@Override
public void setupDialog(Dialog dialog, int style) {
super.setupDialog(dialog, style);
@@ -132,7 +129,7 @@ public void setupDialog(Dialog dialog, int style) {
(CoordinatorLayout.LayoutParams) ((View) contentView.getParent()).getLayoutParams();
CoordinatorLayout.Behavior behavior = layoutParams.getBehavior();
if (behavior instanceof BottomSheetBehavior) {
- ((BottomSheetBehavior) behavior).setBottomSheetCallback(mBottomSheetBehaviorCallback);
+ ((BottomSheetBehavior) behavior).setBottomSheetCallback(bottomSheetCallback);
if (builder != null && builder.peekHeight > 0) {
((BottomSheetBehavior) behavior).setPeekHeight(builder.peekHeight);
}
@@ -151,7 +148,6 @@ public void setupDialog(Dialog dialog, int style) {
selectedUriList = new ArrayList<>();
-
if (builder.onImageSelectedListener != null && cameraImageUri != null) {
addUri(cameraImageUri);
} else if (builder.onMultiImageSelectedListener != null && tempUriList != null) {
@@ -165,29 +161,17 @@ public void setupDialog(Dialog dialog, int style) {
}
private void setSelectionView() {
-
if (builder.emptySelectionText != null) {
- selected_photos_empty.setText(builder.emptySelectionText);
+ selectedPhotosEmpty.setText(builder.emptySelectionText);
}
-
-
}
private void setDoneButton() {
-
if (builder.completeButtonText != null) {
- btn_done.setText(builder.completeButtonText);
+ btnDone.setText(builder.completeButtonText);
}
- btn_done.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View view) {
-
- onMultiSelectComplete();
-
-
- }
- });
+ btnDone.setOnClickListener(view -> onMultiSelectComplete());
}
private void onMultiSelectComplete() {
@@ -211,62 +195,50 @@ private void onMultiSelectComplete() {
private void checkMultiMode() {
if (!isMultiSelect()) {
- btn_done.setVisibility(View.GONE);
- selected_photos_container_frame.setVisibility(View.GONE);
+ btnDone.setVisibility(View.GONE);
+ selectedPhotosContainerFrame.setVisibility(View.GONE);
}
-
}
private void initView(View contentView) {
-
- view_title_container = contentView.findViewById(R.id.view_title_container);
- rc_gallery = contentView.findViewById(R.id.rc_gallery);
- tv_title = contentView.findViewById(R.id.tv_title);
- btn_done = contentView.findViewById(R.id.btn_done);
-
- selected_photos_container_frame = contentView.findViewById(R.id.selected_photos_container_frame);
- selected_photos_container = contentView.findViewById(R.id.selected_photos_container);
- selected_photos_empty = contentView.findViewById(R.id.selected_photos_empty);
+ viewTitleContainer = contentView.findViewById(R.id.view_title_container);
+ rcGallery = contentView.findViewById(R.id.rc_gallery);
+ tvTitle = contentView.findViewById(R.id.tv_title);
+ btnDone = contentView.findViewById(R.id.btn_done);
+
+ selectedPhotosContainerFrame = contentView.findViewById(R.id.selected_photos_container_frame);
+ selectedPhotosContainer = contentView.findViewById(R.id.selected_photos_container);
+ selectedPhotosEmpty = contentView.findViewById(R.id.selected_photos_empty);
}
private void setRecyclerView() {
-
GridLayoutManager gridLayoutManager = new GridLayoutManager(getActivity(), 3);
- rc_gallery.setLayoutManager(gridLayoutManager);
- rc_gallery.addItemDecoration(new GridSpacingItemDecoration(gridLayoutManager.getSpanCount(), builder.spacing, builder.includeEdgeSpacing));
+ rcGallery.setLayoutManager(gridLayoutManager);
+ rcGallery.addItemDecoration(new GridSpacingItemDecoration(gridLayoutManager.getSpanCount(), builder.spacing, builder.includeEdgeSpacing));
updateAdapter();
}
private void updateAdapter() {
-
- imageGalleryAdapter = new GalleryAdapter(
- getActivity()
- , builder);
- rc_gallery.setAdapter(imageGalleryAdapter);
- imageGalleryAdapter.setOnItemClickListener(new GalleryAdapter.OnItemClickListener() {
- @Override
- public void onItemClick(View view, int position) {
-
- GalleryAdapter.PickerTile pickerTile = imageGalleryAdapter.getItem(position);
-
- switch (pickerTile.getTileType()) {
- case GalleryAdapter.PickerTile.CAMERA:
- startCameraIntent();
- break;
- case GalleryAdapter.PickerTile.GALLERY:
- startGalleryIntent();
- break;
- case GalleryAdapter.PickerTile.IMAGE:
- if (pickerTile.getImageUri() != null) {
- complete(pickerTile.getImageUri());
- }
-
- break;
-
- default:
- errorMessage();
- }
-
+ imageGalleryAdapter = new GalleryAdapter(getContext(), builder);
+ rcGallery.setAdapter(imageGalleryAdapter);
+ imageGalleryAdapter.setOnItemClickListener((view, position) -> {
+
+ GalleryAdapter.PickerTile pickerTile = imageGalleryAdapter.getItem(position);
+
+ switch (pickerTile.getTileType()) {
+ case GalleryAdapter.PickerTile.CAMERA:
+ startCameraIntent();
+ break;
+ case GalleryAdapter.PickerTile.GALLERY:
+ startGalleryIntent();
+ break;
+ case GalleryAdapter.PickerTile.IMAGE:
+ if (pickerTile.getImageUri() != null) {
+ complete(pickerTile.getImageUri());
+ }
+ break;
+ default:
+ errorMessage();
}
});
}
@@ -283,7 +255,6 @@ private void complete(final Uri uri) {
builder.onImageSelectedListener.onImageSelected(uri);
dismissAllowingStateLoss();
}
-
}
private void addUri(final Uri uri) {
@@ -299,19 +270,17 @@ private void addUri(final Uri uri) {
return;
}
-
selectedUriList.add(uri);
final View rootView = LayoutInflater.from(getActivity()).inflate(R.layout.tedbottompicker_selected_item, null);
- ImageView thumbnail = rootView.findViewById(R.id.selected_photo);
- ImageView iv_close = rootView.findViewById(R.id.iv_close);
+ ImageView ivThumbnail = rootView.findViewById(R.id.selected_photo);
+ ImageView ivClose = rootView.findViewById(R.id.iv_close);
rootView.setTag(uri);
- selected_photos_container.addView(rootView, 0);
-
+ selectedPhotosContainer.addView(rootView, 0);
int px = (int) getResources().getDimension(R.dimen.tedbottompicker_selected_image_height);
- thumbnail.setLayoutParams(new FrameLayout.LayoutParams(px, px));
+ ivThumbnail.setLayoutParams(new FrameLayout.LayoutParams(px, px));
if (builder.imageProvider == null) {
Glide.with(getActivity())
@@ -321,24 +290,16 @@ private void addUri(final Uri uri) {
.centerCrop()
.placeholder(R.drawable.ic_gallery)
.error(R.drawable.img_error))
- .into(thumbnail);
+ .into(ivThumbnail);
} else {
- builder.imageProvider.onProvideImage(thumbnail, uri);
+ builder.imageProvider.onProvideImage(ivThumbnail, uri);
}
-
if (builder.deSelectIconDrawable != null) {
- iv_close.setImageDrawable(builder.deSelectIconDrawable);
+ ivClose.setImageDrawable(builder.deSelectIconDrawable);
}
- iv_close.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- removeImage(uri);
-
- }
- });
-
+ ivClose.setOnClickListener(v -> removeImage(uri));
updateSelectedView();
imageGalleryAdapter.setSelectedUriList(selectedUriList, uri);
@@ -346,16 +307,14 @@ public void onClick(View v) {
}
private void removeImage(Uri uri) {
-
selectedUriList.remove(uri);
-
- for (int i = 0; i < selected_photos_container.getChildCount(); i++) {
- View childView = selected_photos_container.getChildAt(i);
+ for (int i = 0; i < selectedPhotosContainer.getChildCount(); i++) {
+ View childView = selectedPhotosContainer.getChildAt(i);
if (childView.getTag().equals(uri)) {
- selected_photos_container.removeViewAt(i);
+ selectedPhotosContainer.removeViewAt(i);
break;
}
}
@@ -365,53 +324,56 @@ private void removeImage(Uri uri) {
}
private void updateSelectedView() {
-
if (selectedUriList == null || selectedUriList.size() == 0) {
- selected_photos_empty.setVisibility(View.VISIBLE);
- selected_photos_container.setVisibility(View.GONE);
+ selectedPhotosEmpty.setVisibility(View.VISIBLE);
+ selectedPhotosContainer.setVisibility(View.GONE);
} else {
- selected_photos_empty.setVisibility(View.GONE);
- selected_photos_container.setVisibility(View.VISIBLE);
+ selectedPhotosEmpty.setVisibility(View.GONE);
+ selectedPhotosContainer.setVisibility(View.VISIBLE);
}
}
private void startCameraIntent() {
- Intent cameraInent;
+ Intent cameraIntent;
File mediaFile;
- if (builder.mediaType == BaseBuilder.MediaType.IMAGE) {
- cameraInent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
- mediaFile = getImageFile();
- } else {
- cameraInent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
- mediaFile = getVideoFile();
+ switch (builder.mediaType) {
+ case BaseBuilder.MediaType.IMAGE:
+ cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
+ mediaFile = getImageFile();
+ break;
+ case BaseBuilder.MediaType.VIDEO:
+ cameraIntent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
+ mediaFile = getVideoFile();
+ break;
+ case BaseBuilder.MediaType.IMAGE_AND_VIDEO:
+ default:
+ cameraIntent = new Intent();
+ mediaFile = getVideoFile();
+ break;
}
- if (cameraInent.resolveActivity(getActivity().getPackageManager()) == null) {
+ if (cameraIntent.resolveActivity(getActivity().getPackageManager()) == null) {
errorMessage("This Application do not have Camera Application");
return;
}
-
Uri photoURI = FileProvider.getUriForFile(getContext(), getContext().getApplicationContext().getPackageName() + ".provider", mediaFile);
- List resolvedIntentActivities = getContext().getPackageManager().queryIntentActivities(cameraInent, PackageManager.MATCH_DEFAULT_ONLY);
+ List resolvedIntentActivities = getContext().getPackageManager().queryIntentActivities(cameraIntent, PackageManager.MATCH_DEFAULT_ONLY);
for (ResolveInfo resolvedIntentInfo : resolvedIntentActivities) {
String packageName = resolvedIntentInfo.activityInfo.packageName;
getContext().grantUriPermission(packageName, photoURI, Intent.FLAG_GRANT_WRITE_URI_PERMISSION | Intent.FLAG_GRANT_READ_URI_PERMISSION);
}
- cameraInent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI);
+ cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI);
TedOnActivityResult.with(getActivity())
- .setIntent(cameraInent)
- .setListener(new OnActivityResultListener() {
- @Override
- public void onActivityResult(int resultCode, Intent data) {
- if (resultCode == Activity.RESULT_OK) {
- onActivityResultCamera(cameraImageUri);
- }
+ .setIntent(cameraIntent)
+ .setListener((resultCode, data) -> {
+ if (resultCode == Activity.RESULT_OK) {
+ onActivityResultCamera(cameraImageUri);
}
})
.startActivityForResult();
@@ -425,8 +387,9 @@ private File getImageFile() {
String imageFileName = "JPEG_" + timeStamp + "_";
File storageDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
- if (!storageDir.exists())
+ if (!storageDir.exists()) {
storageDir.mkdirs();
+ }
imageFile = File.createTempFile(
imageFileName, /* prefix */
@@ -434,7 +397,6 @@ private File getImageFile() {
storageDir /* directory */
);
-
// Save a file: path for use with ACTION_VIEW intents
cameraImageUri = Uri.fromFile(imageFile);
} catch (IOException e) {
@@ -442,7 +404,6 @@ private File getImageFile() {
errorMessage("Could not create imageFile for camera");
}
-
return imageFile;
}
@@ -454,8 +415,9 @@ private File getVideoFile() {
String imageFileName = "VIDEO_" + timeStamp + "_";
File storageDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MOVIES);
- if (!storageDir.exists())
+ if (!storageDir.exists()) {
storageDir.mkdirs();
+ }
videoFile = File.createTempFile(
imageFileName, /* prefix */
@@ -463,7 +425,6 @@ private File getVideoFile() {
storageDir /* directory */
);
-
// Save a file: path for use with ACTION_VIEW intents
cameraImageUri = Uri.fromFile(videoFile);
} catch (IOException e) {
@@ -471,7 +432,6 @@ private File getVideoFile() {
errorMessage("Could not create imageFile for camera");
}
-
return videoFile;
}
@@ -487,14 +447,12 @@ private void errorMessage(String message) {
private void startGalleryIntent() {
Intent galleryIntent;
- Uri uri;
if (builder.mediaType == BaseBuilder.MediaType.IMAGE) {
galleryIntent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
galleryIntent.setType("image/*");
} else {
galleryIntent = new Intent(Intent.ACTION_PICK, MediaStore.Video.Media.EXTERNAL_CONTENT_URI);
galleryIntent.setType("video/*");
-
}
if (galleryIntent.resolveActivity(getActivity().getPackageManager()) == null) {
@@ -504,12 +462,9 @@ private void startGalleryIntent() {
TedOnActivityResult.with(getActivity())
.setIntent(galleryIntent)
- .setListener(new OnActivityResultListener() {
- @Override
- public void onActivityResult(int resultCode, Intent data) {
- if (resultCode == Activity.RESULT_OK) {
- onActivityResultGallery(data);
- }
+ .setListener((resultCode, data) -> {
+ if (resultCode == Activity.RESULT_OK) {
+ onActivityResultGallery(data);
}
})
.startActivityForResult();
@@ -520,25 +475,23 @@ private void errorMessage() {
}
private void setTitle() {
-
if (!builder.showTitle) {
- tv_title.setVisibility(View.GONE);
+ tvTitle.setVisibility(View.GONE);
if (!isMultiSelect()) {
- view_title_container.setVisibility(View.GONE);
+ viewTitleContainer.setVisibility(View.GONE);
}
return;
}
if (!TextUtils.isEmpty(builder.title)) {
- tv_title.setText(builder.title);
+ tvTitle.setText(builder.title);
}
if (builder.titleBackgroundResId > 0) {
- tv_title.setBackgroundResource(builder.titleBackgroundResId);
+ tvTitle.setBackgroundResource(builder.titleBackgroundResId);
}
-
}
private boolean isMultiSelect() {
@@ -546,28 +499,21 @@ private boolean isMultiSelect() {
}
private void onActivityResultCamera(final Uri cameraImageUri) {
-
MediaScannerConnection.scanFile(getContext(), new String[]{cameraImageUri.getPath()}, new String[]{"image/jpeg"}, new MediaScannerConnection.MediaScannerConnectionClient() {
@Override
public void onMediaScannerConnected() {
-
}
@Override
public void onScanCompleted(String s, Uri uri) {
- getActivity().runOnUiThread(new Runnable() {
- @Override
- public void run() {
- updateAdapter();
- complete(cameraImageUri);
- }
+ getActivity().runOnUiThread(() -> {
+ updateAdapter();
+ complete(cameraImageUri);
});
-
}
});
}
-
private void onActivityResultGallery(Intent data) {
Uri temp = data.getData();
@@ -585,10 +531,8 @@ private void onActivityResultGallery(Intent data) {
}
complete(selectedImageUri);
-
}
-
public interface OnMultiImageSelectedListener {
void onImagesSelected(List uriList);
}
@@ -842,6 +786,11 @@ public T showVideoMedia() {
return (T) this;
}
+ public T showImageAndVideoMedia() {
+ this.mediaType = MediaType.IMAGE_AND_VIDEO;
+ return (T) this;
+ }
+
public TedBottomSheetDialogFragment create() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN
&& ContextCompat.checkSelfPermission(fragmentActivity, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
@@ -858,14 +807,11 @@ public TedBottomSheetDialogFragment create() {
}
@Retention(RetentionPolicy.SOURCE)
- @IntDef({MediaType.IMAGE, MediaType.VIDEO})
+ @IntDef({MediaType.IMAGE, MediaType.VIDEO, MediaType.IMAGE_AND_VIDEO})
public @interface MediaType {
int IMAGE = 1;
int VIDEO = 2;
+ int IMAGE_AND_VIDEO = 3;
}
-
-
}
-
-
}
diff --git a/tedbottompicker/src/main/java/gun0912/tedbottompicker/TedRxBottomPicker.java b/tedbottompicker/src/main/java/gun0912/tedbottompicker/TedRxBottomPicker.java
index fc9a8e0..76df299 100644
--- a/tedbottompicker/src/main/java/gun0912/tedbottompicker/TedRxBottomPicker.java
+++ b/tedbottompicker/src/main/java/gun0912/tedbottompicker/TedRxBottomPicker.java
@@ -13,7 +13,6 @@ public static Builder with(FragmentActivity fragmentActivity) {
return new Builder(fragmentActivity);
}
-
public static class Builder extends BaseBuilder {
private Builder(FragmentActivity fragmentActivity) {
@@ -46,5 +45,4 @@ public Single> showMultiImage() {
});
}
}
-
}
diff --git a/tedbottompicker/src/main/java/gun0912/tedbottompicker/adapter/GalleryAdapter.java b/tedbottompicker/src/main/java/gun0912/tedbottompicker/adapter/GalleryAdapter.java
index 89e93a2..73a5db6 100644
--- a/tedbottompicker/src/main/java/gun0912/tedbottompicker/adapter/GalleryAdapter.java
+++ b/tedbottompicker/src/main/java/gun0912/tedbottompicker/adapter/GalleryAdapter.java
@@ -32,14 +32,12 @@
*/
public class GalleryAdapter extends RecyclerView.Adapter {
-
private ArrayList pickerTiles;
private Context context;
private TedBottomSheetDialogFragment.BaseBuilder builder;
private OnItemClickListener onItemClickListener;
private List selectedUriList;
-
public GalleryAdapter(Context context, TedBottomSheetDialogFragment.BaseBuilder builder) {
this.context = context;
@@ -60,44 +58,45 @@ public GalleryAdapter(Context context, TedBottomSheetDialogFragment.BaseBuilder
try {
String[] columns;
String orderBy;
+ String selection = null;
Uri uri;
if (builder.mediaType == TedBottomSheetDialogFragment.BaseBuilder.MediaType.IMAGE) {
uri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
columns = new String[]{MediaStore.Images.Media.DATA};
orderBy = MediaStore.Images.Media.DATE_ADDED + " DESC";
- } else {
+ } else if (builder.mediaType == TedBottomSheetDialogFragment.BaseBuilder.MediaType.VIDEO) {
uri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
columns = new String[]{MediaStore.Video.VideoColumns.DATA};
orderBy = MediaStore.Video.VideoColumns.DATE_ADDED + " DESC";
+ } else {
+ uri = MediaStore.Files.getContentUri("external");
+ orderBy = MediaStore.Files.FileColumns.DATE_ADDED + " DESC";
+ columns = new String[]{MediaStore.Files.FileColumns.DATA};
+ selection = MediaStore.Files.FileColumns.MEDIA_TYPE + "="
+ + MediaStore.Files.FileColumns.MEDIA_TYPE_IMAGE
+ + " OR "
+ + MediaStore.Files.FileColumns.MEDIA_TYPE + "="
+ + MediaStore.Files.FileColumns.MEDIA_TYPE_VIDEO;
}
-
-
-
- cursor = context.getApplicationContext().getContentResolver().query(uri, columns, null, null, orderBy);
- //imageCursor = sContext.getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, columns, null, null, orderBy);
-
-
+ cursor = context.getApplicationContext()
+ .getContentResolver()
+ .query(uri, columns, selection, null, orderBy);
if (cursor != null) {
-
int count = 0;
while (cursor.moveToNext() && count < builder.previewMaxCount) {
-
String dataIndex;
if (builder.mediaType == TedBottomSheetDialogFragment.BaseBuilder.MediaType.IMAGE) {
dataIndex = MediaStore.Images.Media.DATA;
- }else{
+ } else {
dataIndex = MediaStore.Video.VideoColumns.DATA;
}
String imageLocation = cursor.getString(cursor.getColumnIndex(dataIndex));
File imageFile = new File(imageLocation);
pickerTiles.add(new PickerTile(Uri.fromFile(imageFile)));
count++;
-
}
-
}
-
} catch (Exception e) {
e.printStackTrace();
} finally {
@@ -105,8 +104,6 @@ public GalleryAdapter(Context context, TedBottomSheetDialogFragment.BaseBuilder
cursor.close();
}
}
-
-
}
public void setSelectedUriList(List selectedUriList, @NonNull Uri uri) {
@@ -114,7 +111,6 @@ public void setSelectedUriList(List selectedUriList, @NonNull Uri uri) {
int position = -1;
-
PickerTile pickerTile;
for (int i = 0; i < pickerTiles.size(); i++) {
pickerTile = pickerTiles.get(i);
@@ -124,12 +120,9 @@ public void setSelectedUriList(List selectedUriList, @NonNull Uri uri) {
}
}
-
if (position > 0) {
notifyItemChanged(position);
}
-
-
}
@NonNull
@@ -141,18 +134,16 @@ public GalleryViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewT
@Override
public void onBindViewHolder(@NonNull final GalleryViewHolder holder, int position) {
-
PickerTile pickerTile = getItem(position);
-
boolean isSelected = false;
if (pickerTile.isCameraTile()) {
- holder.iv_thumbnail.setBackgroundResource(builder.cameraTileBackgroundResId);
- holder.iv_thumbnail.setImageDrawable(builder.cameraTileDrawable);
+ holder.ivThumbnail.setBackgroundResource(builder.cameraTileBackgroundResId);
+ holder.ivThumbnail.setImageDrawable(builder.cameraTileDrawable);
} else if (pickerTile.isGalleryTile()) {
- holder.iv_thumbnail.setBackgroundResource(builder.galleryTileBackgroundResId);
- holder.iv_thumbnail.setImageDrawable(builder.galleryTileDrawable);
+ holder.ivThumbnail.setBackgroundResource(builder.galleryTileBackgroundResId);
+ holder.ivThumbnail.setImageDrawable(builder.galleryTileDrawable);
} else {
Uri uri = pickerTile.getImageUri();
@@ -163,20 +154,14 @@ public void onBindViewHolder(@NonNull final GalleryViewHolder holder, int positi
.apply(new RequestOptions().centerCrop()
.placeholder(R.drawable.ic_gallery)
.error(R.drawable.img_error))
- .into(holder.iv_thumbnail);
+ .into(holder.ivThumbnail);
} else {
- builder.imageProvider.onProvideImage(holder.iv_thumbnail, uri);
+ builder.imageProvider.onProvideImage(holder.ivThumbnail, uri);
}
-
-
isSelected = selectedUriList.contains(uri);
-
-
}
-
if (holder.root != null) {
-
Drawable foregroundDrawable;
if (builder.selectedForegroundDrawable != null) {
@@ -188,14 +173,8 @@ public void onBindViewHolder(@NonNull final GalleryViewHolder holder, int positi
holder.root.setForeground(isSelected ? foregroundDrawable : null);
}
-
if (onItemClickListener != null) {
- holder.itemView.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View view) {
- onItemClickListener.onItemClick(holder.itemView, holder.getAdapterPosition());
- }
- });
+ holder.itemView.setOnClickListener(view -> onItemClickListener.onItemClick(holder.itemView, holder.getAdapterPosition()));
}
}
@@ -217,7 +196,6 @@ public interface OnItemClickListener {
void onItemClick(View view, int position);
}
-
public static class PickerTile {
public static final int IMAGE = 1;
@@ -290,18 +268,12 @@ private boolean isGalleryTile() {
class GalleryViewHolder extends RecyclerView.ViewHolder {
TedSquareFrameLayout root;
-
-
- TedSquareImageView iv_thumbnail;
+ TedSquareImageView ivThumbnail;
private GalleryViewHolder(View view) {
super(view);
root = view.findViewById(R.id.root);
- iv_thumbnail = view.findViewById(R.id.iv_thumbnail);
-
+ ivThumbnail = view.findViewById(R.id.iv_thumbnail);
}
-
}
-
-
}
diff --git a/tedbottompicker/src/main/java/gun0912/tedbottompicker/util/RealPathUtil.java b/tedbottompicker/src/main/java/gun0912/tedbottompicker/util/RealPathUtil.java
index a7356a2..97f0a32 100644
--- a/tedbottompicker/src/main/java/gun0912/tedbottompicker/util/RealPathUtil.java
+++ b/tedbottompicker/src/main/java/gun0912/tedbottompicker/util/RealPathUtil.java
@@ -19,12 +19,9 @@ public class RealPathUtil {
public static String getRealPath(Context context, Uri uri) {
String realPath;
- // SDK < API11
- if (Build.VERSION.SDK_INT < 19) {
+ if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {
realPath = RealPathUtil.getRealPathFromURI_API11to18(context, uri);
- }
- // SDK > 19 (Android 4.4)
- else {
+ } else {
realPath = RealPathUtil.getRealPathFromURI_API19(context, uri);
}
@@ -33,7 +30,6 @@ public static String getRealPath(Context context, Uri uri) {
@SuppressLint("NewApi")
public static String getRealPathFromURI_API19(final Context context, final Uri uri) {
-
// check here to KITKAT or new version
final boolean isKitKat = Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT;
@@ -77,7 +73,7 @@ else if (isMediaDocument(uri)) {
}
final String selection = "_id=?";
- final String[] selectionArgs = new String[] { split[1] };
+ final String[] selectionArgs = new String[]{split[1]};
return getDataColumn(context, contentUri, selection,
selectionArgs);
@@ -104,14 +100,10 @@ else if ("file".equalsIgnoreCase(uri.getScheme())) {
* Get the value of the data column for this Uri. This is useful for
* MediaStore Uris, and other file-based ContentProviders.
*
- * @param context
- * The context.
- * @param uri
- * The Uri to query.
- * @param selection
- * (Optional) Filter used in the query.
- * @param selectionArgs
- * (Optional) Selection arguments used in the query.
+ * @param context The context.
+ * @param uri The Uri to query.
+ * @param selection (Optional) Filter used in the query.
+ * @param selectionArgs (Optional) Selection arguments used in the query.
* @return The value of the _data column, which is typically a file path.
*/
public static String getDataColumn(Context context, Uri uri,
@@ -119,11 +111,16 @@ public static String getDataColumn(Context context, Uri uri,
Cursor cursor = null;
final String column = "_data";
- final String[] projection = { column };
+ final String[] projection = {column};
try {
- cursor = context.getContentResolver().query(uri, projection,
- selection, selectionArgs, null);
+ cursor = context.getContentResolver().query(
+ uri,
+ projection,
+ selection,
+ selectionArgs,
+ null
+ );
if (cursor != null && cursor.moveToFirst()) {
final int index = cursor.getColumnIndexOrThrow(column);
return cursor.getString(index);
@@ -136,8 +133,7 @@ public static String getDataColumn(Context context, Uri uri,
}
/**
- * @param uri
- * The Uri to check.
+ * @param uri The Uri to check.
* @return Whether the Uri authority is ExternalStorageProvider.
*/
public static boolean isExternalStorageDocument(Uri uri) {
@@ -146,8 +142,7 @@ public static boolean isExternalStorageDocument(Uri uri) {
}
/**
- * @param uri
- * The Uri to check.
+ * @param uri The Uri to check.
* @return Whether the Uri authority is DownloadsProvider.
*/
public static boolean isDownloadsDocument(Uri uri) {
@@ -156,8 +151,7 @@ public static boolean isDownloadsDocument(Uri uri) {
}
/**
- * @param uri
- * The Uri to check.
+ * @param uri The Uri to check.
* @return Whether the Uri authority is MediaProvider.
*/
public static boolean isMediaDocument(Uri uri) {
@@ -166,8 +160,7 @@ public static boolean isMediaDocument(Uri uri) {
}
/**
- * @param uri
- * The Uri to check.
+ * @param uri The Uri to check.
* @return Whether the Uri authority is Google Photos.
*/
public static boolean isGooglePhotosUri(Uri uri) {
@@ -177,15 +170,20 @@ public static boolean isGooglePhotosUri(Uri uri) {
@SuppressLint("NewApi")
public static String getRealPathFromURI_API11to18(Context context, Uri contentUri) {
- String[] proj = { MediaStore.Images.Media.DATA };
+ String[] projection = {MediaStore.Images.Media.DATA};
String result = null;
CursorLoader cursorLoader = new CursorLoader(
context,
- contentUri, proj, null, null, null);
+ contentUri,
+ projection,
+ null,
+ null,
+ null
+ );
Cursor cursor = cursorLoader.loadInBackground();
- if(cursor != null){
+ if (cursor != null) {
int column_index =
cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
@@ -193,13 +191,4 @@ public static String getRealPathFromURI_API11to18(Context context, Uri contentUr
}
return result;
}
-
- public static String getRealPathFromURI_BelowAPI11(Context context, Uri contentUri){
- String[] proj = { MediaStore.Images.Media.DATA };
- Cursor cursor = context.getContentResolver().query(contentUri, proj, null, null, null);
- int column_index
- = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
- cursor.moveToFirst();
- return cursor.getString(column_index);
- }
}
\ No newline at end of file
diff --git a/tedbottompicker/src/main/java/gun0912/tedbottompicker/view/TedEmptyRecyclerView.java b/tedbottompicker/src/main/java/gun0912/tedbottompicker/view/TedEmptyRecyclerView.java
index d31c0ed..62e1fe4 100644
--- a/tedbottompicker/src/main/java/gun0912/tedbottompicker/view/TedEmptyRecyclerView.java
+++ b/tedbottompicker/src/main/java/gun0912/tedbottompicker/view/TedEmptyRecyclerView.java
@@ -39,8 +39,6 @@ public void onChanged() {
}
};
-
-
@Override
public void setAdapter(@Nullable Adapter adapter) {
final Adapter oldAdapter = getAdapter();
diff --git a/tedbottompicker/src/main/java/gun0912/tedbottompicker/view/TedSquareImageView.java b/tedbottompicker/src/main/java/gun0912/tedbottompicker/view/TedSquareImageView.java
index 7e4c7e9..630f883 100644
--- a/tedbottompicker/src/main/java/gun0912/tedbottompicker/view/TedSquareImageView.java
+++ b/tedbottompicker/src/main/java/gun0912/tedbottompicker/view/TedSquareImageView.java
@@ -9,7 +9,6 @@
import gun0912.tedbottompicker.R;
-
/**
* Created by Gil on 09/06/2014.
*/
@@ -35,7 +34,6 @@ public TedSquareImageView(Context context, AttributeSet attrs) {
setForeground(foreground);
}
-
try {
fit_mode = a.getString(R.styleable.TedBottomPickerImageView_fit_mode);
@@ -44,31 +42,22 @@ public TedSquareImageView(Context context, AttributeSet attrs) {
}
}
-
//Squares the thumbnail
@Override
protected void onMeasure(final int widthMeasureSpec, final int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
-
-
if ("height".equals(fit_mode)) {
setMeasuredDimension(heightMeasureSpec, heightMeasureSpec);
-
} else {
setMeasuredDimension(widthMeasureSpec, widthMeasureSpec);
-
}
-
if (foreground != null) {
foreground.setBounds(0, 0, getMeasuredWidth(), getMeasuredHeight());
invalidate();
}
-
-
}
-
/**
* Supply a Drawable that is to be rendered on top of all of the child views
* in the frame layout.
@@ -96,7 +85,6 @@ public void setForeground(Drawable drawable) {
invalidate();
}
-
@Override
protected boolean verifyDrawable(Drawable who) {
return super.verifyDrawable(who) || who == foreground;
@@ -134,6 +122,4 @@ public void draw(Canvas canvas) {
foreground.draw(canvas);
}
}
-
-
}
diff --git a/tedbottompicker/src/main/res/layout/tedbottompicker_content_view.xml b/tedbottompicker/src/main/res/layout/tedbottompicker_content_view.xml
index bf5b154..ad401f9 100644
--- a/tedbottompicker/src/main/res/layout/tedbottompicker_content_view.xml
+++ b/tedbottompicker/src/main/res/layout/tedbottompicker_content_view.xml
@@ -1,29 +1,26 @@
-
-
-
+
-
+ android:layout_height="wrap_content">
+ android:textSize="16sp" />
+ android:textSize="16sp" />
-
-
-
+ android:layout_height="@dimen/tedbottompicker_selected_image_height">
+ android:foregroundGravity="left">
+ android:visibility="gone" />
+ android:textColor="?attr/colorAccent" />
-
-
+ android:layout_height="match_parent" />
diff --git a/tedbottompicker/src/main/res/layout/tedbottompicker_grid_item.xml b/tedbottompicker/src/main/res/layout/tedbottompicker_grid_item.xml
index 2724bd3..db613fe 100644
--- a/tedbottompicker/src/main/res/layout/tedbottompicker_grid_item.xml
+++ b/tedbottompicker/src/main/res/layout/tedbottompicker_grid_item.xml
@@ -1,24 +1,18 @@
-
-
+ app:matchHeightToWidth="true">
-
+ android:scaleType="centerInside" />
\ No newline at end of file
diff --git a/tedbottompicker/src/main/res/layout/tedbottompicker_selected_item.xml b/tedbottompicker/src/main/res/layout/tedbottompicker_selected_item.xml
index 5f9b49d..d4a0c42 100755
--- a/tedbottompicker/src/main/res/layout/tedbottompicker_selected_item.xml
+++ b/tedbottompicker/src/main/res/layout/tedbottompicker_selected_item.xml
@@ -1,35 +1,25 @@
-
-
-
+
+ android:scaleType="centerCrop" />
-
+ android:src="@drawable/ic_clear" />
diff --git a/tedbottompicker/src/main/res/values/strings.xml b/tedbottompicker/src/main/res/values/strings.xml
index cc23aa1..d6f5abf 100644
--- a/tedbottompicker/src/main/res/values/strings.xml
+++ b/tedbottompicker/src/main/res/values/strings.xml
@@ -1,11 +1,8 @@
-
Select Image
No Image
Done
-
Already %1$d images selected
You have to choice %1$d images
-