mirror of
https://github.com/clangen/musikcube.git
synced 2025-04-15 20:42:33 +00:00
More eq ui boilerplate.
This commit is contained in:
parent
87fbf5801d
commit
f974911ded
@ -2,6 +2,9 @@ package io.casey.musikcube.remote.ui.settings.activity
|
||||
|
||||
import android.os.Bundle
|
||||
import android.view.View
|
||||
import android.widget.SeekBar
|
||||
import android.widget.TableLayout
|
||||
import android.widget.TextView
|
||||
import io.casey.musikcube.remote.R
|
||||
import io.casey.musikcube.remote.framework.ViewModel
|
||||
import io.casey.musikcube.remote.ui.settings.viewmodel.BaseRemoteViewModel
|
||||
@ -17,6 +20,7 @@ class RemoteEqActivity: BaseActivity() {
|
||||
private lateinit var data: DataProviderMixin
|
||||
private lateinit var viewModel: RemoteEqViewModel
|
||||
private lateinit var loadingOverlay: View
|
||||
private lateinit var table: TableLayout
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
component.inject(this)
|
||||
@ -26,6 +30,7 @@ class RemoteEqActivity: BaseActivity() {
|
||||
super.onCreate(savedInstanceState)
|
||||
setContentView(R.layout.activity_remote_eq)
|
||||
this.loadingOverlay = findViewById(R.id.loading_overlay)
|
||||
this.table = findViewById(R.id.eq_table)
|
||||
|
||||
viewModel = createViewModel()!!
|
||||
|
||||
@ -49,6 +54,30 @@ class RemoteEqActivity: BaseActivity() {
|
||||
|
||||
private fun drawNormal() {
|
||||
if (!initialized) {
|
||||
table.removeAllViews()
|
||||
viewModel.sortedBands.forEach { hz ->
|
||||
val row = layoutInflater.inflate(R.layout.eq_band_row, table, false)
|
||||
val value = (viewModel.bands[hz] ?: 0.0).toInt()
|
||||
val progress = (value + 20.0).toInt()
|
||||
val valueText = row.findViewById<TextView>(R.id.value)
|
||||
row.findViewById<TextView>(R.id.label).text = getString(R.string.remote_settings_eq_label_format, hz)
|
||||
row.findViewById<SeekBar>(R.id.seekbar).apply {
|
||||
this.progress = progress
|
||||
this.setOnSeekBarChangeListener(object : SeekBar.OnSeekBarChangeListener {
|
||||
override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) {
|
||||
valueText.text = getString(R.string.remote_settings_eq_value_format, progress - 20)
|
||||
}
|
||||
|
||||
override fun onStartTrackingTouch(seekBar: SeekBar) {
|
||||
}
|
||||
|
||||
override fun onStopTrackingTouch(seekBar: SeekBar) {
|
||||
}
|
||||
})
|
||||
}
|
||||
valueText.text = getString(R.string.remote_settings_eq_value_format, value)
|
||||
table.addView(row)
|
||||
}
|
||||
initialized = true
|
||||
}
|
||||
|
||||
@ -65,6 +94,7 @@ class RemoteEqActivity: BaseActivity() {
|
||||
drawNormal()
|
||||
}
|
||||
BaseRemoteViewModel.State.Disconnected,
|
||||
BaseRemoteViewModel.State.Error,
|
||||
BaseRemoteViewModel.State.Loading,
|
||||
BaseRemoteViewModel.State.Saving -> {
|
||||
drawLoading()
|
||||
|
@ -6,10 +6,10 @@ import io.reactivex.disposables.CompositeDisposable
|
||||
import io.reactivex.rxkotlin.subscribeBy
|
||||
|
||||
abstract class BaseRemoteViewModel: ViewModel<BaseRemoteViewModel.State>() {
|
||||
private var provider: IDataProvider? = null
|
||||
protected var provider: IDataProvider? = null
|
||||
protected var disposables = CompositeDisposable()
|
||||
|
||||
enum class State { Disconnected, Saving, Saved, Loading, Ready }
|
||||
enum class State { Disconnected, Saving, Saved, Loading, Ready, Error }
|
||||
|
||||
fun attach(provider: IDataProvider) {
|
||||
this.provider = provider
|
||||
|
@ -1,7 +1,38 @@
|
||||
package io.casey.musikcube.remote.ui.settings.viewmodel
|
||||
|
||||
class RemoteEqViewModel: BaseRemoteViewModel() {
|
||||
override fun onConnected() {
|
||||
import io.casey.musikcube.remote.service.websocket.model.IEqualizerSettings
|
||||
import io.reactivex.rxkotlin.subscribeBy
|
||||
|
||||
class RemoteEqViewModel: BaseRemoteViewModel() {
|
||||
private var domainModel: IEqualizerSettings? = null
|
||||
|
||||
val sortedBands: List<Int>
|
||||
get() {
|
||||
return domainModel?.bands?.keys?.sorted() ?: listOf()
|
||||
}
|
||||
|
||||
val bands: Map<Int, Double>
|
||||
get() {
|
||||
return domainModel?.bands ?: mapOf()
|
||||
}
|
||||
|
||||
override fun onConnected() {
|
||||
if (domainModel != null) {
|
||||
state = State.Ready
|
||||
}
|
||||
else {
|
||||
provider?.let {
|
||||
state = State.Loading
|
||||
it.getEqualizerSettings().subscribeBy(
|
||||
onNext = { result ->
|
||||
domainModel = result
|
||||
state = State.Ready
|
||||
},
|
||||
onError = {
|
||||
state = State.Error
|
||||
}
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -11,7 +11,6 @@ import io.reactivex.rxkotlin.subscribeBy
|
||||
class RemoteSettingsViewModel: BaseRemoteViewModel() {
|
||||
private var gain: IGainSettings? = null
|
||||
private var outputs: IOutputs? = null
|
||||
private var provider: IDataProvider? = null
|
||||
|
||||
var transportType: TransportType = TransportType.Gapless
|
||||
private set(value) {
|
||||
|
@ -4,15 +4,15 @@
|
||||
android:orientation="vertical"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingBottom="8dp">
|
||||
android:paddingBottom="8dp"
|
||||
android:paddingTop="8dp">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/label"
|
||||
android:layout_column="1"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:textSize="12sp"
|
||||
android:layout_gravity="center_vertical|right"
|
||||
tools:text="22000 hz" />
|
||||
|
||||
<SeekBar
|
||||
@ -21,8 +21,7 @@
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:min="0"
|
||||
android:max="4000" />
|
||||
android:max="40" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/value"
|
||||
@ -30,7 +29,6 @@
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:textSize="12sp"
|
||||
tools:text="0.0 dB"/>
|
||||
|
||||
</TableRow>
|
@ -133,6 +133,8 @@
|
||||
<string name="remote_settings_transport_type">playback transport</string>
|
||||
<string name="remote_settings_equalizer">equalizer</string>
|
||||
<string name="remote_settings_configure_eq_button">configure</string>
|
||||
<string name="remote_settings_eq_label_format">%d hz</string>
|
||||
<string name="remote_settings_eq_value_format">%d dB</string>
|
||||
<string name="transport_type_gapless">gapless</string>
|
||||
<string name="transport_type_crossfade">crossfade</string>
|
||||
<string name="replaygain_mode_disabled">disabled</string>
|
||||
|
Loading…
x
Reference in New Issue
Block a user