Prefs: move file chooser logic to master branch

pull/227/head
Georg Lukas 2018-05-25 19:31:20 +02:00
rodzic f1d6c08439
commit 17448937b8
1 zmienionych plików z 71 dodań i 0 usunięć

Wyświetl plik

@ -1,11 +1,82 @@
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
import _root_.android.preference.PreferenceManager
class PrefsAct extends PreferenceActivity {
def fileChooserPreference(pref_name : String, reqCode : Int, titleId : Int) {
findPreference(pref_name).setOnPreferenceClickListener(new OnPreferenceClickListener() {
def onPreferenceClick(preference : Preference) = {
val get_file = new Intent(Intent.ACTION_GET_CONTENT).setType("*/*")
startActivityForResult(Intent.createChooser(get_file,
getString(titleId)), reqCode)
true
}
});
}
override def onCreate(savedInstanceState: Bundle) {
super.onCreate(savedInstanceState)
addPreferencesFromResource(R.xml.preferences)
}
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/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
}
if (file != null) {
PreferenceManager.getDefaultSharedPreferences(this)
.edit().putString(pref_name, file).commit()
android.widget.Toast.makeText(this, file,
android.widget.Toast.LENGTH_SHORT).show()
// reload prefs
finish()
startActivity(getIntent())
} else {
android.widget.Toast.makeText(this, getString(error_id, data.getDataString()),
android.widget.Toast.LENGTH_SHORT).show()
}
}
override def onActivityResult(reqCode : Int, resultCode : Int, data : Intent) {
android.util.Log.d("PrefsAct", "onActResult: request=" + reqCode + " result=" + resultCode + " " + data)
if (resultCode == android.app.Activity.RESULT_OK && reqCode == 123456) {
} else
if (resultCode == android.app.Activity.RESULT_OK && reqCode == 123457) {
} else
super.onActivityResult(reqCode, resultCode, data)
}
}