summaryrefslogtreecommitdiff
path: root/Source/Android/app/src/main/java
diff options
context:
space:
mode:
authorMai <mai.iam2048@gmail.com>2023-04-16 04:21:33 -0400
committerGitHub <noreply@github.com>2023-04-16 04:21:33 -0400
commit1a2dcc53f2d7a85b0d49e9d2b12d819a2f57b835 (patch)
treeb925101f715b46bbd79bcd75d3bc054e460b75cb /Source/Android/app/src/main/java
parente50f87af1595aec535c031937eceedbf6d0d9e6f (diff)
parent57ed5320b59371fd0d3162e7611312cdc80e3b46 (diff)
Merge pull request #11742 from K0bin/document-provider-2
Android: Document Provider improvements
Diffstat (limited to 'Source/Android/app/src/main/java')
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/DocumentProvider.kt80
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/main/MainActivity.java1
2 files changed, 26 insertions, 55 deletions
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/DocumentProvider.kt b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/DocumentProvider.kt
index 089170125c..b637962177 100644
--- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/DocumentProvider.kt
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/DocumentProvider.kt
@@ -54,12 +54,11 @@ class DocumentProvider : DocumentsProvider() {
override fun queryRoots(projection: Array<String>?): Cursor {
val result = MatrixCursor(projection ?: DEFAULT_ROOT_PROJECTION)
- rootDirectory = rootDirectory ?: DirectoryInitialization.getUserDirectoryPath(context)
rootDirectory ?: return result
result.newRow().apply {
add(DocumentsContract.Root.COLUMN_ROOT_ID, ROOT_ID)
- add(DocumentsContract.Root.COLUMN_TITLE, context!!.getString(R.string.app_name))
+ add(DocumentsContract.Root.COLUMN_TITLE, context!!.getString(R.string.app_name_suffixed))
add(DocumentsContract.Root.COLUMN_ICON, R.drawable.ic_dolphin)
add(
DocumentsContract.Root.COLUMN_FLAGS,
@@ -73,7 +72,6 @@ class DocumentProvider : DocumentsProvider() {
override fun queryDocument(documentId: String, projection: Array<String>?): Cursor {
val result = MatrixCursor(projection ?: DEFAULT_DOCUMENT_PROJECTION)
- rootDirectory = rootDirectory ?: DirectoryInitialization.getUserDirectoryPath(context)
rootDirectory ?: return result
val file = documentIdToPath(documentId)
appendDocument(file, result)
@@ -102,7 +100,9 @@ class DocumentProvider : DocumentsProvider() {
documentId: String,
mode: String,
signal: CancellationSignal?
- ): ParcelFileDescriptor {
+ ): ParcelFileDescriptor? {
+ rootDirectory ?: return null
+
val file = documentIdToPath(documentId)
return ParcelFileDescriptor.open(file, ParcelFileDescriptor.parseMode(mode))
}
@@ -111,7 +111,9 @@ class DocumentProvider : DocumentsProvider() {
parentDocumentId: String,
mimeType: String,
displayName: String
- ): String {
+ ): String? {
+ rootDirectory ?: return null
+
val folder = documentIdToPath(parentDocumentId)
val file = findFileNameForNewFile(File(folder, displayName))
if (mimeType == DocumentsContract.Document.MIME_TYPE_DIR) {
@@ -122,56 +124,40 @@ class DocumentProvider : DocumentsProvider() {
return pathToDocumentId(file)
}
- override fun copyDocument(sourceDocumentId: String, targetParentDocumentId: String): String {
- val file = documentIdToPath(sourceDocumentId)
- val target = documentIdToPath(targetParentDocumentId)
- val copy = copyRecursively(file, File(target, file.name))
- return pathToDocumentId(copy)
- }
+ override fun deleteDocument(documentId: String) {
+ rootDirectory ?: return
- override fun removeDocument(documentId: String, parentDocumentId: String) {
val file = documentIdToPath(documentId)
file.deleteRecursively()
}
- override fun moveDocument(
- sourceDocumentId: String,
- sourceParentDocumentId: String,
- targetParentDocumentId: String
- ): String {
- val copy = copyDocument(sourceDocumentId, targetParentDocumentId)
- val file = documentIdToPath(sourceDocumentId)
- file.delete()
- return copy
- }
+ override fun renameDocument(documentId: String, displayName: String): String? {
+ rootDirectory ?: return null
- override fun renameDocument(documentId: String, displayName: String): String {
val file = documentIdToPath(documentId)
- file.renameTo(findFileNameForNewFile(File(file.parentFile, displayName)))
- return pathToDocumentId(file)
+ val dest = findFileNameForNewFile(File(file.parentFile, displayName))
+ file.renameTo(dest)
+ return pathToDocumentId(dest)
}
- override fun isChildDocument(parentDocumentId: String, documentId: String): Boolean {
- val file = documentIdToPath(documentId)
- val folder = documentIdToPath(parentDocumentId)
- return file.relativeToOrNull(folder) != null
- }
+ override fun isChildDocument(parentDocumentId: String, documentId: String): Boolean
+ = documentId.startsWith(parentDocumentId)
private fun appendDocument(file: File, cursor: MatrixCursor) {
var flags = 0
- if (file.isDirectory && file.canWrite()) {
- flags = DocumentsContract.Document.FLAG_DIR_SUPPORTS_CREATE
- } else if (file.canWrite()) {
- flags = DocumentsContract.Document.FLAG_SUPPORTS_WRITE
+ if (file.canWrite()) {
+ flags = if (file.isDirectory) {
+ DocumentsContract.Document.FLAG_DIR_SUPPORTS_CREATE
+ } else {
+ DocumentsContract.Document.FLAG_SUPPORTS_WRITE
+ }
flags = flags or DocumentsContract.Document.FLAG_SUPPORTS_DELETE
- flags = flags or DocumentsContract.Document.FLAG_SUPPORTS_REMOVE
- flags = flags or DocumentsContract.Document.FLAG_SUPPORTS_MOVE
- flags = flags or DocumentsContract.Document.FLAG_SUPPORTS_COPY
flags = flags or DocumentsContract.Document.FLAG_SUPPORTS_RENAME
+ // The system will handle copy + move for us
}
val name = if (file == rootDirectory) {
- context!!.getString(R.string.app_name)
+ context!!.getString(R.string.app_name_suffixed)
} else {
file.name
}
@@ -217,22 +203,6 @@ class DocumentProvider : DocumentsProvider() {
unusedFile = File("$pathWithoutExtension.$i.$extension")
i++
}
- return file
- }
-
- private fun copyRecursively(src: File, dst: File): File {
- val actualDst = findFileNameForNewFile(dst)
- if (src.isDirectory) {
- actualDst.mkdirs()
- val children = src.listFiles()
- if (children !== null) {
- for (file in children) {
- copyRecursively(file, File(actualDst, file.name))
- }
- }
- } else {
- src.copyTo(actualDst)
- }
- return actualDst
+ return unusedFile
}
}
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/main/MainActivity.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/main/MainActivity.java
index 1b0ff8cc32..488f0909df 100644
--- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/main/MainActivity.java
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/main/MainActivity.java
@@ -77,6 +77,7 @@ public final class MainActivity extends AppCompatActivity
setInsets();
ThemeHelper.enableStatusBarScrollTint(this, mBinding.appbarMain);
+ mBinding.toolbarMain.setTitle(R.string.app_name);
setSupportActionBar(mBinding.toolbarMain);
// Set up the FAB.