Get free space for storage authority if not available by other means
This commit is contained in:
parent
c04ddfa9a0
commit
81cbb6e4dc
1 changed files with 18 additions and 4 deletions
|
@ -10,6 +10,8 @@ import android.content.Context
|
||||||
import android.database.Cursor
|
import android.database.Cursor
|
||||||
import android.graphics.drawable.Drawable
|
import android.graphics.drawable.Drawable
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
|
import android.os.Environment
|
||||||
|
import android.os.StatFs
|
||||||
import android.os.UserHandle
|
import android.os.UserHandle
|
||||||
import android.provider.DocumentsContract
|
import android.provider.DocumentsContract
|
||||||
import android.provider.DocumentsContract.Root.COLUMN_AVAILABLE_BYTES
|
import android.provider.DocumentsContract.Root.COLUMN_AVAILABLE_BYTES
|
||||||
|
@ -99,6 +101,7 @@ internal object StorageRootResolver {
|
||||||
val rootId = cursor.getString(COLUMN_ROOT_ID)!!
|
val rootId = cursor.getString(COLUMN_ROOT_ID)!!
|
||||||
if (authority == AUTHORITY_STORAGE && rootId == ROOT_ID_HOME) return null
|
if (authority == AUTHORITY_STORAGE && rootId == ROOT_ID_HOME) return null
|
||||||
val documentId = cursor.getString(COLUMN_DOCUMENT_ID) ?: return null
|
val documentId = cursor.getString(COLUMN_DOCUMENT_ID) ?: return null
|
||||||
|
val isUsb = flags and FLAG_REMOVABLE_USB != 0
|
||||||
return SafOption(
|
return SafOption(
|
||||||
authority = authority,
|
authority = authority,
|
||||||
rootId = rootId,
|
rootId = rootId,
|
||||||
|
@ -106,11 +109,22 @@ internal object StorageRootResolver {
|
||||||
icon = getIcon(context, authority, rootId, cursor.getInt(COLUMN_ICON)),
|
icon = getIcon(context, authority, rootId, cursor.getInt(COLUMN_ICON)),
|
||||||
title = cursor.getString(COLUMN_TITLE)!!,
|
title = cursor.getString(COLUMN_TITLE)!!,
|
||||||
summary = cursor.getString(COLUMN_SUMMARY),
|
summary = cursor.getString(COLUMN_SUMMARY),
|
||||||
availableBytes = cursor.getLong(COLUMN_AVAILABLE_BYTES).let { bytes ->
|
availableBytes = cursor.getInt(COLUMN_AVAILABLE_BYTES).let { bytes ->
|
||||||
// AOSP 11 reports -1 instead of null
|
// AOSP 11+ reports -1 instead of null
|
||||||
if (bytes == -1L) null else bytes
|
if (bytes == -1) {
|
||||||
|
try {
|
||||||
|
if (isUsb) {
|
||||||
|
StatFs("/mnt/media_rw/${documentId.trimEnd(':')}").availableBytes
|
||||||
|
} else if (authority == AUTHORITY_STORAGE && rootId == ROOT_ID_DEVICE) {
|
||||||
|
StatFs(Environment.getDataDirectory().absolutePath).availableBytes
|
||||||
|
} else null
|
||||||
|
} catch (e: Exception) {
|
||||||
|
Log.e(TAG, "Error getting available bytes for $rootId ", e)
|
||||||
|
null
|
||||||
|
}
|
||||||
|
} else bytes.toLong()
|
||||||
},
|
},
|
||||||
isUsb = flags and FLAG_REMOVABLE_USB != 0,
|
isUsb = isUsb,
|
||||||
requiresNetwork = flags and FLAG_LOCAL_ONLY == 0 // not local only == requires network
|
requiresNetwork = flags and FLAG_LOCAL_ONLY == 0 // not local only == requires network
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue