From d361e724edc30cfccfc9d2ae9b67f274329eb262 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Paczos?= Date: Mon, 24 Sep 2018 16:04:07 +0200 Subject: [android] check external database's read/write permissions asynchronously --- .../java/com/mapbox/mapboxsdk/utils/FileUtils.java | 121 +++++++++++++++++++++ 1 file changed, 121 insertions(+) create mode 100644 platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/utils/FileUtils.java (limited to 'platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/utils/FileUtils.java') diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/utils/FileUtils.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/utils/FileUtils.java new file mode 100644 index 0000000000..b7d09cda2a --- /dev/null +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/utils/FileUtils.java @@ -0,0 +1,121 @@ +package com.mapbox.mapboxsdk.utils; + +import android.os.AsyncTask; + +import java.io.File; +import java.lang.ref.WeakReference; + +public class FileUtils { + + /** + * Task checking whether app's process can read a file. + */ + public static class CheckFileReadPermissionTask extends AsyncTask { + private final WeakReference listenerWeakReference; + + public CheckFileReadPermissionTask(OnCheckFileReadPermissionListener listener) { + this.listenerWeakReference = new WeakReference<>(listener); + } + + @Override + protected Boolean doInBackground(File... files) { + try { + return files[0].canRead(); + } catch (Exception ex) { + return false; + } + } + + @Override + protected void onCancelled() { + OnCheckFileReadPermissionListener listener = listenerWeakReference.get(); + if (listener != null) { + listener.onError(); + } + } + + @Override + protected void onPostExecute(Boolean result) { + OnCheckFileReadPermissionListener listener = listenerWeakReference.get(); + if (listener != null) { + if (result) { + listener.onReadPermissionGranted(); + } else { + listener.onError(); + } + } + } + } + + /** + * Interface definition for a callback invoked when checking file's read permissions. + */ + public interface OnCheckFileReadPermissionListener { + + /** + * Invoked when app's process has a permission to read a file. + */ + void onReadPermissionGranted(); + + /** + * Invoked when app's process doesn't have a permission to read a file or an error occurs. + */ + void onError(); + } + + /** + * Task checking whether app's process can write to a file. + */ + public static class CheckFileWritePermissionTask extends AsyncTask { + private final WeakReference listenerWeakReference; + + public CheckFileWritePermissionTask(OnCheckFileWritePermissionListener listener) { + this.listenerWeakReference = new WeakReference<>(listener); + } + + @Override + protected Boolean doInBackground(File... files) { + try { + return files[0].canWrite(); + } catch (Exception ex) { + return false; + } + } + + @Override + protected void onCancelled() { + OnCheckFileWritePermissionListener listener = listenerWeakReference.get(); + if (listener != null) { + listener.onError(); + } + } + + @Override + protected void onPostExecute(Boolean result) { + OnCheckFileWritePermissionListener listener = listenerWeakReference.get(); + if (listener != null) { + if (result) { + listener.onWritePermissionGranted(); + } else { + listener.onError(); + } + } + } + } + + /** + * Interface definition for a callback invoked when checking file's write permissions. + */ + public interface OnCheckFileWritePermissionListener { + + /** + * Invoked when app's process has a permission to write to a file. + */ + void onWritePermissionGranted(); + + /** + * Invoked when app's process doesn't have a permission to write to a file or an error occurs. + */ + void onError(); + } +} -- cgit v1.2.1