feat: SettingsActivity 使用 SourceRegistry 驱动源切换
This commit is contained in:
@@ -11,7 +11,8 @@ import android.widget.Toast
|
|||||||
import androidx.appcompat.app.AppCompatActivity
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
import com.videoapp.tv.data.ConfigRepository
|
import com.videoapp.tv.data.ConfigRepository
|
||||||
import com.videoapp.tv.data.SiteConfig
|
import com.videoapp.tv.data.SiteConfig
|
||||||
import com.videoapp.tv.data.SitePreset
|
import com.videoapp.tv.engine.SourceHandler
|
||||||
|
import com.videoapp.tv.engine.SourceRegistry
|
||||||
|
|
||||||
class SettingsActivity : AppCompatActivity() {
|
class SettingsActivity : AppCompatActivity() {
|
||||||
|
|
||||||
@@ -53,44 +54,40 @@ class SettingsActivity : AppCompatActivity() {
|
|||||||
btnSave = findViewById(R.id.btn_save)
|
btnSave = findViewById(R.id.btn_save)
|
||||||
btnRestore = findViewById(R.id.btn_restore)
|
btnRestore = findViewById(R.id.btn_restore)
|
||||||
|
|
||||||
setupPresetSpinner()
|
setupSourceSpinner()
|
||||||
loadConfig()
|
loadConfig()
|
||||||
|
|
||||||
btnSave.setOnClickListener { saveConfig() }
|
btnSave.setOnClickListener { saveConfig() }
|
||||||
btnRestore.setOnClickListener {
|
btnRestore.setOnClickListener {
|
||||||
configRepo.restoreDefault()
|
configRepo.restoreDefault()
|
||||||
ignoringSpinner = true
|
|
||||||
spinnerPreset.setSelection(0)
|
|
||||||
ignoringSpinner = false
|
|
||||||
loadConfig()
|
loadConfig()
|
||||||
Toast.makeText(this, R.string.config_restored, Toast.LENGTH_SHORT).show()
|
Toast.makeText(this, R.string.config_restored, Toast.LENGTH_SHORT).show()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun setupPresetSpinner() {
|
private fun setupSourceSpinner() {
|
||||||
val presets = configRepo.getPresets()
|
val handlers = SourceRegistry.getAll()
|
||||||
val presetNames = presets.map { it.name }
|
val names = handlers.map { it.displayName }
|
||||||
val adapter = ArrayAdapter(
|
val adapter = ArrayAdapter(
|
||||||
this,
|
this,
|
||||||
android.R.layout.simple_spinner_item,
|
android.R.layout.simple_spinner_item,
|
||||||
presetNames
|
names
|
||||||
)
|
)
|
||||||
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
|
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
|
||||||
spinnerPreset.adapter = adapter
|
spinnerPreset.adapter = adapter
|
||||||
|
|
||||||
|
val currentId = configRepo.getCurrentSourceId()
|
||||||
|
val currentIndex = handlers.indexOfFirst { it.id == currentId }
|
||||||
|
if (currentIndex >= 0) {
|
||||||
|
spinnerPreset.setSelection(currentIndex)
|
||||||
|
}
|
||||||
|
|
||||||
spinnerPreset.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
|
spinnerPreset.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
|
||||||
override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {
|
override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {
|
||||||
if (ignoringSpinner) return
|
if (ignoringSpinner) return
|
||||||
val preset = presets.getOrNull(position) ?: return
|
val handler = handlers[position]
|
||||||
configRepo.applyPreset(preset)
|
configRepo.setCurrentSourceId(handler.id)
|
||||||
loadConfigFromPreset(preset.config)
|
|
||||||
Toast.makeText(
|
|
||||||
this@SettingsActivity,
|
|
||||||
"已切换到 ${preset.name}",
|
|
||||||
Toast.LENGTH_SHORT
|
|
||||||
).show()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onNothingSelected(parent: AdapterView<*>?) {}
|
override fun onNothingSelected(parent: AdapterView<*>?) {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -115,10 +112,9 @@ class SettingsActivity : AppCompatActivity() {
|
|||||||
val config = configRepo.getConfig()
|
val config = configRepo.getConfig()
|
||||||
loadConfigFromPreset(config)
|
loadConfigFromPreset(config)
|
||||||
|
|
||||||
val presets = configRepo.getPresets()
|
val handlers = SourceRegistry.getAll()
|
||||||
val matchedIndex = presets.indexOfFirst {
|
val currentId = configRepo.getCurrentSourceId()
|
||||||
it.config.baseUrl == config.baseUrl
|
val matchedIndex = handlers.indexOfFirst { it.id == currentId }
|
||||||
}
|
|
||||||
if (matchedIndex >= 0) {
|
if (matchedIndex >= 0) {
|
||||||
ignoringSpinner = true
|
ignoringSpinner = true
|
||||||
spinnerPreset.setSelection(matchedIndex)
|
spinnerPreset.setSelection(matchedIndex)
|
||||||
|
|||||||
Reference in New Issue
Block a user