@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(); }
private boolean checkForRationale(List<String> permissions) { for (int i = 0, size = permissions.size(); i < size; i++) { if (ActivityCompat.shouldShowRequestPermissionRationale(getActivity(), permissions.get(i))) { return true; } } return false; }
/** * 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); }
private void startContentObserver() { if (isCameraOnly) { return; } if (handler == null) { handler = new Handler(); } observer = new ContentObserver(handler) { @Override public void onChange(boolean selfChange) { getData(); } }; getActivity().getContentResolver() .registerContentObserver(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, false, observer); }
private void setupComponents() { preferences = new ImagePickerPreferences(getActivity()); presenter = new ImagePickerPresenter(new ImageFileLoader(getActivity())); presenter.attachView(this); }
/** * Check permission */ private void getDataWithPermission() { int rc = ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.WRITE_EXTERNAL_STORAGE); if (rc == PackageManager.PERMISSION_GRANTED) { getData(); } else { requestWriteExternalPermission(); } }
/** * 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); }
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()); } } } }
/** * 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(); } }
@Override public void onDestroy() { super.onDestroy(); if (presenter != null) { presenter.abortLoad(); presenter.detachView(); } if (observer != null) { getActivity().getContentResolver().unregisterContentObserver(observer); observer = null; } if (handler != null) { handler.removeCallbacksAndMessages(null); handler = null; } }
/** * 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(); } } }
LayoutInflater localInflater = inflater.cloneInContext(new ContextThemeWrapper(getActivity(), config.getTheme()));
/** * 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()); } } }