Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 84006a1

Browse files
committed
test
1 parent 58113ad commit 84006a1

13 files changed

Lines changed: 85 additions & 84 deletions

File tree

app/src/main/java/com/example/fragment/project/App.kt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ import coil.ImageLoader
66
import coil.ImageLoaderFactory
77
import coil.decode.GifDecoder
88
import coil.decode.ImageDecoderDecoder
9-
import coil.decode.SvgDecoder
109
import com.example.fragment.library.base.http.GSonConverter
1110
import com.example.fragment.library.base.http.SimpleHttp
1211
import com.example.fragment.library.base.utils.OkHelper
@@ -32,7 +31,6 @@ class App : Application(), ImageLoaderFactory {
3231
add(GifDecoder())
3332
}
3433
}
35-
.componentRegistry { add(SvgDecoder(applicationContext)) }
3634
.build()
3735
}
3836

config.gradle

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ ext {
2323
// coil
2424
"coil-kt" : "io.coil-kt:coil:$coil_version",
2525
"coil-gif" : "io.coil-kt:coil-gif:$coil_version",
26-
"coil-svg" : "io.coil-kt:coil-svg:$coil_version",
2726
// google
2827
"google-flexbox" : 'com.google.android:flexbox:2.0.1',
2928
"google-material" : 'com.google.android.material:material:1.2.0',

library-base/build.gradle

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,6 @@ dependencies {
4848
api rootProject.ext.dependencies["androidx-room-ktx"]
4949
api rootProject.ext.dependencies["coil-kt"]
5050
api rootProject.ext.dependencies["coil-gif"]
51-
api rootProject.ext.dependencies["coil-svg"]
5251
api rootProject.ext.dependencies["google-flexbox"]
5352
api rootProject.ext.dependencies["google-material"]
5453
api rootProject.ext.dependencies["google-gson"]

library-base/src/main/java/com/example/fragment/library/base/utils/WebViewHelper.kt

Lines changed: 41 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,9 @@ import com.example.fragment.library.base.http.HttpRequest
1717
import com.example.fragment.library.base.http.download
1818
import com.example.fragment.library.base.utils.InjectUtils.injectVConsoleJs
1919
import com.example.fragment.library.base.utils.UIModeUtils.isNightMode
20-
import com.tencent.smtt.export.external.interfaces.*
20+
import com.tencent.smtt.export.external.interfaces.IX5WebSettings
21+
import com.tencent.smtt.export.external.interfaces.WebResourceRequest
22+
import com.tencent.smtt.export.external.interfaces.WebResourceResponse
2123
import com.tencent.smtt.sdk.*
2224
import com.tencent.smtt.sdk.WebView.HitTestResult.IMAGE_TYPE
2325
import com.tencent.smtt.sdk.WebView.HitTestResult.SRC_IMAGE_ANCHOR_TYPE
@@ -36,9 +38,7 @@ class WebViewHelper private constructor(parent: ViewGroup) {
3638

3739
private val webView = WebViewManager.obtain(parent.context)
3840

39-
40-
var onReceivedTitleListener: OnReceivedTitleListener? = null
41-
var onPageChangedListener: OnPageChangedListener? = null
41+
private var onPageChangedListener: OnPageChangedListener? = null
4242

4343
private var injectState = false
4444
private var injectVConsole = false
@@ -68,16 +68,13 @@ class WebViewHelper private constructor(parent: ViewGroup) {
6868
view: WebView?,
6969
request: WebResourceRequest?
7070
): WebResourceResponse? {
71-
val uri = request?.url
72-
if (view != null && uri != null) {
73-
val url = uri.toString()
74-
val extension = getExtensionFromUrl(url)
71+
if (view != null && request != null) {
7572
when {
76-
isAssetsResource(url) -> {
77-
return assetsResourceRequest(view.context, url)
73+
isAssetsResource(request) -> {
74+
return assetsResourceRequest(view.context, request)
7875
}
79-
isWebResource(extension) -> {
80-
return webResourceRequest(view.context, url, extension)
76+
isWebResource(request) -> {
77+
return webResourceRequest(view.context, request)
8178
}
8279
}
8380
}
@@ -86,39 +83,25 @@ class WebViewHelper private constructor(parent: ViewGroup) {
8683

8784
override fun onPageStarted(view: WebView?, url: String?, favicon: Bitmap?) {
8885
super.onPageStarted(view, url, favicon)
89-
injectState = false
9086
onPageChangedListener?.onPageStarted(view, url, favicon)
87+
injectState = false
9188
}
9289

9390
override fun onPageFinished(view: WebView?, url: String?) {
9491
super.onPageFinished(view, url)
95-
injectState = false
9692
onPageChangedListener?.onPageFinished(view, url)
97-
}
98-
99-
override fun onReceivedSslError(
100-
view: WebView?,
101-
handler: SslErrorHandler?,
102-
error: SslError?
103-
) {
104-
super.onReceivedSslError(view, handler, error)
105-
handler?.proceed() //接受证书
93+
injectState = false
10694
}
10795
}
10896
webView.webChromeClient = object : WebChromeClient() {
10997

110-
override fun onReceivedTitle(view: WebView?, title: String?) {
111-
super.onReceivedTitle(view, title)
112-
onReceivedTitleListener?.onReceivedTitle(view, title)
113-
}
114-
11598
override fun onProgressChanged(view: WebView?, newProgress: Int) {
11699
super.onProgressChanged(view, newProgress)
117-
if (injectVConsole && !injectState && newProgress > 80) {
100+
onPageChangedListener?.onProgressChanged(view, newProgress)
101+
if (newProgress > 80 && injectVConsole && !injectState) {
118102
view?.apply { evaluateJavascript(context.injectVConsoleJs()) {} }
119103
injectState = true
120104
}
121-
onPageChangedListener?.onProgressChanged(view, newProgress)
122105
}
123106
}
124107
webView.setDownloadListener { url, _, _, _, _ ->
@@ -159,6 +142,11 @@ class WebViewHelper private constructor(parent: ViewGroup) {
159142
return this
160143
}
161144

145+
fun setOnPageChangedListener(onPageChangedListener: OnPageChangedListener?): WebViewHelper {
146+
this.onPageChangedListener = onPageChangedListener
147+
return this
148+
}
149+
162150
fun canGoBack(): Boolean {
163151
val canBack = webView.canGoBack()
164152
if (canBack) webView.goBack()
@@ -202,28 +190,36 @@ class WebViewHelper private constructor(parent: ViewGroup) {
202190
WebViewManager.recycle(webView)
203191
}
204192

205-
private fun isAssetsResource(url: String): Boolean {
193+
private fun isAssetsResource(webRequest: WebResourceRequest): Boolean {
194+
val url = webRequest.url.toString()
206195
return url.startsWith("file:///android_asset/")
207196
}
208197

209-
private fun isWebResource(extension: String): Boolean {
198+
private fun isWebResource(webRequest: WebResourceRequest): Boolean {
199+
val url = webRequest.url.toString()
200+
val extension = getExtensionFromUrl(url)
210201
return extension == "ico" || extension == "gif"
211202
|| extension == "jpeg" || extension == "jpg"
212203
|| extension == "png" || extension == "svg"
213204
|| extension == "webp" || extension == "css"
214205
|| extension == "js" || extension == "json"
215206
}
216207

217-
private fun assetsResourceRequest(context: Context, url: String): WebResourceResponse? {
208+
private fun assetsResourceRequest(
209+
context: Context,
210+
webRequest: WebResourceRequest
211+
): WebResourceResponse? {
218212
try {
219-
val webResourceResponse = WebResourceResponse()
213+
val url = webRequest.url.toString()
220214
val filenameIndex = url.lastIndexOf("/") + 1
221215
val filename = url.substring(filenameIndex)
222216
val suffixIndex = url.lastIndexOf(".")
223217
val suffix = url.substring(suffixIndex + 1)
224-
webResourceResponse.mimeType = getMimeTypeFromExtension(url)
218+
val webResourceResponse = WebResourceResponse()
219+
webResourceResponse.mimeType = getMimeTypeFromUrl(url)
225220
webResourceResponse.encoding = "UTF-8"
226-
webResourceResponse.data = context.resources.assets.open("$suffix/$filename")
221+
webResourceResponse.data = context.assets.open("$suffix/$filename")
222+
webResourceResponse.responseHeaders = mapOf("access-control-allow-origin" to "*")
227223
return webResourceResponse
228224
} catch (e: Exception) {
229225
e.printStackTrace()
@@ -233,24 +229,26 @@ class WebViewHelper private constructor(parent: ViewGroup) {
233229

234230
private fun webResourceRequest(
235231
context: Context,
236-
url: String,
237-
extension: String
232+
webRequest: WebResourceRequest
238233
): WebResourceResponse? {
239234
try {
235+
val url = webRequest.url.toString()
240236
val cachePath = CacheUtils.getCacheDirPath(context, "web_cache")
241237
val filePathName = cachePath + File.separator + url.encodeUtf8().md5().hex()
242238
val file = File(filePathName)
243239
if (!file.exists() || !file.isFile) {
244240
runBlocking {
245-
download(HttpRequest(url), filePathName)
241+
download(HttpRequest(url).apply {
242+
webRequest.requestHeaders.forEach { putHeader(it.key, it.value) }
243+
}, filePathName)
246244
}
247245
}
248246
if (file.exists() && file.isFile) {
249247
val webResourceResponse = WebResourceResponse()
250-
webResourceResponse.mimeType = getMimeTypeFromExtension(extension)
248+
webResourceResponse.mimeType = getMimeTypeFromUrl(url)
251249
webResourceResponse.encoding = "UTF-8"
252-
webResourceResponse.responseHeaders = mapOf("access-control-allow-origin" to "*")
253250
webResourceResponse.data = file.inputStream()
251+
webResourceResponse.responseHeaders = mapOf("access-control-allow-origin" to "*")
254252
return webResourceResponse
255253
}
256254
} catch (e: Exception) {
@@ -270,8 +268,9 @@ class WebViewHelper private constructor(parent: ViewGroup) {
270268
return ""
271269
}
272270

273-
private fun getMimeTypeFromExtension(extension: String): String {
271+
private fun getMimeTypeFromUrl(url: String): String {
274272
try {
273+
val extension = getExtensionFromUrl(url)
275274
if (extension.isNotBlank() && extension != "null") {
276275
if (extension == "json") {
277276
return "application/json"
@@ -284,17 +283,11 @@ class WebViewHelper private constructor(parent: ViewGroup) {
284283
return "*/*"
285284
}
286285

287-
288-
interface OnReceivedTitleListener {
289-
fun onReceivedTitle(view: WebView?, title: String?)
290-
}
291-
292286
interface OnPageChangedListener {
293287
fun onPageStarted(view: WebView?, url: String?, favicon: Bitmap?)
294288
fun onPageFinished(view: WebView?, url: String?)
295289
fun onProgressChanged(view: WebView?, newProgress: Int)
296290
}
297-
298291
}
299292

300293
@SuppressLint("SetJavaScriptEnabled")

library-common/src/main/java/com/example/fragment/library/common/fragment/WebFragment.kt

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,10 @@ import android.view.LayoutInflater
88
import android.view.View
99
import android.view.ViewGroup
1010
import androidx.activity.addCallback
11+
import coil.load
1112
import com.example.fragment.library.base.model.BaseViewModel
1213
import com.example.fragment.library.base.utils.WebViewHelper
14+
import com.example.fragment.library.common.R
1315
import com.example.fragment.library.common.constant.Keys
1416
import com.example.fragment.library.common.databinding.FragmentWebBinding
1517
import com.tencent.smtt.sdk.WebView
@@ -54,21 +56,25 @@ class WebFragment : RouterFragment() {
5456
}
5557

5658
override fun initView() {
57-
webViewHelper = WebViewHelper.with(binding.webContainer).injectVConsole(false)
58-
webViewHelper.onPageChangedListener = object : WebViewHelper.OnPageChangedListener {
59-
override fun onPageStarted(view: WebView?, url: String?, favicon: Bitmap?) {
60-
binding.progressBar.visibility = View.VISIBLE
61-
}
59+
val url = requireArguments().getString(Keys.URL)
60+
binding.monkey.load(R.drawable.icons8_monkey)
61+
webViewHelper = WebViewHelper.with(binding.webContainer)
62+
.injectVConsole(false)
63+
.setOnPageChangedListener(object : WebViewHelper.OnPageChangedListener {
64+
override fun onPageStarted(view: WebView?, url: String?, favicon: Bitmap?) {
65+
binding.monkey.visibility = View.VISIBLE
66+
binding.progressBar.visibility = View.VISIBLE
67+
}
6268

63-
override fun onPageFinished(view: WebView?, url: String?) {
64-
binding.progressBar.visibility = View.GONE
65-
}
69+
override fun onPageFinished(view: WebView?, url: String?) {
70+
binding.monkey.visibility = View.GONE
71+
binding.progressBar.visibility = View.GONE
72+
}
6673

67-
override fun onProgressChanged(view: WebView?, newProgress: Int) {
68-
binding.progressBar.progress = newProgress
69-
}
70-
}
71-
val url = requireArguments().getString(Keys.URL)
74+
override fun onProgressChanged(view: WebView?, newProgress: Int) {
75+
binding.progressBar.progress = newProgress
76+
}
77+
})
7278
if (!url.isNullOrBlank()) {
7379
webViewHelper.loadUrl(Uri.decode(url))
7480
}
47.3 KB
Loading

library-common/src/main/res/layout/fragment_web.xml

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,12 @@
44
android:layout_height="match_parent"
55
android:background="@color/white">
66

7+
<ImageView
8+
android:id="@+id/monkey"
9+
android:layout_width="wrap_content"
10+
android:layout_height="wrap_content"
11+
android:layout_centerInParent="true" />
12+
713
<com.example.fragment.library.base.view.StatusBar
814
android:id="@+id/status_bar"
915
android:layout_width="match_parent"
@@ -12,7 +18,7 @@
1218
<LinearLayout
1319
android:id="@+id/nav_bar"
1420
android:layout_width="match_parent"
15-
android:layout_height="45dp"
21+
android:layout_height="50dp"
1622
android:layout_alignParentBottom="true"
1723
android:background="@drawable/layer_web_nav_bar_bg"
1824
android:orientation="horizontal">
@@ -50,18 +56,17 @@
5056
android:src="@drawable/ic_web_browse" />
5157
</LinearLayout>
5258

53-
<com.example.fragment.library.base.view.SnailBar
54-
android:id="@+id/progress_bar"
55-
android:layout_width="match_parent"
56-
android:layout_height="3dp"
57-
android:layout_above="@id/nav_bar"
58-
android:visibility="gone" />
59-
6059
<FrameLayout
6160
android:id="@+id/web_container"
6261
android:layout_width="match_parent"
6362
android:layout_height="match_parent"
6463
android:layout_above="@id/nav_bar"
6564
android:layout_below="@id/status_bar" />
6665

66+
<com.example.fragment.library.base.view.SnailBar
67+
android:id="@+id/progress_bar"
68+
android:layout_width="match_parent"
69+
android:layout_height="3dp"
70+
android:layout_above="@id/nav_bar" />
71+
6772
</RelativeLayout>

module-user/src/main/java/com/example/fragment/module/user/fragment/SettingFragment.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -241,8 +241,10 @@ class SettingFragment : RouterFragment() {
241241
}
242242
}
243243
}
244+
WanHelper.getUIMode()
244245
WanHelper.registerUser(viewLifecycleOwner) { userBean ->
245246
binding.logout.visibility = if (userBean.id.isNotBlank()) View.VISIBLE else View.GONE
246247
}
248+
WanHelper.getUser()
247249
}
248250
}

module-wan/src/main/java/com/example/fragment/module/wan/fragment/HomeFragment.kt

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import androidx.fragment.app.activityViewModels
88
import androidx.recyclerview.widget.LinearLayoutManager
99
import com.example.fragment.library.base.model.BaseViewModel
1010
import com.example.fragment.library.base.utils.BannerHelper
11-
import com.example.fragment.library.base.utils.MetricsUtils
1211
import com.example.fragment.library.base.view.pull.OnLoadMoreListener
1312
import com.example.fragment.library.base.view.pull.OnRefreshListener
1413
import com.example.fragment.library.base.view.pull.PullRefreshLayout
@@ -60,18 +59,12 @@ class HomeFragment : RouterFragment() {
6059
}
6160

6261
override fun initView() {
63-
binding.coordinator.setMaxScrollY(MetricsUtils.dp2px(175F).toInt())
6462
binding.banner.adapter = bannerAdapter
6563
bannerHelper = BannerHelper(binding.banner)
6664
bannerHelper?.startTimerTask()
6765
//文章列表
6866
binding.list.layoutManager = LinearLayoutManager(binding.list.context)
6967
binding.list.adapter = articleAdapter
70-
binding.list.post {
71-
val layoutParams = binding.list.layoutParams
72-
layoutParams.height = binding.coordinator.height
73-
binding.list.layoutParams = layoutParams
74-
}
7568
//下拉刷新
7669
binding.pullRefresh.setOnRefreshListener(object : OnRefreshListener {
7770
override fun onRefresh(refreshLayout: PullRefreshLayout) {
@@ -84,6 +77,12 @@ class HomeFragment : RouterFragment() {
8477
viewModel.getArticleNext()
8578
}
8679
})
80+
binding.coordinator.post {
81+
binding.coordinator.setMaxScrollY(binding.banner.height)
82+
val layoutParams = binding.list.layoutParams
83+
layoutParams.height = binding.coordinator.height
84+
binding.list.layoutParams = layoutParams
85+
}
8786
}
8887

8988
override fun initViewModel(): BaseViewModel {

module-wan/src/main/java/com/example/fragment/module/wan/fragment/NavigationFragment.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ class NavigationFragment : RouterFragment() {
4646
override fun initView() {
4747
//TabLayout与ViewPager2
4848
binding.viewpager2.adapter = object : FragmentStateAdapter(
49-
activity.supportFragmentManager,
49+
childFragmentManager,
5050
viewLifecycleOwner.lifecycle
5151
) {
5252
override fun getItemCount(): Int {

0 commit comments

Comments
 (0)