From f998deb725a4f3ca6ccc386b2a07014740c23528 Mon Sep 17 00:00:00 2001 From: Jnewbon <48688400+Jnewbon@users.noreply.github.com> Date: Mon, 11 Jul 2022 00:26:53 +0100 Subject: [PATCH] Added Storage Media type Write access --- android/app/build.gradle | 2 +- .../com/audiobookshelf/app/MainActivity.kt | 18 ------- .../app/plugins/AbsFileSystem.kt | 47 ++++++++++++++----- 3 files changed, 35 insertions(+), 32 deletions(-) diff --git a/android/app/build.gradle b/android/app/build.gradle index 163290a6..c077489b 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -111,7 +111,7 @@ dependencies { implementation 'io.github.pilgr:paperdb:2.7.2' // Simple Storage - implementation "com.anggrayudi:storage:0.13.0" + implementation "com.anggrayudi:storage:1.3.0" // OK HTTP implementation 'com.squareup.okhttp3:okhttp:4.9.2' diff --git a/android/app/src/main/java/com/audiobookshelf/app/MainActivity.kt b/android/app/src/main/java/com/audiobookshelf/app/MainActivity.kt index c1f60c88..09095282 100644 --- a/android/app/src/main/java/com/audiobookshelf/app/MainActivity.kt +++ b/android/app/src/main/java/com/audiobookshelf/app/MainActivity.kt @@ -5,11 +5,9 @@ import android.content.ComponentName import android.content.Context import android.content.Intent import android.content.ServiceConnection -import android.content.pm.PackageManager import android.os.Bundle import android.os.IBinder import android.util.Log -import androidx.core.app.ActivityCompat import com.anggrayudi.storage.SimpleStorage import com.anggrayudi.storage.SimpleStorageHelper import com.audiobookshelf.app.data.AbsDatabase @@ -19,7 +17,6 @@ import com.audiobookshelf.app.plugins.AbsAudioPlayer import com.audiobookshelf.app.plugins.AbsDownloader import com.audiobookshelf.app.plugins.AbsFileSystem import com.getcapacitor.BridgeActivity -import io.paperdb.Paper class MainActivity : BridgeActivity() { @@ -34,11 +31,6 @@ class MainActivity : BridgeActivity() { val storageHelper = SimpleStorageHelper(this) val storage = SimpleStorage(this) - val REQUEST_PERMISSIONS = 1 - var PERMISSIONS_ALL = arrayOf( - Manifest.permission.READ_EXTERNAL_STORAGE - ) - public override fun onCreate(savedInstanceState: Bundle?) { // TODO: Optimize using strict mode logs // StrictMode.setThreadPolicy(StrictMode.ThreadPolicy.Builder() @@ -58,16 +50,6 @@ class MainActivity : BridgeActivity() { DbManager.initialize(applicationContext) - // Grant full storage access for testing - // var ss = SimpleStorage(this) - // ss.requestFullStorageAccess() - - val permission = ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) - if (permission != PackageManager.PERMISSION_GRANTED) { - ActivityCompat.requestPermissions(this, - PERMISSIONS_ALL, - REQUEST_PERMISSIONS) - } registerPlugin(AbsAudioPlayer::class.java) registerPlugin(AbsDownloader::class.java) diff --git a/android/app/src/main/java/com/audiobookshelf/app/plugins/AbsFileSystem.kt b/android/app/src/main/java/com/audiobookshelf/app/plugins/AbsFileSystem.kt index 4beb4436..3d58cb41 100644 --- a/android/app/src/main/java/com/audiobookshelf/app/plugins/AbsFileSystem.kt +++ b/android/app/src/main/java/com/audiobookshelf/app/plugins/AbsFileSystem.kt @@ -1,5 +1,6 @@ package com.audiobookshelf.app.plugins +import android.app.AlertDialog import android.database.Cursor import android.net.Uri import android.os.Build @@ -65,39 +66,59 @@ class AbsFileSystem : Plugin() { @PluginMethod fun selectFolder(call: PluginCall) { - var mediaType = call.data.getString("mediaType", "book").toString() + val mediaType = call.data.getString("mediaType", "book").toString() + val REQUEST_CODE_SELECT_FOLDER = 6 + val REQUEST_CODE_SDCARD_ACCESS = 7 mainActivity.storage.folderPickerCallback = object : FolderPickerCallback { override fun onFolderSelected(requestCode: Int, folder: DocumentFile) { Log.d(TAG, "ON FOLDER SELECTED ${folder.uri} ${folder.name}") - var absolutePath = folder.getAbsolutePath(activity) - var storageType = folder.getStorageType(activity) - var simplePath = folder.getSimplePath(activity) - var basePath = folder.getBasePath(activity) - var folderId = android.util.Base64.encodeToString(folder.id.toByteArray(), android.util.Base64.DEFAULT) + val absolutePath = folder.getAbsolutePath(activity) + val storageType = folder.getStorageType(activity) + val simplePath = folder.getSimplePath(activity) + val basePath = folder.getBasePath(activity) + val folderId = android.util.Base64.encodeToString(folder.id.toByteArray(), android.util.Base64.DEFAULT) - var localFolder = LocalFolder(folderId, folder.name ?: "", folder.uri.toString(),basePath,absolutePath, simplePath, storageType.toString(), mediaType) + val localFolder = LocalFolder(folderId, folder.name ?: "", folder.uri.toString(),basePath,absolutePath, simplePath, storageType.toString(), mediaType) DeviceManager.dbManager.saveLocalFolder(localFolder) call.resolve(JSObject(jacksonMapper.writeValueAsString(localFolder))) } override fun onStorageAccessDenied(requestCode: Int, folder: DocumentFile?, storageType: StorageType) { - Log.e(TAG, "STORAGE ACCESS DENIED") - var jsobj = JSObject() - jsobj.put("error", "Access Denied") - call.resolve(jsobj) + val jsobj = JSObject() + if (requestCode == REQUEST_CODE_SELECT_FOLDER) { + + val builder: AlertDialog.Builder = AlertDialog.Builder(mainActivity) + builder.setMessage( + "You have no write access to this storage, thus selecting this folder is useless." + + "\nWould you like to grant access to this folder?") + builder.setNegativeButton("Dont Allow") { _, _ -> + run { + jsobj.put("error", "User Canceled, Access Denied") + call.resolve(jsobj) + } + } + builder.setPositiveButton("Allow.") { _, _ -> mainActivity.storageHelper.requestStorageAccess(REQUEST_CODE_SDCARD_ACCESS, storageType) } + builder.show() + } else { + Log.d(TAG, "STORAGE ACCESS DENIED $requestCode") + jsobj.put("error", "Access Denied") + call.resolve(jsobj) + } } + override fun onStoragePermissionDenied(requestCode: Int) { Log.d(TAG, "STORAGE PERMISSION DENIED $requestCode") - var jsobj = JSObject() + val jsobj = JSObject() jsobj.put("error", "Permission Denied") call.resolve(jsobj) } + } - mainActivity.storage.openFolderPicker(6) + mainActivity.storage.openFolderPicker(REQUEST_CODE_SELECT_FOLDER) } @RequiresApi(Build.VERSION_CODES.R)