forked from geode-sdk/android-launcher
automatically refresh provider
This commit is contained in:
1 file changed
+27
-12
@@ -2,6 +2,7 @@ package com.geode.launcher
|
|||||||
|
|
||||||
import android.database.Cursor
|
import android.database.Cursor
|
||||||
import android.database.MatrixCursor
|
import android.database.MatrixCursor
|
||||||
|
import android.net.Uri
|
||||||
import android.os.CancellationSignal
|
import android.os.CancellationSignal
|
||||||
import android.os.ParcelFileDescriptor
|
import android.os.ParcelFileDescriptor
|
||||||
import android.provider.DocumentsContract
|
import android.provider.DocumentsContract
|
||||||
@@ -76,6 +77,10 @@ class UserDirectoryProvider : DocumentsProvider() {
|
|||||||
return MatrixCursor(projection ?: DEFAULT_DOCUMENT_PROJECTION).apply {
|
return MatrixCursor(projection ?: DEFAULT_DOCUMENT_PROJECTION).apply {
|
||||||
val parent = getFileForDocumentId(parentDocumentId ?: ROOT)
|
val parent = getFileForDocumentId(parentDocumentId ?: ROOT)
|
||||||
parent.listFiles()?.forEach { file -> appendDocument(this, file) }
|
parent.listFiles()?.forEach { file -> appendDocument(this, file) }
|
||||||
|
|
||||||
|
context?.let {
|
||||||
|
setNotificationUri(it.contentResolver, getDocumentUri(parentDocumentId))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -88,16 +93,6 @@ class UserDirectoryProvider : DocumentsProvider() {
|
|||||||
return ParcelFileDescriptor.open(file, ParcelFileDescriptor.parseMode(mode))
|
return ParcelFileDescriptor.open(file, ParcelFileDescriptor.parseMode(mode))
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun addDocument(cursor: MatrixCursor, file: File) {
|
|
||||||
cursor.newRow().apply {
|
|
||||||
add(DocumentsContract.Document.COLUMN_DOCUMENT_ID, getDocumentIdForFile(file))
|
|
||||||
add(DocumentsContract.Document.COLUMN_MIME_TYPE, typeForFile(file))
|
|
||||||
add(DocumentsContract.Document.COLUMN_DISPLAY_NAME, file.name)
|
|
||||||
add(DocumentsContract.Document.COLUMN_LAST_MODIFIED, file.lastModified())
|
|
||||||
add(DocumentsContract.Document.COLUMN_SIZE, file.length())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun appendDocument(cursor: MatrixCursor, file: File) {
|
private fun appendDocument(cursor: MatrixCursor, file: File) {
|
||||||
var flags = 0
|
var flags = 0
|
||||||
if (file.canWrite()) {
|
if (file.canWrite()) {
|
||||||
@@ -133,7 +128,7 @@ class UserDirectoryProvider : DocumentsProvider() {
|
|||||||
parentDocumentId: String,
|
parentDocumentId: String,
|
||||||
mimeType: String,
|
mimeType: String,
|
||||||
displayName: String
|
displayName: String
|
||||||
): String? {
|
): String {
|
||||||
val folder = getFileForDocumentId(parentDocumentId)
|
val folder = getFileForDocumentId(parentDocumentId)
|
||||||
val file = findFileNameForNewFile(File(folder, displayName))
|
val file = findFileNameForNewFile(File(folder, displayName))
|
||||||
if (mimeType == DocumentsContract.Document.MIME_TYPE_DIR) {
|
if (mimeType == DocumentsContract.Document.MIME_TYPE_DIR) {
|
||||||
@@ -142,18 +137,22 @@ class UserDirectoryProvider : DocumentsProvider() {
|
|||||||
file.createNewFile()
|
file.createNewFile()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
notifyFileChange(file)
|
||||||
return getDocumentIdForFile(file)
|
return getDocumentIdForFile(file)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun deleteDocument(documentId: String) {
|
override fun deleteDocument(documentId: String) {
|
||||||
val file = getFileForDocumentId(documentId)
|
val file = getFileForDocumentId(documentId)
|
||||||
file.deleteRecursively()
|
file.deleteRecursively()
|
||||||
}
|
notifyFileChange(file)
|
||||||
|
}
|
||||||
|
|
||||||
override fun renameDocument(documentId: String, displayName: String): String? {
|
override fun renameDocument(documentId: String, displayName: String): String? {
|
||||||
val file = getFileForDocumentId(documentId)
|
val file = getFileForDocumentId(documentId)
|
||||||
val dest = findFileNameForNewFile(File(file.parentFile, displayName))
|
val dest = findFileNameForNewFile(File(file.parentFile, displayName))
|
||||||
file.renameTo(dest)
|
file.renameTo(dest)
|
||||||
|
|
||||||
|
notifyFileChange(file)
|
||||||
return getDocumentIdForFile(dest)
|
return getDocumentIdForFile(dest)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -185,4 +184,20 @@ class UserDirectoryProvider : DocumentsProvider() {
|
|||||||
}
|
}
|
||||||
return unusedFile
|
return unusedFile
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun getDocumentUri(parentDocumentId: String?): Uri {
|
||||||
|
return DocumentsContract.buildChildDocumentsUri(
|
||||||
|
"${context!!.packageName}.user",
|
||||||
|
parentDocumentId
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun notifyFileChange(file: File) {
|
||||||
|
notifyChange(getDocumentIdForFile(file.parentFile!!))
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun notifyChange(parentDocumentId: String?) {
|
||||||
|
val uri = getDocumentUri(parentDocumentId)
|
||||||
|
context!!.contentResolver.notifyChange(uri, null)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Reference in new issue
Block a user