feat: SettingsActivity 使用 SourceRegistry 驱动源切换

This commit is contained in:
xiaji
2026-06-09 19:55:36 +08:00
parent 2824f3f396
commit 16b1cbfc31

View File

@@ -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)