@Override public void onBackPressed() { if (!imagePickerFragment.handleBack()) { super.onBackPressed(); } }
public static ImagePickerFragment newInstance(@Nullable ImagePickerConfig config, @Nullable CameraOnlyConfig cameraOnlyConfig) { ImagePickerFragment fragment = new ImagePickerFragment(); Bundle args = new Bundle(); if (config != null) { args.putParcelable(ImagePickerConfig.class.getSimpleName(), config); } if (cameraOnlyConfig != null) { args.putParcelable(CameraOnlyConfig.class.getSimpleName(), cameraOnlyConfig); } fragment.setArguments(args); return fragment; }
/** * Request for camera permission */ public void captureImageWithPermission() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { final boolean isCameraGranted = ActivityCompat .checkSelfPermission(getActivity(), Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED; final boolean isWriteGranted = ActivityCompat .checkSelfPermission(getActivity(), Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED; if (isCameraGranted && isWriteGranted) { captureImage(); } else { logger.w("Camera permission is not granted. Requesting permission"); requestCameraPermissions(); } } else { captureImage(); } }
/** * Check permission */ private void getDataWithPermission() { int rc = ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.WRITE_EXTERNAL_STORAGE); if (rc == PackageManager.PERMISSION_GRANTED) { getData(); } else { requestWriteExternalPermission(); } }
@Nullable @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { setupComponents(); captureImageWithPermission(); ImagePickerConfig config = getImagePickerConfig(); if (config == null) { IpCrasher.openIssue(); LayoutInflater localInflater = inflater.cloneInContext(new ContextThemeWrapper(getActivity(), config.getTheme())); setupView(result); if (savedInstanceState == null) { setupRecyclerView(config, config.getSelectedImages()); } else { setupRecyclerView(config, savedInstanceState.getParcelableArrayList(STATE_KEY_SELECTED_IMAGES)); recyclerViewManager.onRestoreState(savedInstanceState.getParcelable(STATE_KEY_RECYCLER));
private void requestCameraPermissions() { logger.w("Write External permission is not granted. Requesting permission"); ArrayList<String> permissions = new ArrayList<>(2); if (ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) { permissions.add(Manifest.permission.CAMERA); } if (ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { permissions.add(Manifest.permission.WRITE_EXTERNAL_STORAGE); } if (checkForRationale(permissions)) { requestPermissions(permissions.toArray(new String[permissions.size()]), RC_PERMISSION_REQUEST_CAMERA); } else { final String permission = ImagePickerPreferences.PREF_CAMERA_REQUESTED; if (!preferences.isPermissionRequested(permission)) { preferences.setPermissionRequested(permission); requestPermissions(permissions.toArray(new String[permissions.size()]), RC_PERMISSION_REQUEST_CAMERA); } else { if (isCameraOnly) { Toast.makeText(getActivity().getApplicationContext(), getString(R.string.ef_msg_no_camera_permission), Toast.LENGTH_SHORT).show(); interactionListener.cancel(); } else { snackBarView.show(R.string.ef_msg_no_camera_permission, v -> openAppSettings()); } } } }
private void setupRecyclerView(ImagePickerConfig config, ArrayList<Image> selectedImages) { recyclerViewManager = new RecyclerViewManager( recyclerView, config, getResources().getConfiguration().orientation ); recyclerViewManager.setupAdapters(selectedImages, (isSelected) -> recyclerViewManager.selectImage(isSelected) , bucket -> setImageAdapter(bucket.getImages())); recyclerViewManager.setImageSelectedListener(selectedImage -> { updateTitle(); interactionListener.selectionChanged(recyclerViewManager.getSelectedImages()); if (ConfigUtils.shouldReturn(config, false) && !selectedImage.isEmpty()) { onDone(); } }); }
/** * Handle options menu's click event. */ @Override public boolean onOptionsItemSelected(MenuItem item) { int id = item.getItemId(); if (id == android.R.id.home) { onBackPressed(); return true; } if (id == com.esafirm.imagepicker.R.id.menu_done) { imagePickerFragment.onDone(); return true; } if (id == com.esafirm.imagepicker.R.id.menu_camera) { imagePickerFragment.captureImageWithPermission(); return true; } return super.onOptionsItemSelected(item); }
/** * Request for permission * If permission denied or app is first launched, request for permission * If permission denied and user choose 'Never Ask Again', show snackbar with an action that navigate to app settings */ private void requestWriteExternalPermission() { logger.w("Write External permission is not granted. Requesting permission"); final String[] permissions = new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}; if (ActivityCompat.shouldShowRequestPermissionRationale(getActivity(), Manifest.permission.WRITE_EXTERNAL_STORAGE)) { requestPermissions(permissions, RC_PERMISSION_REQUEST_WRITE_EXTERNAL_STORAGE); } else { final String permission = PREF_WRITE_EXTERNAL_STORAGE_REQUESTED; if (!preferences.isPermissionRequested(permission)) { preferences.setPermissionRequested(permission); requestPermissions(permissions, RC_PERMISSION_REQUEST_WRITE_EXTERNAL_STORAGE); } else { snackBarView.show(R.string.ef_msg_no_write_external_permission, v -> openAppSettings()); } } }
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setResult(RESULT_CANCELED); config = getIntent().getExtras().getParcelable(ImagePickerConfig.class.getSimpleName()); cameraOnlyConfig = getIntent().getExtras().getParcelable(CameraOnlyConfig.class.getSimpleName()); setTheme(config.getTheme()); setContentView(R.layout.activity_custom_ui); setupView(); if (savedInstanceState != null) { // The fragment has been restored. IpLogger.getInstance().e("Fragment has been restored"); imagePickerFragment = (ImagePickerFragment) getSupportFragmentManager().findFragmentById(R.id.ef_imagepicker_fragment_placeholder); } else { IpLogger.getInstance().e("Making fragment"); imagePickerFragment = ImagePickerFragment.newInstance(config, cameraOnlyConfig); FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); ft.replace(R.id.ef_imagepicker_fragment_placeholder, imagePickerFragment); ft.commit(); } // For demonstration purposes, we're using a custom ImagePickerInteractionListener. Instead // of calling setInteractionListener, though, we could simply implement // ImagePickerInteractionListener in this class. imagePickerFragment.setInteractionListener(new CustomInteractionListener()); }
/** * Start camera intent * Create a temporary file and pass file Uri to camera intent */ private void captureImage() { if (!CameraHelper.checkCameraAvailability(getActivity())) { return; } presenter.captureImage(this, getBaseConfig(), RC_CAPTURE); }
@Override public boolean onPrepareOptionsMenu(Menu menu) { MenuItem menuCamera = menu.findItem(com.esafirm.imagepicker.R.id.menu_camera); if (menuCamera != null) { if (config != null) { menuCamera.setVisible(config.isShowCamera()); } } MenuItem menuDone = menu.findItem(com.esafirm.imagepicker.R.id.menu_done); if (menuDone != null) { menuDone.setTitle(ConfigUtils.getDoneButtonText(this, config)); menuDone.setVisible(imagePickerFragment.isShowDoneButton()); } return super.onPrepareOptionsMenu(menu); }
/** * Open app settings screen */ private void openAppSettings() { Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS, Uri.fromParts("package", getActivity().getPackageName(), null)); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); }
@Override public void showError(Throwable throwable) { String message = "Unknown Error"; if (throwable != null && throwable instanceof NullPointerException) { message = "Images do not exist"; } Toast.makeText(getActivity(), message, Toast.LENGTH_SHORT).show(); }
if (grantResults.length != 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { logger.d("Write External permission granted"); getData(); return; if (grantResults.length != 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { logger.d("Camera permission granted"); captureImage(); return;
imagePickerFragment = ImagePickerFragment.newInstance(config, cameraOnlyConfig); FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); ft.replace(R.id.ef_imagepicker_fragment_placeholder, imagePickerFragment);
@Override public void finishPickImages(List<Image> images) { imagePickerFragment.finishPickImages(images); } }
/** * Handle option menu's click event */ @Override public boolean onOptionsItemSelected(MenuItem item) { int id = item.getItemId(); if (id == android.R.id.home) { onBackPressed(); return true; } if (id == R.id.menu_done) { imagePickerFragment.onDone(); return true; } if (id == R.id.menu_camera) { imagePickerFragment.captureImageWithPermission(); return true; } return super.onOptionsItemSelected(item); }
/** * Check if the captured image is stored successfully * Then reload data */ @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == RC_CAPTURE) { if (resultCode == RESULT_OK) { presenter.finishCaptureImage(getActivity(), data, getBaseConfig()); } else if (resultCode == RESULT_CANCELED && isCameraOnly) { presenter.abortCaptureImage(); interactionListener.cancel(); } } }
@Override public boolean onPrepareOptionsMenu(Menu menu) { MenuItem menuCamera = menu.findItem(R.id.menu_camera); if (menuCamera != null) { if (config != null) { menuCamera.setVisible(config.isShowCamera()); } } MenuItem menuDone = menu.findItem(R.id.menu_done); if (menuDone != null) { menuDone.setTitle(ConfigUtils.getDoneButtonText(this, config)); menuDone.setVisible(imagePickerFragment.isShowDoneButton()); } return super.onPrepareOptionsMenu(menu); }