Skip to content

Commit dadcb1e

Browse files
committed
v1.5.3
优化 1. 主界面加载速度
1 parent 555d78a commit dadcb1e

File tree

15 files changed

+205
-136
lines changed

15 files changed

+205
-136
lines changed

.idea/dictionaries/fumiama.xml

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/kotlinc.xml

Lines changed: 0 additions & 6 deletions
This file was deleted.

app/build.gradle

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@ android {
1010
applicationId "top.fumiama.copymangaweb"
1111
minSdkVersion 23
1212
targetSdkVersion 36
13-
versionCode 15
14-
versionName '1.5.2'
13+
versionCode 16
14+
versionName '1.5.3'
1515
resConfigs "zh", "zh-rCN"
1616

1717
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
@@ -97,7 +97,7 @@ if (propFile.canRead()){
9797
dependencies {
9898
implementation fileTree(dir: "libs", include: ["*.jar"])
9999
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
100-
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3"
100+
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.10.2'
101101
implementation 'androidx.core:core-ktx:1.16.0'
102102
implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.9.1'
103103
implementation 'androidx.constraintlayout:constraintlayout:2.2.1'

app/src/main/java/top/fumiama/copymangaweb/activity/DlActivity.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import android.widget.Toast
1414
import android.widget.ToggleButton
1515
import com.google.gson.Gson
1616
import top.fumiama.copymangaweb.R
17-
import top.fumiama.copymangaweb.activity.MainActivity.Companion.mh
17+
import top.fumiama.copymangaweb.activity.MainActivity.Companion.wm
1818
import top.fumiama.copymangaweb.activity.template.ToolsBoxActivity
1919
import top.fumiama.copymangaweb.data.ComicStructure
2020
import top.fumiama.copymangaweb.databinding.ActivityDlBinding
@@ -51,7 +51,7 @@ class DlActivity : ToolsBoxActivity() {
5151
super.onCreate(savedInstanceState)
5252
mBinding = ActivityDlBinding.inflate(layoutInflater)
5353
setContentView(mBinding.root)
54-
mh?.saveUrlsOnly = true
54+
wm?.get()?.saveUrlsOnly = true
5555
mangaDlTools = MangaDlTools(this)
5656
mBinding.dwh.apply { post {
5757
settings.userAgentString = getString(R.string.pc_ua)
@@ -63,7 +63,7 @@ class DlActivity : ToolsBoxActivity() {
6363
}
6464

6565
override fun onDestroy() {
66-
mh?.saveUrlsOnly = false
66+
wm?.get()?.saveUrlsOnly = false
6767
wmdlt?.get()?.exit = true
6868
handler.removeCallbacksAndMessages(null)
6969
super.onDestroy()

app/src/main/java/top/fumiama/copymangaweb/activity/DlListActivity.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ class DlListActivity: Activity() {
6262
ViewMangaActivity.zipFile = chosenFile
6363
ViewMangaActivity.titleText = it[position]
6464
ViewMangaActivity.zipPosition = position
65-
ViewMangaActivity.zipList = it as Array<String>
65+
ViewMangaActivity.zipList = it.toList().toTypedArray()
6666
ViewMangaActivity.cd = cd
6767
startActivity(Intent(this, ViewMangaActivity::class.java))
6868
}

app/src/main/java/top/fumiama/copymangaweb/activity/MainActivity.kt

Lines changed: 62 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import android.net.Uri
66
import android.os.Bundle
77
import android.os.Looper
88
import android.view.View
9+
import android.view.WindowManager
910
import android.webkit.ValueCallback
1011
import android.webkit.WebView
1112
import androidx.lifecycle.lifecycleScope
@@ -14,9 +15,12 @@ import kotlinx.coroutines.launch
1415
import kotlinx.coroutines.withContext
1516
import top.fumiama.copymangaweb.BuildConfig
1617
import top.fumiama.copymangaweb.R
18+
import top.fumiama.copymangaweb.activity.DlActivity.Companion.json
1719
import top.fumiama.copymangaweb.activity.template.ToolsBoxActivity
20+
import top.fumiama.copymangaweb.activity.viewmodel.MainViewModel
1821
import top.fumiama.copymangaweb.databinding.ActivityMainBinding
1922
import top.fumiama.copymangaweb.handler.MainHandler
23+
import top.fumiama.copymangaweb.tool.MangaDlTools.Companion.wmdlt
2024
import top.fumiama.copymangaweb.tool.SetDraggable
2125
import top.fumiama.copymangaweb.tool.Updater
2226
import top.fumiama.copymangaweb.web.JS
@@ -26,19 +30,23 @@ import java.lang.ref.WeakReference
2630

2731
class MainActivity: ToolsBoxActivity() {
2832
var uploadMessageAboveL: ValueCallback<Array<Uri>>? = null
33+
var saveUrlsOnly = false
2934
lateinit var mBinding: ActivityMainBinding
35+
private val mViewModel = MainViewModel()
3036

3137
@SuppressLint("JavascriptInterface")
3238
override fun onCreate(savedInstanceState: Bundle?) {
3339
super.onCreate(savedInstanceState)
3440
mBinding = ActivityMainBinding.inflate(layoutInflater)
41+
mBinding.mainViewModel = mViewModel
42+
mBinding.lifecycleOwner = this
3543
setContentView(mBinding.root)
3644

3745
wm = WeakReference(this)
3846
mh = MainHandler(Looper.myLooper()!!)
3947
toolsBox.netInfo.let {
4048
if(it == "无网络" || it == "错误") {
41-
mh?.sendEmptyMessage(MainHandler.SET_FAB_TO_DOWNLOAD_LIST)
49+
setFab2DlList()
4250
return@let
4351
}
4452

@@ -109,10 +117,41 @@ class MainActivity: ToolsBoxActivity() {
109117
).check(BuildConfig.VERSION_CODE)
110118
}
111119

112-
fun onFabClicked(v: View){
120+
fun loadHiddenUrl(u: String) {
121+
mBinding.wh.apply { post { loadUrl(u) } }
122+
}
123+
124+
fun updateLoadProgress(p: Int) {
125+
lifecycleScope.launch { mViewModel.updateLoadProgress(p) }
126+
}
127+
128+
fun setFab(content: String) {
129+
json = content
130+
lifecycleScope.launch {
131+
withContext(Dispatchers.Main) {
132+
mViewModel.showDlList.value = false
133+
mViewModel.setFabVisibility(true)
134+
}
135+
}
136+
}
137+
138+
fun setFab2DlList() {
139+
lifecycleScope.launch {
140+
withContext(Dispatchers.Main) {
141+
mViewModel.showDlList.value = true
142+
mViewModel.setFabVisibility(true)
143+
}
144+
}
145+
}
146+
147+
fun hideFab() {
148+
lifecycleScope.launch { mViewModel.setFabVisibility(false) }
149+
}
150+
151+
fun onFabClicked(v: View) {
113152
DlListActivity.currentDir = getExternalFilesDir("")
114153
startActivity(
115-
Intent(this, (if(mh?.showDlList == true) DlListActivity::class else DlActivity::class).java)
154+
Intent(this, (if(mViewModel.showDlList.value == true) DlListActivity::class else DlActivity::class).java)
116155
.putExtra("title", "我的下载")
117156
)
118157
}
@@ -128,6 +167,26 @@ class MainActivity: ToolsBoxActivity() {
128167
)
129168
}
130169

170+
fun callViewManga(content: String) {
171+
lifecycleScope.launch { withContext(Dispatchers.IO) {
172+
val listChapter = content.split('\n')
173+
if(!saveUrlsOnly) {
174+
ViewMangaActivity.titleText = listChapter[0].substringBeforeLast(' ')
175+
ViewMangaActivity.nextChapterUrl = listChapter[1].let { if(it == "null") null else it }
176+
ViewMangaActivity.previousChapterUrl = listChapter[2].let { if(it == "null") null else it }
177+
ViewMangaActivity.imgUrls = arrayOf()
178+
for(i in 3 until listChapter.size) ViewMangaActivity.imgUrls += listChapter[i]
179+
withContext(Dispatchers.Main) {
180+
startActivity(Intent(this@MainActivity, ViewMangaActivity::class.java))
181+
}
182+
} else {
183+
var imgs = arrayOf<String>()
184+
for(i in 3 until listChapter.size) imgs += listChapter[i]
185+
wmdlt?.get()?.setChapterImages(listChapter[0].substringAfterLast(' '), imgs)
186+
}
187+
} }
188+
}
189+
131190
companion object {
132191
const val FILE_CHOOSER_RESULT_CODE = 1
133192
var wm: WeakReference<MainActivity>? = null
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package top.fumiama.copymangaweb.activity.viewmodel
2+
3+
import android.view.View
4+
import androidx.lifecycle.MutableLiveData
5+
import androidx.lifecycle.ViewModel
6+
import kotlinx.coroutines.Dispatchers
7+
import kotlinx.coroutines.withContext
8+
9+
class MainViewModel: ViewModel() {
10+
val progress = MutableLiveData(0)
11+
val progressDuration = MutableLiveData(233L)
12+
val progressVisibility = MutableLiveData(View.VISIBLE)
13+
val fabVisibility = MutableLiveData(View.GONE)
14+
val showDlList = MutableLiveData(false)
15+
16+
suspend fun updateLoadProgress(p: Int) = withContext(Dispatchers.Main) {
17+
if(progress.value == 100 && p < 100) {
18+
progress.value = 0
19+
progressVisibility.value = View.VISIBLE
20+
return@withContext
21+
}
22+
progress.value = p
23+
}
24+
25+
suspend fun setFabVisibility(visible: Boolean) {
26+
withContext(Dispatchers.Main) {
27+
fabVisibility.value = if (visible) View.VISIBLE else View.GONE
28+
}
29+
}
30+
}

app/src/main/java/top/fumiama/copymangaweb/handler/MainHandler.kt

Lines changed: 1 addition & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,19 @@
11
package top.fumiama.copymangaweb.handler
22

3-
import android.animation.ObjectAnimator
43
import android.app.Dialog
5-
import android.content.Intent
64
import android.os.Handler
75
import android.os.Looper
86
import android.os.Message
9-
import android.view.View
107
import android.widget.TextView
118
import top.fumiama.copymangaweb.R
12-
import top.fumiama.copymangaweb.activity.DlActivity.Companion.json
139
import top.fumiama.copymangaweb.activity.MainActivity.Companion.wm
14-
import top.fumiama.copymangaweb.activity.ViewMangaActivity
15-
import top.fumiama.copymangaweb.tool.MangaDlTools.Companion.wmdlt
1610

17-
class MainHandler(looper: Looper):Handler(looper) {
18-
var saveUrlsOnly = false
19-
var showDlList = false
11+
class MainHandler(looper: Looper): Handler(looper) {
2012
private var dialog: Dialog? = null
2113

2214
override fun handleMessage(msg: Message) {
2315
super.handleMessage(msg)
2416
when(msg.what) {
25-
LOAD_URL_IN_HIDDEN_WEB_VIEW -> loadUrlInHiddenWebView(msg.obj as String)
26-
CALL_VIEW_MANGA -> callViewManga(msg.obj as String)
27-
UPDATE_LOAD_PROGRESS -> updateLoadProgress(msg.arg1)
28-
SET_FAB -> setFab(msg.obj as String)
29-
HIDE_FAB -> hideFab()
30-
SET_FAB_TO_DOWNLOAD_LIST -> setFab2DlList()
3117
SHOW_LOADING_DIALOG -> {
3218
wm?.get()?.apply {
3319
(dialog?:Dialog(this).also {
@@ -48,52 +34,7 @@ class MainHandler(looper: Looper):Handler(looper) {
4834
}
4935
}
5036
}
51-
private fun loadUrlInHiddenWebView(url: String) { wm?.get()?.mBinding?.wh?.apply { post { loadUrl(url) } } }
52-
private fun callViewManga(content: String) = Thread{
53-
val listChapter = content.split('\n')
54-
if(!saveUrlsOnly) {
55-
ViewMangaActivity.titleText = listChapter[0].substringBeforeLast(' ')
56-
ViewMangaActivity.nextChapterUrl = listChapter[1].let { if(it == "null") null else it }
57-
ViewMangaActivity.previousChapterUrl = listChapter[2].let { if(it == "null") null else it }
58-
ViewMangaActivity.imgUrls = arrayOf()
59-
for(i in 3 until listChapter.size) ViewMangaActivity.imgUrls += listChapter[i]
60-
wm?.get()?.apply { runOnUiThread { startActivity(Intent(this, ViewMangaActivity::class.java)) } }
61-
} else {
62-
var imgs = arrayOf<String>()
63-
for(i in 3 until listChapter.size) imgs += listChapter[i]
64-
wmdlt?.get()?.setChapterImgs(listChapter[0].substringAfterLast(' '), imgs)
65-
}
66-
}.start()
67-
private fun updateLoadProgress(p: Int) {
68-
wm?.get()?.mBinding?.pw?.apply { post {
69-
if(progress == 100 && p < 100) {
70-
progress = 0
71-
visibility = View.VISIBLE
72-
}
73-
ObjectAnimator.ofInt(this, "progress", progress, p).setDuration(233).start()
74-
if(p == 100) postDelayed({ visibility = View.GONE }, 500)
75-
} }
76-
}
77-
private fun showFab() { wm?.get()?.mBinding?.fab?.apply { post { visibility = View.VISIBLE } } }
78-
private fun hideFab() { wm?.get()?.mBinding?.fab?.apply { post { visibility = View.GONE } } }
79-
private fun setFab(content: String) {
80-
//Log.d("MyMH", "Get chapter json: $content")
81-
showDlList = false
82-
json = content
83-
showFab()
84-
}
85-
private fun setFab2DlList(){
86-
showDlList = true
87-
showFab()
88-
}
89-
9037
companion object {
91-
const val LOAD_URL_IN_HIDDEN_WEB_VIEW = 1
92-
const val CALL_VIEW_MANGA = 2
93-
const val UPDATE_LOAD_PROGRESS = 3
94-
const val SET_FAB = 4
95-
const val HIDE_FAB = 5
96-
const val SET_FAB_TO_DOWNLOAD_LIST = 6
9738
const val SHOW_LOADING_DIALOG = 7
9839
const val HIDE_LOADING_DIALOG = 8
9940
const val SET_LOADING_DIALOG_TEXT = 9

app/src/main/java/top/fumiama/copymangaweb/tool/MangaDlTools.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ class MangaDlTools(activity: DlActivity) {
4141
}
4242
}
4343

44-
fun setChapterImgs(hash: String, imgUrls: Array<String>){
44+
fun setChapterImages(hash: String, imgUrls: Array<String>){
4545
imgUrlsList?.set(p[hash].toInt(), imgUrls)
4646
sem.release()
4747
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package top.fumiama.copymangaweb.view
2+
3+
import android.animation.ObjectAnimator
4+
import android.view.View
5+
import android.widget.ProgressBar
6+
import androidx.core.animation.doOnEnd
7+
import androidx.databinding.BindingAdapter
8+
9+
object BindingAdapters {
10+
@JvmStatic
11+
@BindingAdapter(
12+
value = ["animateProgress", "animationDuration"],
13+
requireAll = false
14+
)
15+
fun bindAnimateProgress(
16+
view: ProgressBar,
17+
progress: Int?,
18+
duration: Long?
19+
) {
20+
if (progress == null) return
21+
val dur = duration ?: 1000L
22+
ObjectAnimator.ofInt(view, "progress", view.progress, progress).apply {
23+
setDuration(dur)
24+
start()
25+
}.doOnEnd {
26+
if (progress < 100) return@doOnEnd
27+
view.apply { post { visibility = View.GONE } }
28+
}
29+
}
30+
}

0 commit comments

Comments
 (0)