kopia lustrzana https://github.com/ge0rg/aprsdroid
Prefs: move file chooser logic to master branch
rodzic
f1d6c08439
commit
17448937b8
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
|
Ładowanie…
Reference in New Issue