osm prefs: add support for convoluted Android 5+ external/primary storage URLs

mediatek_nojit
Georg Lukas 2016-09-24 14:52:40 +02:00
rodzic b48dca4a99
commit 1c535ac281
1 zmienionych plików z 25 dodań i 10 usunięć

Wyświetl plik

@ -3,6 +3,7 @@ package org.aprsdroid.app
import _root_.android.content.Intent
import _root_.android.net.Uri
import _root_.android.os.Bundle
import _root_.android.os.Environment
import _root_.android.preference.Preference
import _root_.android.preference.Preference.OnPreferenceClickListener
import _root_.android.preference.PreferenceActivity
@ -26,21 +27,35 @@ class PrefsAct extends PreferenceActivity {
fileChooserPreference("themefile", 123457)
}
def resolveContentUri(uri : Uri) = {
val Array(storage, path) = uri.getPath().replace("/document/", "").split(":", 2)
android.util.Log.d("PrefsAct", "resolveContentUri s=" + storage + " p=" + path)
if (storage == "primary")
Environment.getExternalStorageDirectory() + "/" + path
else
"/storage/" + storage + "/" + path
}
def parseFilePickerResult(data : Intent, pref_name : String, error_id : Int) {
val file = data.getData().getScheme() match {
case "file" =>
data.getData().getPath()
case "content" =>
// fix up Uri for KitKat+; http://stackoverflow.com/a/27271131/539443
val fixup_uri = Uri.parse(data.getDataString().replace(
"content://com.android.providers.downloads.documents/document",
"content://downloads/public_downloads"))
val cursor = getContentResolver().query(fixup_uri, null, null, null, null)
cursor.moveToFirst()
val idx = cursor.getColumnIndex("_data")
val result = if (idx != -1) cursor.getString(idx) else null
cursor.close()
result
// fix up Uri for KitKat+; http://stackoverflow.com/a/20559175/539443
// http://stackoverflow.com/a/27271131/539443
if ("com.android.externalstorage.documents".equals(data.getData().getAuthority())) {
resolveContentUri(data.getData())
} else {
val fixup_uri = Uri.parse(data.getDataString().replace(
"content://com.android.providers.downloads.documents/document",
"content://downloads/public_downloads"))
val cursor = getContentResolver().query(fixup_uri, null, null, null, null)
cursor.moveToFirst()
val idx = cursor.getColumnIndex("_data")
val result = if (idx != -1) cursor.getString(idx) else null
cursor.close()
result
}
case _ =>
null
}