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."
This commit is contained in:
parent
57327be7f3
commit
d667fca8d3
|
@ -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)
|
||||
|
||||
|
|
Loading…
Reference in New Issue