Commit fe4c6a7d authored by wanglei's avatar wanglei

Merge remote-tracking branch 'origin/master'

# Conflicts:
#	app/src/main/java/com/base/browserwhite/ui/activity/webbrowser/WebViewFragment.kt
parents cbe944fc ae57d9c8
......@@ -6,7 +6,9 @@ import android.animation.ObjectAnimator
import android.annotation.SuppressLint
import android.content.Intent
import android.graphics.Color
import android.text.Editable
import android.text.TextUtils
import android.text.TextWatcher
import android.view.View
import androidx.activity.addCallback
import androidx.core.view.updatePadding
......@@ -143,10 +145,17 @@ class WebBrowserActivity : BaseActivity<ActivityWebBrowserBinding>() {
}
private fun resetSearchLayout() {
val screenWidth = Utils.getScreenWidth(MyApplication.context) - MyApplication.context.dpToPx(30f)
val screenWidth =
Utils.getScreenWidth(MyApplication.context) - MyApplication.context.dpToPx(30f)
val reverseScaleXAnimator =
ObjectAnimator.ofFloat(binding.clSearch, "scaleX", screenWidth / binding.clSearch.width.toFloat(), 1f)
val reverseScaleYAnimator = ObjectAnimator.ofFloat(binding.clSearch, "scaleY", 50f / 44f, 1f)
ObjectAnimator.ofFloat(
binding.clSearch,
"scaleX",
screenWidth / binding.clSearch.width.toFloat(),
1f
)
val reverseScaleYAnimator =
ObjectAnimator.ofFloat(binding.clSearch, "scaleY", 50f / 44f, 1f)
binding.clSearch.pivotX = 0f
binding.clSearch.pivotY = 0f
reverseScaleXAnimator.setDuration(500)
......@@ -190,7 +199,10 @@ class WebBrowserActivity : BaseActivity<ActivityWebBrowserBinding>() {
"WevStoreActivity" -> {
if (System.currentTimeMillis() - lastShowInter > 40 * 1000 * 1000 || lastShowInter == 0L) {
AdmobMaxHelper.admobMaxShowInterstitialAd(this@WebBrowserActivity, false) {
AdmobMaxHelper.admobMaxShowInterstitialAd(
this@WebBrowserActivity,
false
) {
if (it) {
lastShowInter = System.currentTimeMillis()
}
......@@ -299,7 +311,12 @@ class WebBrowserActivity : BaseActivity<ActivityWebBrowserBinding>() {
},
joinAction = {
if (json == null) {
currentFragment?.bookmarkBean?.let { SpBeanUtils.addSpBean(BOOKMARK_SP_KEY, it) }
currentFragment?.bookmarkBean?.let {
SpBeanUtils.addSpBean(
BOOKMARK_SP_KEY,
it
)
}
val dialog = showAddRootBookmarkDialog {
BookmarkEditActivity.editBookmark = currentFragment?.bookmarkBean
startActivity(Intent(this, BookmarkEditActivity::class.java))
......@@ -355,10 +372,41 @@ class WebBrowserActivity : BaseActivity<ActivityWebBrowserBinding>() {
)
}
binding.ivPageSearchClose.setOnClickListener {
binding.editPageSearch.setText("")
binding.llPageSearch.visibility = View.GONE
binding.clBottom.visibility = View.VISIBLE
}
binding.editPageSearch.addTextChangedListener(object : TextWatcher {
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {
}
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
}
override fun afterTextChanged(s: Editable?) {
val key = s.toString()
if (currentFragment != null) {
currentFragment?.findAll(key)
}
}
})
binding.ivLeftSearch.setOnClickListener {
if(currentFragment!=null){
currentFragment?.lastSearch()
}
}
binding.ivRightSearch.setOnClickListener {
if(currentFragment!=null){
currentFragment?.nextSearch()
}
}
}
fun setSearchNum(int: Int,max:Int) {
binding.tvPageSearchNumber.text =""+int+"/"+max
}
override fun onResume() {
......@@ -388,7 +436,8 @@ class WebBrowserActivity : BaseActivity<ActivityWebBrowserBinding>() {
}
private fun getAddedBookmarkJson(url: String): String? {
return SpBeanUtils.getSpBeanList(BOOKMARK_SP_KEY).find { Gson().fromJson(it, BookmarkBean::class.java).url == url }
return SpBeanUtils.getSpBeanList(BOOKMARK_SP_KEY)
.find { Gson().fromJson(it, BookmarkBean::class.java).url == url }
}
}
\ No newline at end of file
......@@ -3,13 +3,15 @@ package com.base.browserwhite.ui.activity.webbrowser
import android.animation.ValueAnimator
import android.annotation.SuppressLint
import android.app.Dialog
import android.content.Context
import android.content.Intent
import android.net.Uri
import android.net.http.SslError
import android.text.Html
import android.util.Log
import android.view.View
import android.view.animation.AccelerateDecelerateInterpolator
import android.webkit.CookieManager
import android.webkit.JavascriptInterface
import android.webkit.JsResult
import android.webkit.SslErrorHandler
import android.webkit.ValueCallback
......@@ -24,7 +26,6 @@ import androidx.core.view.isVisible
import androidx.lifecycle.lifecycleScope
import com.base.browserwhite.MyApplication
import com.base.browserwhite.bean.BookmarkBean
import com.base.browserwhite.bean.ConstObject.downloadDisclaimer
import com.base.browserwhite.bean.ConstObject.webPrivacy
import com.base.browserwhite.bean.DownloadBean
import com.base.browserwhite.bean.HistoryBean
......@@ -57,6 +58,7 @@ import okhttp3.Request
import okhttp3.Response
import java.io.File
import java.io.IOException
import java.util.regex.Pattern
import kotlin.random.Random
......@@ -85,6 +87,7 @@ class WebViewFragment : BaseFragment<FragmentWebViewBinding>() {
var downloadDialog: Dialog? = null
override fun setListener() {
super.setListener()
searchResult = mutableListOf()
binding.tvReload.setOnClickListener {
reloadWebView()
}
......@@ -157,6 +160,83 @@ class WebViewFragment : BaseFragment<FragmentWebViewBinding>() {
}
requireContext().saveDownloadRecordFile(downloadList)
}
binding.webView.setFindListener { activeMatchOrdinal, numberOfMatches, isDoneCounting ->
if (numberOfMatches > 0) {
if (isDoneCounting) {
binding.webView.loadUrl("javascript:window.android.onSearchResult(document.body.innerText);")
}
} else {
if (activity is WebBrowserActivity) {
(activity as WebBrowserActivity)?.setSearchNum(0, 0)
}
searchResult.clear()
searchPosition = 0
}
}
}
private var keyword = ""
fun findAll(keyword: String) {
this.keyword = keyword
searchResult.clear() // 清空搜索结果
binding.webView.findAllAsync(keyword)
}
private var searchPosition = 0
fun nextSearch() {
if (searchResult.isNotEmpty()) {
searchPosition++
if (searchPosition >= searchResult.size) {
searchPosition = 0
}
scrollToPosition(true)
}
}
private fun scrollToPosition(position: Boolean) {
binding.webView.findNext(position)
searchResult.clear() // 清空搜索结果
}
fun lastSearch() {
if (searchResult.isNotEmpty()) {
searchPosition--
if (searchPosition < 0) {
searchPosition = searchResult.size - 1
}
scrollToPosition(false)
}
}
private fun highlightSearchResult() {
binding.webView.loadUrl("javascript:document.body.innerHTML = document.body.innerHTML.replace(/${keyword}/g, '<span style=\"background-color: #FFD700;\">$0</span>')")
}
private lateinit var searchResult: MutableList<Int>
@JavascriptInterface
fun onSearchResult(text: String?) {
text?.let {
val filteredText = Html.fromHtml(it).toString()
val pattern = Pattern.compile(keyword, Pattern.CASE_INSENSITIVE)
val matcher = pattern.matcher(filteredText)
while (matcher.find()) {
val start = matcher.start()
val end = matcher.end()
searchResult.add(start)
}
if (activity is WebBrowserActivity) {
(activity as WebBrowserActivity)?.setSearchNum(
searchPosition + 1,
searchResult.size
)
}
highlightSearchResult()
}
}
private fun dropAndBounceButton(button: View) {
......@@ -168,7 +248,6 @@ class WebViewFragment : BaseFragment<FragmentWebViewBinding>() {
// 掉落位置
val dropTranslationY = -(MyApplication.context.dpToPx(60f)).toFloat()
val dropTranslationY1 = -(MyApplication.context.dpToPx(20f)).toFloat()
val dropTranslationY2 = -(MyApplication.context.dpToPx(20f)).toFloat()
// 回弹高度
val animator = ValueAnimator.ofFloat(
......@@ -210,7 +289,7 @@ class WebViewFragment : BaseFragment<FragmentWebViewBinding>() {
val webSettings = binding.webView.settings
webSettings.allowFileAccess = true// 设置允许访问文件数据
webSettings.setSupportZoom(true)
webSettings.setSupportZoom(false)
webSettings.builtInZoomControls = true
webSettings.cacheMode = WebSettings.LOAD_NO_CACHE
webSettings.domStorageEnabled = true
......@@ -240,7 +319,6 @@ class WebViewFragment : BaseFragment<FragmentWebViewBinding>() {
webSettings.setUseWideViewPort(false);
webSettings.setLoadsImagesAutomatically(true); // 确保自动加载图片
//设置WebChromeClient
binding.webView.webChromeClient = object : WebChromeClient() {
......@@ -362,12 +440,9 @@ class WebViewFragment : BaseFragment<FragmentWebViewBinding>() {
//设置Cookie
val instance = CookieManager.getInstance()
instance.setAcceptThirdPartyCookies(binding.webView, true)
}
binding.webView.addJavascriptInterface(this, "android")
override fun onAttach(context: Context) {
super.onAttach(context)
}
private val downloadList = arrayListOf<DownloadBean>()
......
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