From d667fca8d32df385f7b7e2a9d19cdb00bb24fbe6 Mon Sep 17 00:00:00 2001 From: BlakDulz Date: Sat, 23 Dec 2023 20:42:00 +0700 Subject: [PATCH] Implement Refresh on DocumentProvider "When interacting with DocumentUI or the built-in Android System Internal Files Manager app and performing Create, Rename, and Delete operations, DocumentsUI will not automatically refresh the changes. Previously, users had to manually pull down from the top to refresh the changes. This commit aims to fix this issue by automatically notifying the system that changes have occurred and triggering a requery." --- .../dolphinemu/features/DocumentProvider.kt | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) 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 b637962177..434b344417 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 @@ -9,8 +9,10 @@ package org.dolphinemu.dolphinemu.features import android.annotation.TargetApi +import android.content.Context import android.database.Cursor import android.database.MatrixCursor +import android.net.Uri import android.os.Build import android.os.CancellationSignal import android.os.ParcelFileDescriptor @@ -93,6 +95,8 @@ class DocumentProvider : DocumentsProvider() { appendDocument(file, result) } } + result.setNotificationUri(context!!.contentResolver, DocumentsContract.buildChildDocumentsUri( + "${context!!.packageName}.user", parentDocumentId)) return result } @@ -121,6 +125,7 @@ class DocumentProvider : DocumentsProvider() { } else { file.createNewFile() } + refreshDocument(parentDocumentId) return pathToDocumentId(file) } @@ -128,7 +133,9 @@ class DocumentProvider : DocumentsProvider() { rootDirectory ?: return val file = documentIdToPath(documentId) + val fileParent = file.parentFile file.deleteRecursively() + refreshDocument(pathToDocumentId(fileParent!!)) } override fun renameDocument(documentId: String, displayName: String): String? { @@ -137,9 +144,19 @@ class DocumentProvider : DocumentsProvider() { val file = documentIdToPath(documentId) val dest = findFileNameForNewFile(File(file.parentFile, displayName)) file.renameTo(dest) + refreshDocument(pathToDocumentId(file.parentFile!!)) return pathToDocumentId(dest) } + private fun refreshDocument(parentDocumentId: String) { + val parentUri: Uri = + DocumentsContract.buildChildDocumentsUri( + "${context!!.packageName}.user", + parentDocumentId + ) + context!!.contentResolver.notifyChange(parentUri, null) + } + override fun isChildDocument(parentDocumentId: String, documentId: String): Boolean = documentId.startsWith(parentDocumentId)