Additional bug fixes and index validation around output device/driver

selection in RemoteSettingsActivity on android.
This commit is contained in:
casey langen 2018-01-15 15:36:35 -08:00
parent 765ba61ac2
commit 2fd6b36030

View File

@ -85,8 +85,10 @@ class RemoteSettingsActivity: BaseActivity() {
private fun drawNormal() { private fun drawNormal() {
if (!initialized) { if (!initialized) {
preampSeekbar.progress = ((viewModel.preampGain + 20.0f) * 100).toInt() preampSeekbar.progress = ((viewModel.preampGain + 20.0f) * 100).toInt()
driverSpinner.onItemSelectedListener = null
driverSpinner.adapter = DriverAdapter(viewModel.outputDrivers) driverSpinner.adapter = DriverAdapter(viewModel.outputDrivers)
driverSpinner.setSelection(viewModel.selectedDriverIndex) driverSpinner.setSelection(viewModel.selectedDriverIndex)
driverSpinner.onItemSelectedListener = driverChangeListener
deviceSpinner.adapter = DevicesAdapter(viewModel.devicesAt(viewModel.selectedDriverIndex)) deviceSpinner.adapter = DevicesAdapter(viewModel.devicesAt(viewModel.selectedDriverIndex))
deviceSpinner.setSelection(viewModel.selectedDeviceIndex) deviceSpinner.setSelection(viewModel.selectedDeviceIndex)
replayGainSpinner.setSelection(REPLAYGAIN_MODE_TO_INDEX[viewModel.replayGainMode]!!) replayGainSpinner.setSelection(REPLAYGAIN_MODE_TO_INDEX[viewModel.replayGainMode]!!)
@ -107,13 +109,12 @@ class RemoteSettingsActivity: BaseActivity() {
var driverName = "" var driverName = ""
var deviceId = "" var deviceId = ""
if (driverSpinner.adapter.count > 0) { val selectedDriver = driverSpinner.selectedItemPosition
val selectedDriver = driverSpinner.selectedItemPosition val selectedDevice = deviceSpinner.selectedItemPosition
val selectedDevice = deviceSpinner.selectedItemPosition if (selectedDriver >= 0 && driverSpinner.adapter.count > selectedDriver) {
driverName = viewModel.outputDrivers[selectedDriver].name driverName = viewModel.outputDrivers[selectedDriver].name
if (deviceSpinner.adapter.count > 0) { if (selectedDevice >= 0 && deviceSpinner.adapter.count > selectedDevice) {
deviceId = viewModel.devicesAt(selectedDriver)[selectedDevice].id deviceId = viewModel.devicesAt(selectedDriver)[selectedDevice].id
} }
} }
@ -139,6 +140,9 @@ class RemoteSettingsActivity: BaseActivity() {
) )
}) })
/* devices */
driverSpinner.onItemSelectedListener = driverChangeListener
/* replaygain / preamp */ /* replaygain / preamp */
val replayGainModes = ArrayAdapter.createFromResource( val replayGainModes = ArrayAdapter.createFromResource(
this, R.array.replaygain_mode_array, android.R.layout.simple_spinner_dropdown_item) this, R.array.replaygain_mode_array, android.R.layout.simple_spinner_dropdown_item)
@ -185,6 +189,21 @@ class RemoteSettingsActivity: BaseActivity() {
)) ))
} }
private val driverChangeListener = object:AdapterView.OnItemSelectedListener {
override fun onNothingSelected(parent: AdapterView<*>?) {
}
override fun onItemSelected(parent: AdapterView<*>?, view: View?, pos: Int, id: Long) {
deviceSpinner.adapter = DevicesAdapter(viewModel.devicesAt(driverSpinner.selectedItemPosition))
if (pos == viewModel.selectedDriverIndex) {
deviceSpinner.setSelection(viewModel.selectedDeviceIndex)
}
else {
deviceSpinner.setSelection(0)
}
}
}
private class DriverAdapter(private val outputs: List<IOutput>): BaseAdapter() { private class DriverAdapter(private val outputs: List<IOutput>): BaseAdapter() {
override fun getView(pos: Int, view: View?, parent: ViewGroup?): View { override fun getView(pos: Int, view: View?, parent: ViewGroup?): View {
var bind = view var bind = view
@ -206,7 +225,7 @@ class RemoteSettingsActivity: BaseActivity() {
var bind = view var bind = view
if (view == null) { if (view == null) {
bind = LayoutInflater.from(parent?.context).inflate( bind = LayoutInflater.from(parent?.context).inflate(
android.R.layout.simple_spinner_dropdown_item, parent, false) android.R.layout.simple_spinner_dropdown_item, parent, false)
} }
(bind as TextView).text = devices[pos].name (bind as TextView).text = devices[pos].name
return bind return bind