summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorxC3FFF0E <78732474+xC3FFF0E@users.noreply.github.com>2022-01-17 14:48:20 +0100
committerGitHub <noreply@github.com>2022-01-17 14:48:20 +0100
commit80e030bc2cfa3a25f42da2b5543671454e36b637 (patch)
tree492e8bd3ae20f55df7fd0b8b396a2f1d56ae5ac5
parentUpdate styles.xml (diff)
downloadxManager-80e030bc2cfa3a25f42da2b5543671454e36b637.tar
xManager-80e030bc2cfa3a25f42da2b5543671454e36b637.tar.gz
xManager-80e030bc2cfa3a25f42da2b5543671454e36b637.tar.bz2
xManager-80e030bc2cfa3a25f42da2b5543671454e36b637.tar.lz
xManager-80e030bc2cfa3a25f42da2b5543671454e36b637.tar.xz
xManager-80e030bc2cfa3a25f42da2b5543671454e36b637.tar.zst
xManager-80e030bc2cfa3a25f42da2b5543671454e36b637.zip
-rw-r--r--app/src/main/java/com/xc3fff0e/xmanager/FileUtil.java1119
1 files changed, 555 insertions, 564 deletions
diff --git a/app/src/main/java/com/xc3fff0e/xmanager/FileUtil.java b/app/src/main/java/com/xc3fff0e/xmanager/FileUtil.java
index d995925..73a1468 100644
--- a/app/src/main/java/com/xc3fff0e/xmanager/FileUtil.java
+++ b/app/src/main/java/com/xc3fff0e/xmanager/FileUtil.java
@@ -37,568 +37,559 @@ import java.util.Date;
public class FileUtil {
-private static void createNewFile(String path) {
-int lastSep = path.lastIndexOf(File.separator);
-if (lastSep > 0) {
-String dirPath = path.substring(0, lastSep);
-makeDir(dirPath);
+ private static void createNewFile(String path) {
+ int lastSep = path.lastIndexOf(File.separator);
+ if (lastSep > 0) {
+ String dirPath = path.substring(0, lastSep);
+ makeDir(dirPath);
+ }
+
+ File file = new File(path);
+
+ try {
+ if (!file.exists()) file.createNewFile();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+ public static String readFile(String path) {
+ createNewFile(path);
+
+ StringBuilder sb = new StringBuilder();
+ FileReader fr = null;
+ try {
+ fr = new FileReader(new File(path));
+
+ char[] buff = new char[1024];
+ int length = 0;
+
+ while ((length = fr.read(buff)) > 0) {
+ sb.append(new String(buff, 0, length));
+ }
+ } catch (IOException e) {
+ e.printStackTrace();
+ } finally {
+ if (fr != null) {
+ try {
+ fr.close();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ }
+
+ return sb.toString();
+ }
+
+ public static void writeFile(String path, String str) {
+ createNewFile(path);
+ FileWriter fileWriter = null;
+
+ try {
+ fileWriter = new FileWriter(new File(path), false);
+ fileWriter.write(str);
+ fileWriter.flush();
+ } catch (IOException e) {
+ e.printStackTrace();
+ } finally {
+ try {
+ if (fileWriter != null)
+ fileWriter.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+
+ public static void copyFile(String sourcePath, String destPath) {
+ if (!isExistFile(sourcePath)) return;
+ createNewFile(destPath);
+
+ FileInputStream fis = null;
+ FileOutputStream fos = null;
+
+ try {
+ fis = new FileInputStream(sourcePath);
+ fos = new FileOutputStream(destPath, false);
+
+ byte[] buff = new byte[1024];
+ int length = 0;
+
+ while ((length = fis.read(buff)) > 0) {
+ fos.write(buff, 0, length);
+ }
+ } catch (IOException e) {
+ e.printStackTrace();
+ } finally {
+ if (fis != null) {
+ try {
+ fis.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ if (fos != null) {
+ try {
+ fos.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+ }
+
+ public static void copyDir(String oldPath, String newPath) {
+ File oldFile = new File(oldPath);
+ File[] files = oldFile.listFiles();
+ File newFile = new File(newPath);
+ if (!newFile.exists()) {
+ newFile.mkdirs();
+ }
+ for (File file : files) {
+ if (file.isFile()) {
+ copyFile(file.getPath(), newPath + "/" + file.getName());
+ } else if (file.isDirectory()) {
+ copyDir(file.getPath(), newPath + "/" + file.getName());
+ }
+ }
+ }
+
+ public static void moveFile(String sourcePath, String destPath) {
+ copyFile(sourcePath, destPath);
+ deleteFile(sourcePath);
+ }
+
+ public static void deleteFile(String path) {
+ File file = new File(path);
+
+ if (!file.exists()) return;
+
+ if (file.isFile()) {
+ file.delete();
+ return;
+ }
+
+ File[] fileArr = file.listFiles();
+
+ if (fileArr != null) {
+ for (File subFile : fileArr) {
+ if (subFile.isDirectory()) {
+ deleteFile(subFile.getAbsolutePath());
+ }
+
+ if (subFile.isFile()) {
+ subFile.delete();
+ }
+ }
+ }
+
+ file.delete();
+ }
+
+ public static boolean isExistFile(String path) {
+ File file = new File(path);
+ return file.exists();
+ }
+
+ public static void makeDir(String path) {
+ if (!isExistFile(path)) {
+ File file = new File(path);
+ file.mkdirs();
+ }
+ }
+
+ public static void listDir(String path, ArrayList<String> list) {
+ File dir = new File(path);
+ if (!dir.exists() || dir.isFile()) return;
+
+ File[] listFiles = dir.listFiles();
+ if (listFiles == null || listFiles.length <= 0) return;
+
+ if (list == null) return;
+ list.clear();
+ for (File file : listFiles) {
+ list.add(file.getAbsolutePath());
+ }
+ }
+
+ public static boolean isDirectory(String path) {
+ if (!isExistFile(path)) return false;
+ return new File(path).isDirectory();
+ }
+
+ public static boolean isFile(String path) {
+ if (!isExistFile(path)) return false;
+ return new File(path).isFile();
+ }
+
+ public static long getFileLength(String path) {
+ if (!isExistFile(path)) return 0;
+ return new File(path).length();
+ }
+
+ public static String getExternalStorageDir() {
+ return Environment.getExternalStorageDirectory().getAbsolutePath();
+ }
+
+ public static String getPackageDataDir(Context context) {
+ return context.getExternalFilesDir(null).getAbsolutePath();
+ }
+
+ public static String getPublicDir(String type) {
+ return Environment.getExternalStoragePublicDirectory(type).getAbsolutePath();
+ }
+
+ public static String convertUriToFilePath(final Context context, final Uri uri) {
+ String path = null;
+ if (DocumentsContract.isDocumentUri(context, uri)) {
+ if (isExternalStorageDocument(uri)) {
+ final String docId = DocumentsContract.getDocumentId(uri);
+ final String[] split = docId.split(":");
+ final String type = split[0];
+
+ if ("primary".equalsIgnoreCase(type)) {
+ path = Environment.getExternalStorageDirectory() + "/" + split[1];
+ }
+ } else if (isDownloadsDocument(uri)) {
+ final String id = DocumentsContract.getDocumentId(uri);
+
+ if (!TextUtils.isEmpty(id)) {
+ if (id.startsWith("raw:")) {
+ return id.replaceFirst("raw:", "");
+ }
+ }
+
+ final Uri contentUri = ContentUris
+ .withAppendedId(Uri.parse("content://downloads/public_downloads"), Long.valueOf(id));
+
+ path = getDataColumn(context, contentUri, null, null);
+ } else if (isMediaDocument(uri)) {
+ final String docId = DocumentsContract.getDocumentId(uri);
+ final String[] split = docId.split(":");
+ final String type = split[0];
+
+ Uri contentUri = null;
+ if ("image".equals(type)) {
+ contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
+ } else if ("video".equals(type)) {
+ contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
+ } else if ("audio".equals(type)) {
+ contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
+ }
+
+ final String selection = "_id=?";
+ final String[] selectionArgs = new String[]{
+ split[1]
+ };
+
+ path = getDataColumn(context, contentUri, selection, selectionArgs);
+ }
+ } else if (ContentResolver.SCHEME_CONTENT.equalsIgnoreCase(uri.getScheme())) {
+ path = getDataColumn(context, uri, null, null);
+ } else if (ContentResolver.SCHEME_FILE.equalsIgnoreCase(uri.getScheme())) {
+ path = uri.getPath();
+ }
+
+ if (path != null) {
+ try {
+ return URLDecoder.decode(path, "UTF-8");
+ } catch(Exception e) {
+ return null;
+ }
+ }
+ return null;
+ }
+
+ private static String getDataColumn(Context context, Uri uri, String selection, String[] selectionArgs) {
+ final String column = MediaStore.Images.Media.DATA;
+ final String[] projection = {
+ column
+ };
+
+ try (Cursor cursor = context.getContentResolver().query(uri, projection, selection, selectionArgs, null)) {
+ if (cursor != null && cursor.moveToFirst()) {
+ final int column_index = cursor.getColumnIndexOrThrow(column);
+ return cursor.getString(column_index);
+ }
+ } catch (Exception e) {
+
+ }
+ return null;
+ }
+
+
+ private static boolean isExternalStorageDocument(Uri uri) {
+ return "com.android.externalstorage.documents".equals(uri.getAuthority());
+ }
+
+ private static boolean isDownloadsDocument(Uri uri) {
+ return "com.android.providers.downloads.documents".equals(uri.getAuthority());
+ }
+
+ private static boolean isMediaDocument(Uri uri) {
+ return "com.android.providers.media.documents".equals(uri.getAuthority());
+ }
+
+ private static void saveBitmap(Bitmap bitmap, String destPath) {
+ FileUtil.createNewFile(destPath);
+ try (FileOutputStream out = new FileOutputStream(new File(destPath))) {
+ bitmap.compress(Bitmap.CompressFormat.PNG, 100, out);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ public static Bitmap getScaledBitmap(String path, int max) {
+ Bitmap src = BitmapFactory.decodeFile(path);
+
+ int width = src.getWidth();
+ int height = src.getHeight();
+ float rate = 0.0f;
+
+ if (width > height) {
+ rate = max / (float) width;
+ height = (int) (height * rate);
+ width = max;
+ } else {
+ rate = max / (float) height;
+ width = (int) (width * rate);
+ height = max;
+ }
+
+ return Bitmap.createScaledBitmap(src, width, height, true);
+ }
+
+ public static int calculateInSampleSize(BitmapFactory.Options options, int reqWidth, int reqHeight) {
+ final int width = options.outWidth;
+ final int height = options.outHeight;
+ int inSampleSize = 1;
+
+ if (height > reqHeight || width > reqWidth) {
+ final int halfHeight = height / 2;
+ final int halfWidth = width / 2;
+
+ while ((halfHeight / inSampleSize) >= reqHeight && (halfWidth / inSampleSize) >= reqWidth) {
+ inSampleSize *= 2;
+ }
+ }
+
+ return inSampleSize;
+ }
+
+ public static Bitmap decodeSampleBitmapFromPath(String path, int reqWidth, int reqHeight) {
+ final BitmapFactory.Options options = new BitmapFactory.Options();
+ options.inJustDecodeBounds = true;
+ BitmapFactory.decodeFile(path, options);
+
+ options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight);
+
+ options.inJustDecodeBounds = false;
+ return BitmapFactory.decodeFile(path, options);
+ }
+
+ public static void resizeBitmapFileRetainRatio(String fromPath, String destPath, int max) {
+ if (!isExistFile(fromPath)) return;
+ Bitmap bitmap = getScaledBitmap(fromPath, max);
+ saveBitmap(bitmap, destPath);
+ }
+
+ public static void resizeBitmapFileToSquare(String fromPath, String destPath, int max) {
+ if (!isExistFile(fromPath)) return;
+ Bitmap src = BitmapFactory.decodeFile(fromPath);
+ Bitmap bitmap = Bitmap.createScaledBitmap(src, max, max, true);
+ saveBitmap(bitmap, destPath);
+ }
+
+ public static void resizeBitmapFileToCircle(String fromPath, String destPath) {
+ if (!isExistFile(fromPath)) return;
+ Bitmap src = BitmapFactory.decodeFile(fromPath);
+ Bitmap bitmap = Bitmap.createBitmap(src.getWidth(),
+ src.getHeight(), Bitmap.Config.ARGB_8888);
+ Canvas canvas = new Canvas(bitmap);
+
+ final int color = 0xff424242;
+ final Paint paint = new Paint();
+ final Rect rect = new Rect(0, 0, src.getWidth(), src.getHeight());
+
+ paint.setAntiAlias(true);
+ canvas.drawARGB(0, 0, 0, 0);
+ paint.setColor(color);
+ canvas.drawCircle(src.getWidth() / 2, src.getHeight() / 2,
+ src.getWidth() / 2, paint);
+ paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
+ canvas.drawBitmap(src, rect, rect, paint);
+
+ saveBitmap(bitmap, destPath);
+ }
+
+ public static void resizeBitmapFileWithRoundedBorder(String fromPath, String destPath, int pixels) {
+ if (!isExistFile(fromPath)) return;
+ Bitmap src = BitmapFactory.decodeFile(fromPath);
+ Bitmap bitmap = Bitmap.createBitmap(src.getWidth(), src
+ .getHeight(), Bitmap.Config.ARGB_8888);
+ Canvas canvas = new Canvas(bitmap);
+
+ final int color = 0xff424242;
+ final Paint paint = new Paint();
+ final Rect rect = new Rect(0, 0, src.getWidth(), src.getHeight());
+ final RectF rectF = new RectF(rect);
+ final float roundPx = pixels;
+
+ paint.setAntiAlias(true);
+ canvas.drawARGB(0, 0, 0, 0);
+ paint.setColor(color);
+ canvas.drawRoundRect(rectF, roundPx, roundPx, paint);
+
+ paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
+ canvas.drawBitmap(src, rect, rect, paint);
+
+ saveBitmap(bitmap, destPath);
+ }
+
+ public static void cropBitmapFileFromCenter(String fromPath, String destPath, int w, int h) {
+ if (!isExistFile(fromPath)) return;
+ Bitmap src = BitmapFactory.decodeFile(fromPath);
+
+ int width = src.getWidth();
+ int height = src.getHeight();
+
+ if (width < w && height < h) return;
+
+ int x = 0;
+ int y = 0;
+
+ if (width > w) x = (width - w) / 2;
+
+ if (height > h) y = (height - h) / 2;
+
+ int cw = w;
+ int ch = h;
+
+ if (w > width) cw = width;
+
+ if (h > height) ch = height;
+
+ Bitmap bitmap = Bitmap.createBitmap(src, x, y, cw, ch);
+ saveBitmap(bitmap, destPath);
+ }
+
+ public static void rotateBitmapFile(String fromPath, String destPath, float angle) {
+ if (!isExistFile(fromPath)) return;
+ Bitmap src = BitmapFactory.decodeFile(fromPath);
+ Matrix matrix = new Matrix();
+ matrix.postRotate(angle);
+ Bitmap bitmap = Bitmap.createBitmap(src, 0, 0, src.getWidth(), src.getHeight(), matrix, true);
+ saveBitmap(bitmap, destPath);
+ }
+
+ public static void scaleBitmapFile(String fromPath, String destPath, float x, float y) {
+ if (!isExistFile(fromPath)) return;
+ Bitmap src = BitmapFactory.decodeFile(fromPath);
+ Matrix matrix = new Matrix();
+ matrix.postScale(x, y);
+
+ int w = src.getWidth();
+ int h = src.getHeight();
+
+ Bitmap bitmap = Bitmap.createBitmap(src, 0, 0, w, h, matrix, true);
+ saveBitmap(bitmap, destPath);
+ }
+
+ public static void skewBitmapFile(String fromPath, String destPath, float x, float y) {
+ if (!isExistFile(fromPath)) return;
+ Bitmap src = BitmapFactory.decodeFile(fromPath);
+ Matrix matrix = new Matrix();
+ matrix.postSkew(x, y);
+
+ int w = src.getWidth();
+ int h = src.getHeight();
+
+ Bitmap bitmap = Bitmap.createBitmap(src, 0, 0, w, h, matrix, true);
+ saveBitmap(bitmap, destPath);
+ }
+
+ public static void setBitmapFileColorFilter(String fromPath, String destPath, int color) {
+ if (!isExistFile(fromPath)) return;
+ Bitmap src = BitmapFactory.decodeFile(fromPath);
+ Bitmap bitmap = Bitmap.createBitmap(src, 0, 0,
+ src.getWidth() - 1, src.getHeight() - 1);
+ Paint p = new Paint();
+ ColorFilter filter = new LightingColorFilter(color, 1);
+ p.setColorFilter(filter);
+ Canvas canvas = new Canvas(bitmap);
+ canvas.drawBitmap(bitmap, 0, 0, p);
+ saveBitmap(bitmap, destPath);
+ }
+
+ public static void setBitmapFileBrightness(String fromPath, String destPath, float brightness) {
+ if (!isExistFile(fromPath)) return;
+ Bitmap src = BitmapFactory.decodeFile(fromPath);
+ ColorMatrix cm = new ColorMatrix(new float[]
+ {
+ 1, 0, 0, 0, brightness,
+ 0, 1, 0, 0, brightness,
+ 0, 0, 1, 0, brightness,
+ 0, 0, 0, 1, 0
+ });
+
+ Bitmap bitmap = Bitmap.createBitmap(src.getWidth(), src.getHeight(), src.getConfig());
+ Canvas canvas = new Canvas(bitmap);
+ Paint paint = new Paint();
+ paint.setColorFilter(new ColorMatrixColorFilter(cm));
+ canvas.drawBitmap(src, 0, 0, paint);
+ saveBitmap(bitmap, destPath);
+ }
+
+ public static void setBitmapFileContrast(String fromPath, String destPath, float contrast) {
+ if (!isExistFile(fromPath)) return;
+ Bitmap src = BitmapFactory.decodeFile(fromPath);
+ ColorMatrix cm = new ColorMatrix(new float[]
+ {
+ contrast, 0, 0, 0, 0,
+ 0, contrast, 0, 0, 0,
+ 0, 0, contrast, 0, 0,
+ 0, 0, 0, 1, 0
+ });
+
+ Bitmap bitmap = Bitmap.createBitmap(src.getWidth(), src.getHeight(), src.getConfig());
+ Canvas canvas = new Canvas(bitmap);
+ Paint paint = new Paint();
+ paint.setColorFilter(new ColorMatrixColorFilter(cm));
+ canvas.drawBitmap(src, 0, 0, paint);
+
+ saveBitmap(bitmap, destPath);
+ }
+
+ public static int getJpegRotate(String filePath) {
+ int rotate = 0;
+ try {
+ ExifInterface exif = new ExifInterface(filePath);
+ int iOrientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, -1);
+
+ switch (iOrientation) {
+ case ExifInterface.ORIENTATION_ROTATE_90:
+ rotate = 90;
+ break;
+
+ case ExifInterface.ORIENTATION_ROTATE_180:
+ rotate = 180;
+ break;
+
+ case ExifInterface.ORIENTATION_ROTATE_270:
+ rotate = 270;
+ break;
+ }
+ } catch (IOException e) {
+ return 0;
+ }
+
+ return rotate;
+ }
+
+ public static File createNewPictureFile(Context context) {
+ SimpleDateFormat date = new SimpleDateFormat("yyyyMMdd_HHmmss");
+ String fileName = date.format(new Date()) + ".jpg";
+ return new File(context.getExternalFilesDir(Environment.DIRECTORY_DCIM).getAbsolutePath() + File.separator + fileName);
+ }
}
-
-File file = new File(path);
-
-try {
-if (!file.exists())
-file.createNewFile();
-} catch (IOException e) {
-e.printStackTrace();
-}
-}
-
-public static String readFile(String path) {
-createNewFile(path);
-
-StringBuilder sb = new StringBuilder();
-FileReader fr = null;
-try {
-fr = new FileReader(new File(path));
-
-char[] buff = new char[1024];
-int length = 0;
-
-while ((length = fr.read(buff)) > 0) {
-sb.append(new String(buff, 0, length));
-}
-} catch (IOException e) {
-e.printStackTrace();
-} finally {
-if (fr != null) {
-try {
-fr.close();
-} catch (Exception e) {
-e.printStackTrace();
-}
-}
-}
-
-return sb.toString();
-}
-
-public static void writeFile(String path, String str) {
-createNewFile(path);
-FileWriter fileWriter = null;
-
-try {
-fileWriter = new FileWriter(new File(path), false);
-fileWriter.write(str);
-fileWriter.flush();
-} catch (IOException e) {
-e.printStackTrace();
-} finally {
-try {
-if (fileWriter != null)
-fileWriter.close();
-} catch (IOException e) {
-e.printStackTrace();
-}
-}
-}
-
-public static void copyFile(String sourcePath, String destPath) {
-if (!isExistFile(sourcePath)) return;
-createNewFile(destPath);
-
-FileInputStream fis = null;
-FileOutputStream fos = null;
-
-try {
-fis = new FileInputStream(sourcePath);
-fos = new FileOutputStream(destPath, false);
-
-byte[] buff = new byte[1024];
-int length = 0;
-
-while ((length = fis.read(buff)) > 0) {
-fos.write(buff, 0, length);
-}
-} catch (IOException e) {
-e.printStackTrace();
-} finally {
-if (fis != null) {
-try {
-fis.close();
-} catch (IOException e) {
-e.printStackTrace();
-}
-}
-if (fos != null) {
-try {
-fos.close();
-} catch (IOException e) {
-e.printStackTrace();
-}
-}
-}
-}
-
-public static void moveFile(String sourcePath, String destPath) {
-copyFile(sourcePath, destPath);
-deleteFile(sourcePath);
-}
-
-public static void deleteFile(String path) {
-File file = new File(path);
-
-if (!file.exists()) return;
-
-if (file.isFile()) {
-file.delete();
-return;
-}
-
-File[] fileArr = file.listFiles();
-
-if (fileArr != null) {
-for (File subFile : fileArr) {
-if (subFile.isDirectory()) {
-deleteFile(subFile.getAbsolutePath());
-}
-
-if (subFile.isFile()) {
-subFile.delete();
-}
-}
-}
-
-file.delete();
-}
-
-public static boolean isExistFile(String path) {
-File file = new File(path);
-return file.exists();
-}
-
-public static void makeDir(String path) {
-if (!isExistFile(path)) {
-File file = new File(path);
-file.mkdirs();
-}
-}
-
-public static void listDir(String path, ArrayList<String> list) {
-File dir = new File(path);
-if (!dir.exists() || dir.isFile()) return;
-
-File[] listFiles = dir.listFiles();
-if (listFiles == null || listFiles.length <= 0) return;
-
-if (list == null) return;
-list.clear();
-for (File file : listFiles) {
-list.add(file.getAbsolutePath());
-}
-}
-
-public static boolean isDirectory(String path) {
-if (!isExistFile(path)) return false;
-return new File(path).isDirectory();
-}
-
-public static boolean isFile(String path) {
-if (!isExistFile(path)) return false;
-return new File(path).isFile();
-}
-
-public static long getFileLength(String path) {
-if (!isExistFile(path)) return 0;
-return new File(path).length();
-}
-
-public static String getExternalStorageDir() {
-return Environment.getExternalStorageDirectory().getAbsolutePath();
-}
-
-public static String getPackageDataDir(Context context) {
-return context.getExternalFilesDir(null).getAbsolutePath();
-}
-
-public static String getPublicDir(String type) {
-return Environment.getExternalStoragePublicDirectory(type).getAbsolutePath();
-}
-
-public static String convertUriToFilePath(final Context context, final Uri uri) {
-String path = null;
-if (DocumentsContract.isDocumentUri(context, uri)) {
-if (isExternalStorageDocument(uri)) {
-final String docId = DocumentsContract.getDocumentId(uri);
-final String[] split = docId.split(":");
-final String type = split[0];
-
-if ("primary".equalsIgnoreCase(type)) {
-path = Environment.getExternalStorageDirectory() + "/" + split[1];
-}
-} else if (isDownloadsDocument(uri)) {
-final String id = DocumentsContract.getDocumentId(uri);
-
-if (!TextUtils.isEmpty(id)) {
-if (id.startsWith("raw:")) {
-return id.replaceFirst("raw:", "");
-}
-}
-
-final Uri contentUri = ContentUris
-.withAppendedId(Uri.parse("content://downloads/public_downloads"), Long.valueOf(id));
-
-path = getDataColumn(context, contentUri, null, null);
-} else if (isMediaDocument(uri)) {
-final String docId = DocumentsContract.getDocumentId(uri);
-final String[] split = docId.split(":");
-final String type = split[0];
-
-Uri contentUri = null;
-if ("image".equals(type)) {
-contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
-} else if ("video".equals(type)) {
-contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
-} else if ("audio".equals(type)) {
-contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
-}
-
-final String selection = MediaStore.Audio.Media._ID + "=?";
-final String[] selectionArgs = new String[]{
-split[1]
-};
-
-path = getDataColumn(context, contentUri, selection, selectionArgs);
-}
-} else if (ContentResolver.SCHEME_CONTENT.equalsIgnoreCase(uri.getScheme())) {
-path = getDataColumn(context, uri, null, null);
-} else if (ContentResolver.SCHEME_FILE.equalsIgnoreCase(uri.getScheme())) {
-path = uri.getPath();
-}
-
-if (path != null) {
-try {
-return URLDecoder.decode(path, "UTF-8");
-}catch(Exception e){
-return null;
-}
-}
-return null;
-}
-
-private static String getDataColumn(Context context, Uri uri, String selection, String[] selectionArgs) {
-Cursor cursor = null;
-
-final String column = MediaStore.Images.Media.DATA;
-final String[] projection = {
-column
-};
-
-try {
-cursor = context.getContentResolver().query(uri, projection, selection, selectionArgs, null);
-if (cursor != null && cursor.moveToFirst()) {
-final int column_index = cursor.getColumnIndexOrThrow(column);
-return cursor.getString(column_index);
-}
-} catch (Exception e) {
-
-} finally {
-if (cursor != null) {
-cursor.close();
-}
-}
-return null;
-}
-
-
-private static boolean isExternalStorageDocument(Uri uri) {
-return "com.android.externalstorage.documents".equals(uri.getAuthority());
-}
-
-private static boolean isDownloadsDocument(Uri uri) {
-return "com.android.providers.downloads.documents".equals(uri.getAuthority());
-}
-
-private static boolean isMediaDocument(Uri uri) {
-return "com.android.providers.media.documents".equals(uri.getAuthority());
-}
-
-private static void saveBitmap(Bitmap bitmap, String destPath) {
-FileOutputStream out = null;
-FileUtil.createNewFile(destPath);
-try {
-out = new FileOutputStream(new File(destPath));
-bitmap.compress(Bitmap.CompressFormat.PNG, 100, out);
-} catch (Exception e) {
-e.printStackTrace();
-} finally {
-try {
-if (out != null) {
-out.close();
-}
-} catch (IOException e) {
-e.printStackTrace();
-}
-}
-}
-
-public static Bitmap getScaledBitmap(String path, int max) {
-Bitmap src = BitmapFactory.decodeFile(path);
-
-int width = src.getWidth();
-int height = src.getHeight();
-float rate = 0.0f;
-
-if (width > height) {
-rate = max / (float) width;
-height = (int) (height * rate);
-width = max;
-} else {
-rate = max / (float) height;
-width = (int) (width * rate);
-height = max;
-}
-
-return Bitmap.createScaledBitmap(src, width, height, true);
-}
-
-public static int calculateInSampleSize(BitmapFactory.Options options, int reqWidth, int reqHeight) {
-final int width = options.outWidth;
-final int height = options.outHeight;
-int inSampleSize = 1;
-
-if (height > reqHeight || width > reqWidth) {
-final int halfHeight = height / 2;
-final int halfWidth = width / 2;
-
-while ((halfHeight / inSampleSize) >= reqHeight && (halfWidth / inSampleSize) >= reqWidth) {
-inSampleSize *= 2;
-}
-}
-
-return inSampleSize;
-}
-
-public static Bitmap decodeSampleBitmapFromPath(String path, int reqWidth, int reqHeight) {
-final BitmapFactory.Options options = new BitmapFactory.Options();
-options.inJustDecodeBounds = true;
-BitmapFactory.decodeFile(path, options);
-
-options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight);
-
-options.inJustDecodeBounds = false;
-return BitmapFactory.decodeFile(path, options);
-}
-
-public static void resizeBitmapFileRetainRatio(String fromPath, String destPath, int max) {
-if (!isExistFile(fromPath)) return;
-Bitmap bitmap = getScaledBitmap(fromPath, max);
-saveBitmap(bitmap, destPath);
-}
-
-public static void resizeBitmapFileToSquare(String fromPath, String destPath, int max) {
-if (!isExistFile(fromPath)) return;
-Bitmap src = BitmapFactory.decodeFile(fromPath);
-Bitmap bitmap = Bitmap.createScaledBitmap(src, max, max, true);
-saveBitmap(bitmap, destPath);
-}
-
-public static void resizeBitmapFileToCircle(String fromPath, String destPath) {
-if (!isExistFile(fromPath)) return;
-Bitmap src = BitmapFactory.decodeFile(fromPath);
-Bitmap bitmap = Bitmap.createBitmap(src.getWidth(),
-src.getHeight(), Bitmap.Config.ARGB_8888);
-Canvas canvas = new Canvas(bitmap);
-
-final int color = 0xff424242;
-final Paint paint = new Paint();
-final Rect rect = new Rect(0, 0, src.getWidth(), src.getHeight());
-
-paint.setAntiAlias(true);
-canvas.drawARGB(0, 0, 0, 0);
-paint.setColor(color);
-canvas.drawCircle(src.getWidth() / 2, src.getHeight() / 2,
-src.getWidth() / 2, paint);
-paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
-canvas.drawBitmap(src, rect, rect, paint);
-
-saveBitmap(bitmap, destPath);
-}
-
-public static void resizeBitmapFileWithRoundedBorder(String fromPath, String destPath, int pixels) {
-if (!isExistFile(fromPath)) return;
-Bitmap src = BitmapFactory.decodeFile(fromPath);
-Bitmap bitmap = Bitmap.createBitmap(src.getWidth(), src
-.getHeight(), Bitmap.Config.ARGB_8888);
-Canvas canvas = new Canvas(bitmap);
-
-final int color = 0xff424242;
-final Paint paint = new Paint();
-final Rect rect = new Rect(0, 0, src.getWidth(), src.getHeight());
-final RectF rectF = new RectF(rect);
-final float roundPx = pixels;
-
-paint.setAntiAlias(true);
-canvas.drawARGB(0, 0, 0, 0);
-paint.setColor(color);
-canvas.drawRoundRect(rectF, roundPx, roundPx, paint);
-
-paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
-canvas.drawBitmap(src, rect, rect, paint);
-
-saveBitmap(bitmap, destPath);
-}
-
-public static void cropBitmapFileFromCenter(String fromPath, String destPath, int w, int h) {
-if (!isExistFile(fromPath)) return;
-Bitmap src = BitmapFactory.decodeFile(fromPath);
-
-int width = src.getWidth();
-int height = src.getHeight();
-
-if (width < w && height < h)
-return;
-
-int x = 0;
-int y = 0;
-
-if (width > w)
-x = (width - w) / 2;
-
-if (height > h)
-y = (height - h) / 2;
-
-int cw = w;
-int ch = h;
-
-if (w > width)
-cw = width;
-
-if (h > height)
-ch = height;
-
-Bitmap bitmap = Bitmap.createBitmap(src, x, y, cw, ch);
-saveBitmap(bitmap, destPath);
-}
-
-public static void rotateBitmapFile(String fromPath, String destPath, float angle) {
-if (!isExistFile(fromPath)) return;
-Bitmap src = BitmapFactory.decodeFile(fromPath);
-Matrix matrix = new Matrix();
-matrix.postRotate(angle);
-Bitmap bitmap = Bitmap.createBitmap(src, 0, 0, src.getWidth(), src.getHeight(), matrix, true);
-saveBitmap(bitmap, destPath);
-}
-
-public static void scaleBitmapFile(String fromPath, String destPath, float x, float y) {
-if (!isExistFile(fromPath)) return;
-Bitmap src = BitmapFactory.decodeFile(fromPath);
-Matrix matrix = new Matrix();
-matrix.postScale(x, y);
-
-int w = src.getWidth();
-int h = src.getHeight();
-
-Bitmap bitmap = Bitmap.createBitmap(src, 0, 0, w, h, matrix, true);
-saveBitmap(bitmap, destPath);
-}
-
-public static void skewBitmapFile(String fromPath, String destPath, float x, float y) {
-if (!isExistFile(fromPath)) return;
-Bitmap src = BitmapFactory.decodeFile(fromPath);
-Matrix matrix = new Matrix();
-matrix.postSkew(x, y);
-
-int w = src.getWidth();
-int h = src.getHeight();
-
-Bitmap bitmap = Bitmap.createBitmap(src, 0, 0, w, h, matrix, true);
-saveBitmap(bitmap, destPath);
-}
-
-public static void setBitmapFileColorFilter(String fromPath, String destPath, int color) {
-if (!isExistFile(fromPath)) return;
-Bitmap src = BitmapFactory.decodeFile(fromPath);
-Bitmap bitmap = Bitmap.createBitmap(src, 0, 0,
-src.getWidth() - 1, src.getHeight() - 1);
-Paint p = new Paint();
-ColorFilter filter = new LightingColorFilter(color, 1);
-p.setColorFilter(filter);
-Canvas canvas = new Canvas(bitmap);
-canvas.drawBitmap(bitmap, 0, 0, p);
-saveBitmap(bitmap, destPath);
-}
-
-public static void setBitmapFileBrightness(String fromPath, String destPath, float brightness) {
-if (!isExistFile(fromPath)) return;
-Bitmap src = BitmapFactory.decodeFile(fromPath);
-ColorMatrix cm = new ColorMatrix(new float[]
-{
-1, 0, 0, 0, brightness,
-0, 1, 0, 0, brightness,
-0, 0, 1, 0, brightness,
-0, 0, 0, 1, 0
-});
-
-Bitmap bitmap = Bitmap.createBitmap(src.getWidth(), src.getHeight(), src.getConfig());
-Canvas canvas = new Canvas(bitmap);
-Paint paint = new Paint();
-paint.setColorFilter(new ColorMatrixColorFilter(cm));
-canvas.drawBitmap(src, 0, 0, paint);
-saveBitmap(bitmap, destPath);
-}
-
-public static void setBitmapFileContrast(String fromPath, String destPath, float contrast) {
-if (!isExistFile(fromPath)) return;
-Bitmap src = BitmapFactory.decodeFile(fromPath);
-ColorMatrix cm = new ColorMatrix(new float[]
-{
-contrast, 0, 0, 0, 0,
-0, contrast, 0, 0, 0,
-0, 0, contrast, 0, 0,
-0, 0, 0, 1, 0
-});
-
-Bitmap bitmap = Bitmap.createBitmap(src.getWidth(), src.getHeight(), src.getConfig());
-Canvas canvas = new Canvas(bitmap);
-Paint paint = new Paint();
-paint.setColorFilter(new ColorMatrixColorFilter(cm));
-canvas.drawBitmap(src, 0, 0, paint);
-
-saveBitmap(bitmap, destPath);
-}
-
-public static int getJpegRotate(String filePath) {
-int rotate = 0;
-try {
-ExifInterface exif = new ExifInterface(filePath);
-int iOrientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, -1);
-
-switch (iOrientation) {
-case ExifInterface.ORIENTATION_ROTATE_90:
-rotate = 90;
-break;
-case ExifInterface.ORIENTATION_ROTATE_180:
-rotate = 180;
-break;
-case ExifInterface.ORIENTATION_ROTATE_270:
-rotate = 270;
-break;
-default:
-rotate = 0;
-break;
-}
-}
-catch (IOException e) {
-return 0;
-}
-
-return rotate;
-}
-public static File createNewPictureFile(Context context) {
-SimpleDateFormat date = new SimpleDateFormat("yyyyMMdd_HHmmss");
-String fileName = date.format(new Date()) + ".jpg";
-File file = new File(context.getExternalFilesDir(Environment.DIRECTORY_DCIM).getAbsolutePath() + File.separator + fileName);
-return file;
-}
-} \ No newline at end of file