public static PhotoPickerFragment newInstance(boolean showCamera, boolean showGif, boolean previewEnable, int column, int maxCount, ArrayList<String> originalPhotos) { Bundle args = new Bundle(); args.putBoolean(EXTRA_CAMERA, showCamera); args.putBoolean(EXTRA_GIF, showGif); args.putBoolean(EXTRA_PREVIEW_ENABLED, previewEnable); args.putInt(EXTRA_COLUMN, column); args.putInt(EXTRA_COUNT, maxCount); args.putStringArrayList(EXTRA_ORIGIN, originalPhotos); PhotoPickerFragment fragment = new PhotoPickerFragment(); fragment.setArguments(args); return fragment; }
@Override public void onClick(View v) { if (listPopupWindow.isShowing()) { listPopupWindow.dismiss(); } else if (!getActivity().isFinishing()) { adjustHeight(); listPopupWindow.show(); } } });
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setRetainInstance(true); mGlideRequestManager = Glide.with(this); directories = new ArrayList<>(); originalPhotos = getArguments().getStringArrayList(EXTRA_ORIGIN); column = getArguments().getInt(EXTRA_COLUMN, DEFAULT_COLUMN_NUMBER); boolean showCamera = getArguments().getBoolean(EXTRA_CAMERA, true); boolean previewEnable = getArguments().getBoolean(EXTRA_PREVIEW_ENABLED, true); photoGridAdapter = new PhotoGridAdapter(getActivity(), mGlideRequestManager, directories, originalPhotos, column); photoGridAdapter.setShowCamera(showCamera); photoGridAdapter.setPreviewEnable(previewEnable); listAdapter = new PopupDirectoryListAdapter(mGlideRequestManager, directories); Bundle mediaStoreArgs = new Bundle(); boolean showGif = getArguments().getBoolean(EXTRA_GIF); mediaStoreArgs.putBoolean(EXTRA_SHOW_GIF, showGif); MediaStoreHelper.getPhotoDirs(getActivity(), mediaStoreArgs, new MediaStoreHelper.PhotosResultCallback() { @Override public void onResultCallback(List<PhotoDirectory> dirs) { directories.clear(); directories.addAll(dirs); photoGridAdapter.notifyDataSetChanged(); listAdapter.notifyDataSetChanged(); adjustHeight(); } }); captureManager = new ImageCaptureManager(getActivity()); }
public void updateTitleDoneItem(){ if(menuIsInflated){ if(pickerFragment != null && pickerFragment.isResumed()){ List<String> photos = pickerFragment.getPhotoGridAdapter().getSelectedPhotos(); int size = photos == null ? 0 : photos.size(); menuDoneItem.setEnabled(size > 0); if(maxCount > 1){ menuDoneItem.setTitle(getString(R.string.__picker_done_with_count, size, maxCount)); }else { menuDoneItem.setTitle(getString(R.string.__picker_done)); } }else if(imagePagerFragment != null && imagePagerFragment.isResumed()){ //预览界面 完成总是可点的,没选就把默认当前图片 menuDoneItem.setEnabled(true); } } }
if (pickerFragment == null) { pickerFragment = PhotoPickerFragment .newInstance(showCamera, showGif, previewEnabled, columnNumber, maxCount, originalPhotos); getSupportFragmentManager() .beginTransaction() pickerFragment.getPhotoGridAdapter().setOnItemCheckListener(new OnItemCheckListener() { @Override public boolean onItemCheck(int position, Photo photo, final int selectedItemCount) {
@Override public void onResume() { super.onResume(); if(getActivity() instanceof PhotoPickerActivity){ PhotoPickerActivity photoPickerActivity = (PhotoPickerActivity) getActivity(); photoPickerActivity.updateTitleDoneItem(); } }
@Override public boolean onItemCheck(int position, Photo photo, final int selectedItemCount) { menuDoneItem.setEnabled(selectedItemCount > 0); if (maxCount <= 1) { List<String> photos = pickerFragment.getPhotoGridAdapter().getSelectedPhotos(); if (!photos.contains(photo.getPath())) { photos.clear(); pickerFragment.getPhotoGridAdapter().notifyDataSetChanged(); } return true; } if (selectedItemCount > maxCount) { Toast.makeText(getActivity(), getString(R.string.__picker_over_max_count_tips, maxCount), LENGTH_LONG).show(); return false; } if(maxCount > 1){ menuDoneItem.setTitle(getString(R.string.__picker_done_with_count, selectedItemCount, maxCount)); }else { menuDoneItem.setTitle(getString(R.string.__picker_done)); } return true; } });
@Override public void onResultCallback(List<PhotoDirectory> dirs) { directories.clear(); directories.addAll(dirs); photoGridAdapter.notifyDataSetChanged(); listAdapter.notifyDataSetChanged(); adjustHeight(); } });
public void adjustHeight() { if (listAdapter == null) return; int count = listAdapter.getCount(); count = count < COUNT_MAX ? count : COUNT_MAX; if (listPopupWindow != null) { listPopupWindow.setHeight(count * getResources().getDimensionPixelOffset(R.dimen.__picker_item_directory_height)); } }
@Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { switch (requestCode) { case PermissionsConstant.REQUEST_CAMERA: case PermissionsConstant.REQUEST_EXTERNAL_WRITE: if (PermissionsUtils.checkWriteStoragePermission(this) && PermissionsUtils.checkCameraPermission(this)) { openCamera(); } break; } } }
@Override public void onClick(View v, int position, boolean showCamera) { final int index = showCamera ? position - 1 : position; List<String> photos = photoGridAdapter.getCurrentPhotoPaths(); ImagePagerFragment imagePagerFragment = ImagePagerFragment.newInstance(photos, index); ((PhotoPickerActivity) getActivity()).addImagePagerFragment(imagePagerFragment); } });
@Override public boolean onOptionsItemSelected(MenuItem item) { if (item.getItemId() == android.R.id.home) { super.onBackPressed(); return true; } if (item.getItemId() == R.id.done) { Intent intent = new Intent(); ArrayList<String> selectedPhotos = null; if(pickerFragment != null){ selectedPhotos = pickerFragment.getPhotoGridAdapter().getSelectedPhotoPaths(); } //当在列表没有选择图片,又在详情界面时默认选择当前图片 if(selectedPhotos.size() <= 0){ if(imagePagerFragment != null && imagePagerFragment.isResumed()){ // 预览界面 selectedPhotos = imagePagerFragment.getCurrentPath(); } } if(selectedPhotos != null && selectedPhotos.size() > 0){ intent.putStringArrayListExtra(KEY_SELECTED_PHOTOS, selectedPhotos); setResult(RESULT_OK, intent); finish(); } return true; } return super.onOptionsItemSelected(item); }
@Override public void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == ImageCaptureManager.REQUEST_TAKE_PHOTO && resultCode == RESULT_OK) { if (captureManager == null) { FragmentActivity activity = getActivity(); captureManager = new ImageCaptureManager(activity); } captureManager.galleryAddPic(); if (directories.size() > 0) { String path = captureManager.getCurrentPhotoPath(); PhotoDirectory directory = directories.get(INDEX_ALL_PHOTOS); directory.getPhotos().add(INDEX_ALL_PHOTOS, new Photo(path.hashCode(), path)); directory.setCoverPath(path); photoGridAdapter.notifyDataSetChanged(); } } }
listPopupWindow = new ListPopupWindow(getActivity()); listPopupWindow.setWidth(ListPopupWindow.MATCH_PARENT); listPopupWindow.setAnchorView(btSwitchDirectory);