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
|
package org.aprsdroid.app
|
||||||
|
|
||||||
|
import _root_.android.content.Intent
|
||||||
|
import _root_.android.net.Uri
|
||||||
import _root_.android.os.Bundle
|
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.PreferenceActivity
|
||||||
|
import _root_.android.preference.PreferenceManager
|
||||||
|
|
||||||
class PrefsAct extends PreferenceActivity {
|
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) {
|
override def onCreate(savedInstanceState: Bundle) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
addPreferencesFromResource(R.xml.preferences)
|
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