feat: replace direct player with web browser for search results

- Add BrowserActivity with WebView, toolbar (back/forward/close), URL bar, progress bar
- SearchFragment: open BrowserActivity instead of PlayerActivity on result click
- Browser allows user to browse the video site directly before choosing to play
This commit is contained in:
xiaji
2026-05-24 21:24:27 +08:00
parent 153b555d52
commit cf17ce7722
4 changed files with 203 additions and 4 deletions

View File

@@ -0,0 +1,123 @@
package com.videoapp.tv
import android.annotation.SuppressLint
import android.graphics.Bitmap
import android.os.Bundle
import android.view.KeyEvent
import android.view.View
import android.webkit.WebChromeClient
import android.webkit.WebSettings
import android.webkit.WebView
import android.webkit.WebViewClient
import android.widget.ImageButton
import android.widget.ProgressBar
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
class BrowserActivity : AppCompatActivity() {
private lateinit var webView: WebView
private lateinit var progressBar: ProgressBar
private lateinit var tvUrl: TextView
private lateinit var btnBack: ImageButton
private lateinit var btnForward: ImageButton
private lateinit var btnClose: ImageButton
@SuppressLint("SetJavaScriptEnabled")
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_browser)
webView = findViewById(R.id.browser_webview)
progressBar = findViewById(R.id.browser_progress)
tvUrl = findViewById(R.id.tv_url)
btnBack = findViewById(R.id.btn_back_browser)
btnForward = findViewById(R.id.btn_forward_browser)
btnClose = findViewById(R.id.btn_close_browser)
val url = intent.getStringExtra("url") ?: ""
val title = intent.getStringExtra("title") ?: ""
supportActionBar?.title = title
setupWebView()
setupListeners()
if (url.isNotEmpty()) {
webView.loadUrl(url)
}
}
@SuppressLint("SetJavaScriptEnabled")
private fun setupWebView() {
webView.settings.apply {
javaScriptEnabled = true
domStorageEnabled = true
mediaPlaybackRequiresUserGesture = false
allowFileAccess = true
allowContentAccess = true
useWideViewPort = true
loadWithOverviewMode = true
setSupportZoom(true)
builtInZoomControls = true
displayZoomControls = false
mixedContentMode = WebSettings.MIXED_CONTENT_ALWAYS_ALLOW
cacheMode = WebSettings.LOAD_DEFAULT
}
webView.webViewClient = object : WebViewClient() {
override fun onPageStarted(view: WebView, url: String, favicon: Bitmap?) {
super.onPageStarted(view, url, favicon)
tvUrl.text = url
progressBar.visibility = View.VISIBLE
updateNavButtons()
}
override fun onPageFinished(view: WebView, url: String) {
super.onPageFinished(view, url)
tvUrl.text = url
progressBar.visibility = View.GONE
updateNavButtons()
}
@Deprecated("Deprecated in Java")
override fun shouldOverrideUrlLoading(view: WebView, url: String): Boolean {
view.loadUrl(url)
return true
}
}
webView.webChromeClient = object : WebChromeClient() {
override fun onProgressChanged(view: WebView, newProgress: Int) {
progressBar.progress = newProgress
if (newProgress == 100) {
progressBar.visibility = View.GONE
}
}
}
}
private fun setupListeners() {
btnBack.setOnClickListener {
if (webView.canGoBack()) webView.goBack()
}
btnForward.setOnClickListener {
if (webView.canGoForward()) webView.goForward()
}
btnClose.setOnClickListener { finish() }
}
private fun updateNavButtons() {
btnBack.alpha = if (webView.canGoBack()) 1.0f else 0.4f
btnForward.alpha = if (webView.canGoForward()) 1.0f else 0.4f
}
override fun onKeyDown(keyCode: Int, event: KeyEvent): Boolean {
if (keyCode == KeyEvent.KEYCODE_BACK && webView.canGoBack()) {
webView.goBack()
return true
}
return super.onKeyDown(keyCode, event)
}
}

View File

@@ -19,7 +19,7 @@ import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.videoapp.tv.R
import com.videoapp.tv.PlayerActivity
import com.videoapp.tv.BrowserActivity
import com.videoapp.tv.SettingsActivity
import com.videoapp.tv.data.AppDatabase
import com.videoapp.tv.data.SearchHistory
@@ -185,10 +185,9 @@ class SearchFragment : Fragment() {
}
private fun openPlayer(result: SearchResult) {
val intent = Intent(requireContext(), PlayerActivity::class.java).apply {
putExtra("detail_url", result.detailUrl)
val intent = Intent(requireContext(), BrowserActivity::class.java).apply {
putExtra("url", result.detailUrl)
putExtra("title", result.title)
putExtra("category", result.category)
}
startActivity(intent)
}