From cf17ce77221b4cc84663ac195151d870ba0e568c Mon Sep 17 00:00:00 2001 From: xiaji Date: Sun, 24 May 2026 21:24:27 +0800 Subject: [PATCH] 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 --- app/src/main/AndroidManifest.xml | 5 + .../java/com/videoapp/tv/BrowserActivity.kt | 123 ++++++++++++++++++ .../java/com/videoapp/tv/ui/SearchFragment.kt | 7 +- app/src/main/res/layout/activity_browser.xml | 72 ++++++++++ 4 files changed, 203 insertions(+), 4 deletions(-) create mode 100644 app/src/main/java/com/videoapp/tv/BrowserActivity.kt create mode 100644 app/src/main/res/layout/activity_browser.xml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index e8f986a..cc0ffc6 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -34,6 +34,11 @@ android:name=".SettingsActivity" android:exported="false" /> + + diff --git a/app/src/main/java/com/videoapp/tv/BrowserActivity.kt b/app/src/main/java/com/videoapp/tv/BrowserActivity.kt new file mode 100644 index 0000000..c502372 --- /dev/null +++ b/app/src/main/java/com/videoapp/tv/BrowserActivity.kt @@ -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) + } +} diff --git a/app/src/main/java/com/videoapp/tv/ui/SearchFragment.kt b/app/src/main/java/com/videoapp/tv/ui/SearchFragment.kt index a43970f..dbcd17e 100644 --- a/app/src/main/java/com/videoapp/tv/ui/SearchFragment.kt +++ b/app/src/main/java/com/videoapp/tv/ui/SearchFragment.kt @@ -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) } diff --git a/app/src/main/res/layout/activity_browser.xml b/app/src/main/res/layout/activity_browser.xml new file mode 100644 index 0000000..f683c22 --- /dev/null +++ b/app/src/main/res/layout/activity_browser.xml @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + +