feat: multi-source player with episode selection and auto-hide controls

- VideoExtractor: extract PlaySource (source tabs) with episodes grouped per source
- SiteConfig: add sourceSelector and sourceEpisodeGroupSelector CSS selectors
- PlayerActivity: source tabs + episode list at bottom, auto-hide after 4s, tap to toggle
- SettingsActivity: add source selector configuration fields
- Fullscreen playback with ExoPlayer or WebView fallback
This commit is contained in:
xiaji
2026-05-24 21:30:37 +08:00
parent cf17ce7722
commit cb016c116f
7 changed files with 227 additions and 103 deletions

View File

@@ -20,6 +20,8 @@ class SettingsActivity : AppCompatActivity() {
private lateinit var editTitleSelector: EditText
private lateinit var editCoverSelector: EditText
private lateinit var editLinkSelector: EditText
private lateinit var editSourceSelector: EditText
private lateinit var editSourceEpisodeGroupSelector: EditText
private lateinit var btnSave: Button
private lateinit var btnRestore: Button
@@ -38,6 +40,8 @@ class SettingsActivity : AppCompatActivity() {
editTitleSelector = findViewById(R.id.edit_title_selector)
editCoverSelector = findViewById(R.id.edit_cover_selector)
editLinkSelector = findViewById(R.id.edit_link_selector)
editSourceSelector = findViewById(R.id.edit_source_selector)
editSourceEpisodeGroupSelector = findViewById(R.id.edit_source_episode_group_selector)
btnSave = findViewById(R.id.btn_save)
btnRestore = findViewById(R.id.btn_restore)
@@ -64,6 +68,8 @@ class SettingsActivity : AppCompatActivity() {
editTitleSelector.setText(config.titleSelector)
editCoverSelector.setText(config.coverSelector)
editLinkSelector.setText(config.linkSelector)
editSourceSelector.setText(config.sourceSelector)
editSourceEpisodeGroupSelector.setText(config.sourceEpisodeGroupSelector)
}
private fun saveConfig() {
@@ -78,7 +84,9 @@ class SettingsActivity : AppCompatActivity() {
resultSelector = editResultSelector.text.toString().trim(),
titleSelector = editTitleSelector.text.toString().trim(),
coverSelector = editCoverSelector.text.toString().trim(),
linkSelector = editLinkSelector.text.toString().trim()
linkSelector = editLinkSelector.text.toString().trim(),
sourceSelector = editSourceSelector.text.toString().trim(),
sourceEpisodeGroupSelector = editSourceEpisodeGroupSelector.text.toString().trim()
)
configRepo.saveConfig(config)