diff --git a/src/musikdroid/app/src/main/java/io/casey/musikcube/remote/ui/settings/activity/RemoteEqActivity.kt b/src/musikdroid/app/src/main/java/io/casey/musikcube/remote/ui/settings/activity/RemoteEqActivity.kt index cf5de63e0..087fff872 100644 --- a/src/musikdroid/app/src/main/java/io/casey/musikcube/remote/ui/settings/activity/RemoteEqActivity.kt +++ b/src/musikdroid/app/src/main/java/io/casey/musikcube/remote/ui/settings/activity/RemoteEqActivity.kt @@ -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(R.id.value) + row.findViewById(R.id.label).text = getString(R.string.remote_settings_eq_label_format, hz) + row.findViewById(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() diff --git a/src/musikdroid/app/src/main/java/io/casey/musikcube/remote/ui/settings/viewmodel/BaseRemoteViewModel.kt b/src/musikdroid/app/src/main/java/io/casey/musikcube/remote/ui/settings/viewmodel/BaseRemoteViewModel.kt index 531865ec8..3d835861d 100644 --- a/src/musikdroid/app/src/main/java/io/casey/musikcube/remote/ui/settings/viewmodel/BaseRemoteViewModel.kt +++ b/src/musikdroid/app/src/main/java/io/casey/musikcube/remote/ui/settings/viewmodel/BaseRemoteViewModel.kt @@ -6,10 +6,10 @@ import io.reactivex.disposables.CompositeDisposable import io.reactivex.rxkotlin.subscribeBy abstract class BaseRemoteViewModel: ViewModel() { - 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 diff --git a/src/musikdroid/app/src/main/java/io/casey/musikcube/remote/ui/settings/viewmodel/RemoteEqViewModel.kt b/src/musikdroid/app/src/main/java/io/casey/musikcube/remote/ui/settings/viewmodel/RemoteEqViewModel.kt index 479c26e7d..2e85598a7 100644 --- a/src/musikdroid/app/src/main/java/io/casey/musikcube/remote/ui/settings/viewmodel/RemoteEqViewModel.kt +++ b/src/musikdroid/app/src/main/java/io/casey/musikcube/remote/ui/settings/viewmodel/RemoteEqViewModel.kt @@ -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 + get() { + return domainModel?.bands?.keys?.sorted() ?: listOf() + } + + val bands: Map + 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 + } + ) + } + } } } \ No newline at end of file diff --git a/src/musikdroid/app/src/main/java/io/casey/musikcube/remote/ui/settings/viewmodel/RemoteSettingsViewModel.kt b/src/musikdroid/app/src/main/java/io/casey/musikcube/remote/ui/settings/viewmodel/RemoteSettingsViewModel.kt index 84d6a6cd1..1c319a5f5 100644 --- a/src/musikdroid/app/src/main/java/io/casey/musikcube/remote/ui/settings/viewmodel/RemoteSettingsViewModel.kt +++ b/src/musikdroid/app/src/main/java/io/casey/musikcube/remote/ui/settings/viewmodel/RemoteSettingsViewModel.kt @@ -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) { diff --git a/src/musikdroid/app/src/main/res/layout/eq_band_row.xml b/src/musikdroid/app/src/main/res/layout/eq_band_row.xml index 270497db5..b16aaaf5a 100644 --- a/src/musikdroid/app/src/main/res/layout/eq_band_row.xml +++ b/src/musikdroid/app/src/main/res/layout/eq_band_row.xml @@ -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"> + android:max="40" /> \ No newline at end of file diff --git a/src/musikdroid/app/src/main/res/values/strings.xml b/src/musikdroid/app/src/main/res/values/strings.xml index 399e59792..de660d7a4 100644 --- a/src/musikdroid/app/src/main/res/values/strings.xml +++ b/src/musikdroid/app/src/main/res/values/strings.xml @@ -133,6 +133,8 @@ playback transport equalizer configure + %d hz + %d dB gapless crossfade disabled