Commit ffc183d2 authored by wanglei's avatar wanglei

...

parent e65d4cf7
...@@ -25,9 +25,10 @@ ...@@ -25,9 +25,10 @@
android:roundIcon="@mipmap/logo" android:roundIcon="@mipmap/logo"
android:supportsRtl="true" android:supportsRtl="true"
android:theme="@style/Theme.BrowserWhite" android:theme="@style/Theme.BrowserWhite"
android:usesCleartextTraffic="true"
tools:targetApi="34"> tools:targetApi="34">
<activity <activity
android:name=".ui.activity.MainActivity" android:name=".ui.activity.MainActivity"
android:exported="true" android:exported="true"
android:launchMode="singleTask"> android:launchMode="singleTask">
<intent-filter> <intent-filter>
......
...@@ -10,9 +10,13 @@ import androidx.core.view.updatePadding ...@@ -10,9 +10,13 @@ import androidx.core.view.updatePadding
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentTransaction import androidx.fragment.app.FragmentTransaction
import com.base.browserwhite.R import com.base.browserwhite.R
import com.base.browserwhite.bean.ConstObject
import com.base.browserwhite.bean.ConstObject.GOOGLE
import com.base.browserwhite.databinding.ActivityWebBrowserBinding import com.base.browserwhite.databinding.ActivityWebBrowserBinding
import com.base.browserwhite.ui.activity.BaseActivity import com.base.browserwhite.ui.activity.BaseActivity
import com.base.browserwhite.ui.fragment.HomeFragment
import com.base.browserwhite.ui.fragment.WebViewFragment import com.base.browserwhite.ui.fragment.WebViewFragment
import com.base.browserwhite.ui.views.DialogViews.showSearchEngineDialog
import com.base.browserwhite.utils.BarUtils import com.base.browserwhite.utils.BarUtils
...@@ -23,6 +27,7 @@ class WebBrowserActivity : BaseActivity<ActivityWebBrowserBinding>() { ...@@ -23,6 +27,7 @@ class WebBrowserActivity : BaseActivity<ActivityWebBrowserBinding>() {
} }
private val fragmentList = arrayListOf<Fragment>() private val fragmentList = arrayListOf<Fragment>()
private var currentFragment: WebViewFragment? = null private var currentFragment: WebViewFragment? = null
private var searchAction: (context: String) -> String = HomeFragment.Companion::getBaiduSearch
override fun initView() { override fun initView() {
BarUtils.setStatusBarLightMode(this, true) BarUtils.setStatusBarLightMode(this, true)
...@@ -32,11 +37,45 @@ class WebBrowserActivity : BaseActivity<ActivityWebBrowserBinding>() { ...@@ -32,11 +37,45 @@ class WebBrowserActivity : BaseActivity<ActivityWebBrowserBinding>() {
val uri = intent.extras?.getString("url") ?: "" val uri = intent.extras?.getString("url") ?: ""
binding.editWeb.setText(uri) binding.editWeb.setText(uri)
val searchEngine = intent.extras?.getString("searchEngine") ?: GOOGLE
when (searchEngine) {
GOOGLE -> {
binding.ivSearchEngine.setImageResource(R.mipmap.h_s_google)
searchAction = HomeFragment.Companion::getGoogleSearch
}
ConstObject.BING -> {
binding.ivSearchEngine.setImageResource(R.mipmap.h_s_bing)
searchAction = HomeFragment.Companion::getBingSearch
}
ConstObject.YAHOO -> {
binding.ivSearchEngine.setImageResource(R.mipmap.h_s_yahoo)
searchAction = HomeFragment.Companion::getYahooSearch
}
ConstObject.DUCKDUCKGO -> {
binding.ivSearchEngine.setImageResource(R.mipmap.h_s_xuckd)
searchAction = HomeFragment.Companion::getDuckDuckGoSearch
}
ConstObject.YANDEX -> {
binding.ivSearchEngine.setImageResource(R.mipmap.h_s_yandex)
searchAction = HomeFragment.Companion::getYandexSearch
}
ConstObject.BAIDU -> {
binding.ivSearchEngine.setImageResource(R.mipmap.h_s_baidu)
searchAction = HomeFragment.Companion::getBaiduSearch
}
}
addNewWebSite(uri) addNewWebSite(uri)
} }
private fun checkLeftRight() { private fun checkLeftRight() {
if (currentFragment?.canGoBack() == true) { if (currentFragment?.canGoBack() == true) {
binding.ivLeft.setImageResource(R.mipmap.left_s) binding.ivLeft.setImageResource(R.mipmap.left_s)
...@@ -53,7 +92,7 @@ class WebBrowserActivity : BaseActivity<ActivityWebBrowserBinding>() { ...@@ -53,7 +92,7 @@ class WebBrowserActivity : BaseActivity<ActivityWebBrowserBinding>() {
override fun onEditorAction(v: TextView?, actionId: Int, event: KeyEvent?): Boolean { override fun onEditorAction(v: TextView?, actionId: Int, event: KeyEvent?): Boolean {
if (actionId == EditorInfo.IME_ACTION_DONE) { if (actionId == EditorInfo.IME_ACTION_DONE) {
val url = v?.text.toString() val url = v?.text.toString()
currentFragment?.loadWebView(url) currentFragment?.loadWebView(searchAction(url))
return true; // 返回true表示事件已处理 return true; // 返回true表示事件已处理
} }
return false return false
...@@ -84,6 +123,43 @@ class WebBrowserActivity : BaseActivity<ActivityWebBrowserBinding>() { ...@@ -84,6 +123,43 @@ class WebBrowserActivity : BaseActivity<ActivityWebBrowserBinding>() {
binding.ivHome.setOnClickListener { binding.ivHome.setOnClickListener {
finishToMain() finishToMain()
} }
binding.flSearchEngine.setOnClickListener {
showSearchEngineDialog { website ->
when (website) {
ConstObject.GOOGLE -> {
binding.ivSearchEngine.setImageResource(R.mipmap.h_s_google)
searchAction = HomeFragment.Companion::getGoogleSearch
}
ConstObject.BING -> {
binding.ivSearchEngine.setImageResource(R.mipmap.h_s_bing)
searchAction = HomeFragment.Companion::getBingSearch
}
ConstObject.YAHOO -> {
binding.ivSearchEngine.setImageResource(R.mipmap.h_s_yahoo)
searchAction = HomeFragment.Companion::getYahooSearch
}
ConstObject.DUCKDUCKGO -> {
binding.ivSearchEngine.setImageResource(R.mipmap.h_s_xuckd)
searchAction = HomeFragment.Companion::getDuckDuckGoSearch
}
ConstObject.YANDEX -> {
binding.ivSearchEngine.setImageResource(R.mipmap.h_s_yandex)
searchAction = HomeFragment.Companion::getYandexSearch
}
ConstObject.BAIDU -> {
binding.ivSearchEngine.setImageResource(R.mipmap.h_s_baidu)
searchAction = HomeFragment.Companion::getBaiduSearch
}
}
}
}
} }
private fun addNewWebSite(uri: String) { private fun addNewWebSite(uri: String) {
......
...@@ -5,6 +5,12 @@ import android.view.KeyEvent ...@@ -5,6 +5,12 @@ import android.view.KeyEvent
import android.view.inputmethod.EditorInfo.IME_ACTION_DONE import android.view.inputmethod.EditorInfo.IME_ACTION_DONE
import android.widget.TextView import android.widget.TextView
import com.base.browserwhite.R import com.base.browserwhite.R
import com.base.browserwhite.bean.ConstObject.BAIDU
import com.base.browserwhite.bean.ConstObject.BING
import com.base.browserwhite.bean.ConstObject.DUCKDUCKGO
import com.base.browserwhite.bean.ConstObject.GOOGLE
import com.base.browserwhite.bean.ConstObject.YAHOO
import com.base.browserwhite.bean.ConstObject.YANDEX
import com.base.browserwhite.bean.WebSiteBean import com.base.browserwhite.bean.WebSiteBean
import com.base.browserwhite.bean.defaultValue import com.base.browserwhite.bean.defaultValue
import com.base.browserwhite.bean.webSiteGroupBeanList import com.base.browserwhite.bean.webSiteGroupBeanList
...@@ -15,12 +21,15 @@ import com.base.browserwhite.ui.activity.webbrowser.WebBrowserActivity ...@@ -15,12 +21,15 @@ import com.base.browserwhite.ui.activity.webbrowser.WebBrowserActivity
import com.base.browserwhite.ui.adapter.HeadWebsiteAdapter import com.base.browserwhite.ui.adapter.HeadWebsiteAdapter
import com.base.browserwhite.ui.adapter.HeaderAdapter import com.base.browserwhite.ui.adapter.HeaderAdapter
import com.base.browserwhite.ui.adapter.NewsAdapter import com.base.browserwhite.ui.adapter.NewsAdapter
import com.base.browserwhite.ui.views.DialogViews.showSearchEngineDialog
import com.base.browserwhite.utils.AppPreferences import com.base.browserwhite.utils.AppPreferences
import com.base.browserwhite.utils.LogEx import com.base.browserwhite.utils.LogEx
import com.base.browserwhite.utils.NewsUtils.requestNews import com.base.browserwhite.utils.NewsUtils.requestNews
import com.chad.library.adapter4.QuickAdapterHelper import com.chad.library.adapter4.QuickAdapterHelper
import com.chad.library.adapter4.loadState.LoadState import com.chad.library.adapter4.loadState.LoadState
import com.chad.library.adapter4.loadState.trailing.TrailingLoadStateAdapter import com.chad.library.adapter4.loadState.trailing.TrailingLoadStateAdapter
import java.net.URLEncoder
import java.nio.charset.StandardCharsets
class HomeFragment : BaseFragment<FragmentHomeBinding>() { class HomeFragment : BaseFragment<FragmentHomeBinding>() {
...@@ -35,6 +44,8 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>() { ...@@ -35,6 +44,8 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>() {
private lateinit var helper: QuickAdapterHelper private lateinit var helper: QuickAdapterHelper
private var isLoading = false private var isLoading = false
private var headWebsiteAdapter: HeadWebsiteAdapter? = null private var headWebsiteAdapter: HeadWebsiteAdapter? = null
private var searchAction: (context: String) -> String = ::getBaiduSearch
private var searchEngine: String = GOOGLE
override fun setView() { override fun setView() {
...@@ -128,41 +139,49 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>() { ...@@ -128,41 +139,49 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>() {
} }
binding.flSearchEngine.setOnClickListener { binding.flSearchEngine.setOnClickListener {
// requireContext().showSearchEngineDialog { website -> requireContext().showSearchEngineDialog { website ->
// when (website) { searchEngine = website
// GOOGLE -> { when (website) {
// binding.ivSearchEngine.setImageResource(R.mipmap.h_s_google) GOOGLE -> {
// } binding.ivSearchEngine.setImageResource(R.mipmap.h_s_google)
// searchAction = ::getGoogleSearch
// BING -> { }
// binding.ivSearchEngine.setImageResource(R.mipmap.h_s_bing)
// } BING -> {
// binding.ivSearchEngine.setImageResource(R.mipmap.h_s_bing)
// YAHOO -> { searchAction = ::getBingSearch
// binding.ivSearchEngine.setImageResource(R.mipmap.h_s_yahoo) }
// }
// YAHOO -> {
// DUCKDUCKGO -> { binding.ivSearchEngine.setImageResource(R.mipmap.h_s_yahoo)
// binding.ivSearchEngine.setImageResource(R.mipmap.h_s_xuckd) searchAction = ::getYahooSearch
// } }
//
// YANDEX -> { DUCKDUCKGO -> {
// binding.ivSearchEngine.setImageResource(R.mipmap.h_s_yandex) binding.ivSearchEngine.setImageResource(R.mipmap.h_s_xuckd)
// } searchAction = ::getDuckDuckGoSearch
// }
// BAIDU -> {
// binding.ivSearchEngine.setImageResource(R.mipmap.h_s_baidu) YANDEX -> {
// } binding.ivSearchEngine.setImageResource(R.mipmap.h_s_yandex)
// searchAction = ::getYandexSearch
// } }
// }
BAIDU -> {
binding.ivSearchEngine.setImageResource(R.mipmap.h_s_baidu)
searchAction = ::getBaiduSearch
}
}
}
} }
binding.editWeb.setOnEditorActionListener(object : TextView.OnEditorActionListener { binding.editWeb.setOnEditorActionListener(object : TextView.OnEditorActionListener {
override fun onEditorAction(v: TextView?, actionId: Int, event: KeyEvent?): Boolean { override fun onEditorAction(v: TextView?, actionId: Int, event: KeyEvent?): Boolean {
if (actionId == IME_ACTION_DONE) { if (actionId == IME_ACTION_DONE) {
requireActivity().startActivity(Intent(requireContext(), WebBrowserActivity::class.java).apply { requireActivity().startActivity(Intent(requireContext(), WebBrowserActivity::class.java).apply {
putExtra("url", getGoogleSearch(v?.text.toString())) putExtra("searchEngine", searchEngine)
putExtra("url", searchAction(v?.text.toString()))
}) })
return true; // 返回true表示事件已处理 return true; // 返回true表示事件已处理
} }
...@@ -181,7 +200,8 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>() { ...@@ -181,7 +200,8 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>() {
companion object { companion object {
fun getGoogleSearch(content: String): String { fun getGoogleSearch(content: String): String {
val base = "https://www.google.com/" val base = "https://www.google.com/"
val search = "search?q=${content}&oq=${content}" val encodedQuery = URLEncoder.encode(content, StandardCharsets.UTF_8.toString())
val search = "search?q=${encodedQuery}&oq=${encodedQuery}"
return "$base$search" return "$base$search"
} }
...@@ -193,6 +213,27 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>() { ...@@ -193,6 +213,27 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>() {
} }
fun getYahooSearch(content: String): String {
val encodedQuery = URLEncoder.encode(content, StandardCharsets.UTF_8.toString())
return "https://search.yahoo.com/search?p=$encodedQuery"
}
fun getDuckDuckGoSearch(content: String): String {
val encodedQuery = URLEncoder.encode(content, StandardCharsets.UTF_8.toString())
return "https://www.duckduckgo.com/?q=encodedQuery"
}
fun getYandexSearch(content: String): String {
val encodedQuery = URLEncoder.encode(content, StandardCharsets.UTF_8.toString())
return "https://yandex.com/search/?text=$encodedQuery"
}
fun getBaiduSearch(content: String): String {
val encodedQuery = URLEncoder.encode(content, StandardCharsets.UTF_8.toString())
return "https://www.baidu.com/s?wd=$encodedQuery"
}
} }
......
...@@ -15,7 +15,10 @@ import android.webkit.WebSettings ...@@ -15,7 +15,10 @@ import android.webkit.WebSettings
import android.webkit.WebStorage import android.webkit.WebStorage
import android.webkit.WebView import android.webkit.WebView
import android.webkit.WebViewClient import android.webkit.WebViewClient
import com.base.browserwhite.R
import com.base.browserwhite.bean.ConstObject
import com.base.browserwhite.databinding.FragmentWebViewBinding import com.base.browserwhite.databinding.FragmentWebViewBinding
import com.base.browserwhite.ui.views.DialogViews.showSearchEngineDialog
import com.base.browserwhite.utils.LogEx import com.base.browserwhite.utils.LogEx
import kotlinx.coroutines.Job import kotlinx.coroutines.Job
...@@ -23,6 +26,7 @@ class WebViewFragment(val url: String) : BaseFragment<FragmentWebViewBinding>() ...@@ -23,6 +26,7 @@ class WebViewFragment(val url: String) : BaseFragment<FragmentWebViewBinding>()
private val TAG = "WebViewFragment" private val TAG = "WebViewFragment"
private var job: Job? = null private var job: Job? = null
private var searchAction: (context: String) -> String = HomeFragment.Companion::getBaiduSearch
override val binding: FragmentWebViewBinding by lazy { override val binding: FragmentWebViewBinding by lazy {
FragmentWebViewBinding.inflate(layoutInflater) FragmentWebViewBinding.inflate(layoutInflater)
...@@ -52,6 +56,7 @@ class WebViewFragment(val url: String) : BaseFragment<FragmentWebViewBinding>() ...@@ -52,6 +56,7 @@ class WebViewFragment(val url: String) : BaseFragment<FragmentWebViewBinding>()
} }
fun loadWebView(loadUrl: String) { fun loadWebView(loadUrl: String) {
binding.llError.visibility = View.GONE
binding.webView.visibility = View.VISIBLE binding.webView.visibility = View.VISIBLE
binding.webView.loadUrl(loadUrl) binding.webView.loadUrl(loadUrl)
} }
...@@ -140,7 +145,7 @@ class WebViewFragment(val url: String) : BaseFragment<FragmentWebViewBinding>() ...@@ -140,7 +145,7 @@ class WebViewFragment(val url: String) : BaseFragment<FragmentWebViewBinding>()
} }
override fun onReceivedError(view: WebView?, request: WebResourceRequest?, error: WebResourceError?) { override fun onReceivedError(view: WebView?, request: WebResourceRequest?, error: WebResourceError?) {
LogEx.logDebug(TAG, "onReceivedError") LogEx.logDebug(TAG, "onReceivedError ${error?.description}")
super.onReceivedError(view, request, error) super.onReceivedError(view, request, error)
job?.cancel() job?.cancel()
binding.webView.visibility = View.GONE binding.webView.visibility = View.GONE
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment