mirror of
https://github.com/fumiama/copymanga.git
synced 2026-06-22 18:40:24 +08:00
v2.0.beta16
修复 1. 返回主页闪退 2. 下载为空 优化 1. 增加全局底部 padding 2. 优化工具栏显示 3. 删除了冗余代码 4. 主页响应更流畅
This commit is contained in:
12
.idea/misc.xml
generated
12
.idea/misc.xml
generated
@@ -11,23 +11,32 @@
|
|||||||
<entry key="app/src/main/res/layout/activity_login.xml" value="0.49592391304347827" />
|
<entry key="app/src/main/res/layout/activity_login.xml" value="0.49592391304347827" />
|
||||||
<entry key="app/src/main/res/layout/activity_main.xml" value="0.5095108695652174" />
|
<entry key="app/src/main/res/layout/activity_main.xml" value="0.5095108695652174" />
|
||||||
<entry key="app/src/main/res/layout/activity_viewmanga.xml" value="0.5395833333333333" />
|
<entry key="app/src/main/res/layout/activity_viewmanga.xml" value="0.5395833333333333" />
|
||||||
|
<entry key="app/src/main/res/layout/anchor_popular.xml" value="0.3807291666666667" />
|
||||||
<entry key="app/src/main/res/layout/app_bar_main.xml" value="0.5095108695652174" />
|
<entry key="app/src/main/res/layout/app_bar_main.xml" value="0.5095108695652174" />
|
||||||
<entry key="app/src/main/res/layout/card_book.xml" value="0.49592391304347827" />
|
<entry key="app/src/main/res/layout/card_book.xml" value="0.49592391304347827" />
|
||||||
<entry key="app/src/main/res/layout/card_book_plain.xml" value="0.49592391304347827" />
|
<entry key="app/src/main/res/layout/card_book_plain.xml" value="0.49592391304347827" />
|
||||||
<entry key="app/src/main/res/layout/content_main.xml" value="0.49592391304347827" />
|
<entry key="app/src/main/res/layout/content_main.xml" value="0.49592391304347827" />
|
||||||
<entry key="app/src/main/res/layout/fragment_book.xml" value="0.49592391304347827" />
|
<entry key="app/src/main/res/layout/fragment_book.xml" value="0.49592391304347827" />
|
||||||
<entry key="app/src/main/res/layout/fragment_chapters.xml" value="0.49592391304347827" />
|
<entry key="app/src/main/res/layout/fragment_chapters.xml" value="0.49592391304347827" />
|
||||||
|
<entry key="app/src/main/res/layout/fragment_dlcomic.xml" value="0.5172101449275363" />
|
||||||
<entry key="app/src/main/res/layout/fragment_download.xml" value="0.49592391304347827" />
|
<entry key="app/src/main/res/layout/fragment_download.xml" value="0.49592391304347827" />
|
||||||
<entry key="app/src/main/res/layout/fragment_history.xml" value="0.5395833333333333" />
|
<entry key="app/src/main/res/layout/fragment_history.xml" value="0.5395833333333333" />
|
||||||
<entry key="app/src/main/res/layout/fragment_home.xml" value="0.4376278118609407" />
|
<entry key="app/src/main/res/layout/fragment_home.xml" value="0.4376278118609407" />
|
||||||
<entry key="app/src/main/res/layout/fragment_newest.xml" value="0.5395833333333333" />
|
<entry key="app/src/main/res/layout/fragment_newest.xml" value="0.5395833333333333" />
|
||||||
|
<entry key="app/src/main/res/layout/fragment_rank.xml" value="0.5172101449275363" />
|
||||||
|
<entry key="app/src/main/res/layout/fragment_reader.xml" value="0.5172101449275363" />
|
||||||
|
<entry key="app/src/main/res/layout/fragment_recommend.xml" value="0.5172101449275363" />
|
||||||
<entry key="app/src/main/res/layout/fragment_settings.xml" value="0.5255208333333333" />
|
<entry key="app/src/main/res/layout/fragment_settings.xml" value="0.5255208333333333" />
|
||||||
|
<entry key="app/src/main/res/layout/fragment_sort.xml" value="0.5172101449275363" />
|
||||||
|
<entry key="app/src/main/res/layout/fragment_statuscardflow.xml" value="0.5172101449275363" />
|
||||||
|
<entry key="app/src/main/res/layout/fragment_sub.xml" value="0.5172101449275363" />
|
||||||
<entry key="app/src/main/res/layout/line_1bookline.xml" value="0.49592391304347827" />
|
<entry key="app/src/main/res/layout/line_1bookline.xml" value="0.49592391304347827" />
|
||||||
<entry key="app/src/main/res/layout/line_bookinfo.xml" value="0.49592391304347827" />
|
<entry key="app/src/main/res/layout/line_bookinfo.xml" value="0.49592391304347827" />
|
||||||
<entry key="app/src/main/res/layout/line_bookinfo_text.xml" value="0.5395833333333333" />
|
<entry key="app/src/main/res/layout/line_bookinfo_text.xml" value="0.5395833333333333" />
|
||||||
<entry key="app/src/main/res/layout/line_booktandb.xml" value="0.48596014492753625" />
|
<entry key="app/src/main/res/layout/line_booktandb.xml" value="0.48596014492753625" />
|
||||||
<entry key="app/src/main/res/layout/line_chapter.xml" value="0.48596014492753625" />
|
<entry key="app/src/main/res/layout/line_chapter.xml" value="0.48596014492753625" />
|
||||||
<entry key="app/src/main/res/layout/line_choice_list.xml" value="0.49592391304347827" />
|
<entry key="app/src/main/res/layout/line_choice_list.xml" value="0.49592391304347827" />
|
||||||
|
<entry key="app/src/main/res/layout/line_lazybooklines.xml" value="0.5172101449275363" />
|
||||||
<entry key="app/src/main/res/layout/line_rank.xml" value="0.5395833333333333" />
|
<entry key="app/src/main/res/layout/line_rank.xml" value="0.5395833333333333" />
|
||||||
<entry key="app/src/main/res/layout/line_sort.xml" value="0.5395833333333333" />
|
<entry key="app/src/main/res/layout/line_sort.xml" value="0.5395833333333333" />
|
||||||
<entry key="app/src/main/res/layout/line_text_info.xml" value="0.49592391304347827" />
|
<entry key="app/src/main/res/layout/line_text_info.xml" value="0.49592391304347827" />
|
||||||
@@ -35,7 +44,10 @@
|
|||||||
<entry key="app/src/main/res/layout/nav_header_main.xml" value="0.48596014492753625" />
|
<entry key="app/src/main/res/layout/nav_header_main.xml" value="0.48596014492753625" />
|
||||||
<entry key="app/src/main/res/layout/viewpage_banner.xml" value="0.49592391304347827" />
|
<entry key="app/src/main/res/layout/viewpage_banner.xml" value="0.49592391304347827" />
|
||||||
<entry key="app/src/main/res/layout/viewpage_horizonal.xml" value="0.49592391304347827" />
|
<entry key="app/src/main/res/layout/viewpage_horizonal.xml" value="0.49592391304347827" />
|
||||||
|
<entry key="app/src/main/res/layout/widget_finalmark.xml" value="0.5172101449275363" />
|
||||||
<entry key="app/src/main/res/layout/widget_infodrawer.xml" value="0.5395833333333333" />
|
<entry key="app/src/main/res/layout/widget_infodrawer.xml" value="0.5395833333333333" />
|
||||||
|
<entry key="app/src/main/res/layout/widget_titlebar.xml" value="0.5172101449275363" />
|
||||||
|
<entry key="app/src/main/res/layout/widget_viewmangainfo.xml" value="0.5172101449275363" />
|
||||||
<entry key="app/src/main/res/menu/activity_main_drawer.xml" value="0.5395833333333333" />
|
<entry key="app/src/main/res/menu/activity_main_drawer.xml" value="0.5395833333333333" />
|
||||||
<entry key="app/src/main/res/menu/main.xml" value="0.5395833333333333" />
|
<entry key="app/src/main/res/menu/main.xml" value="0.5395833333333333" />
|
||||||
<entry key="app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml" value="0.5572916666666666" />
|
<entry key="app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml" value="0.5572916666666666" />
|
||||||
|
|||||||
@@ -39,16 +39,19 @@ import kotlinx.android.synthetic.main.app_bar_main.*
|
|||||||
import kotlinx.android.synthetic.main.nav_header_main.*
|
import kotlinx.android.synthetic.main.nav_header_main.*
|
||||||
import top.fumiama.dmzj.copymanga.R
|
import top.fumiama.dmzj.copymanga.R
|
||||||
import top.fumiama.copymanga.tools.api.UITools
|
import top.fumiama.copymanga.tools.api.UITools
|
||||||
|
import top.fumiama.copymanga.ui.book.BookFragment.Companion.bookHandler
|
||||||
|
import top.fumiama.copymanga.ui.comicdl.ComicDlFragment
|
||||||
import top.fumiama.copymanga.ui.download.DownloadFragment
|
import top.fumiama.copymanga.ui.download.DownloadFragment
|
||||||
import top.fumiama.copymanga.update.Update
|
import top.fumiama.copymanga.update.Update
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.io.FileInputStream
|
import java.io.FileInputStream
|
||||||
|
import java.lang.Thread.sleep
|
||||||
import java.lang.ref.WeakReference
|
import java.lang.ref.WeakReference
|
||||||
|
|
||||||
class MainActivity : AppCompatActivity() {
|
class MainActivity : AppCompatActivity() {
|
||||||
var isDrawerClosed = true
|
var isDrawerClosed = true
|
||||||
var menuMain: Menu? = null
|
private var menuMain: Menu? = null
|
||||||
var navController: NavController? = null
|
private var navController: NavController? = null
|
||||||
|
|
||||||
private lateinit var appBarConfiguration: AppBarConfiguration
|
private lateinit var appBarConfiguration: AppBarConfiguration
|
||||||
private lateinit var headPic: File
|
private lateinit var headPic: File
|
||||||
@@ -102,6 +105,40 @@ class MainActivity : AppCompatActivity() {
|
|||||||
checkUpdate(false)
|
checkUpdate(false)
|
||||||
|
|
||||||
ime = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
|
ime = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
|
||||||
|
|
||||||
|
navController!!.addOnDestinationChangedListener { _, destination, _ ->
|
||||||
|
Thread {
|
||||||
|
sleep(1000)
|
||||||
|
runOnUiThread {
|
||||||
|
when (destination.id) {
|
||||||
|
R.id.nav_home -> {
|
||||||
|
Log.d("MyMA", "enter home")
|
||||||
|
menuMain?.findItem(R.id.action_info)?.isVisible = true
|
||||||
|
menuMain?.findItem(R.id.action_download)?.isVisible = false
|
||||||
|
menuMain?.findItem(R.id.action_sort)?.isVisible = false
|
||||||
|
}
|
||||||
|
R.id.nav_book -> {
|
||||||
|
Log.d("MyMA", "enter book")
|
||||||
|
menuMain?.findItem(R.id.action_info)?.isVisible = false
|
||||||
|
menuMain?.findItem(R.id.action_download)?.isVisible = true
|
||||||
|
menuMain?.findItem(R.id.action_sort)?.isVisible = false
|
||||||
|
}
|
||||||
|
R.id.nav_group -> {
|
||||||
|
Log.d("MyMA", "enter group")
|
||||||
|
menuMain?.findItem(R.id.action_info)?.isVisible = false
|
||||||
|
menuMain?.findItem(R.id.action_download)?.isVisible = false
|
||||||
|
menuMain?.findItem(R.id.action_sort)?.isVisible = true
|
||||||
|
}
|
||||||
|
else -> {
|
||||||
|
Log.d("MyMA", "enter others")
|
||||||
|
menuMain?.findItem(R.id.action_info)?.isVisible = false
|
||||||
|
menuMain?.findItem(R.id.action_download)?.isVisible = false
|
||||||
|
menuMain?.findItem(R.id.action_sort)?.isVisible = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}.start()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onCreateOptionsMenu(menu: Menu): Boolean {
|
override fun onCreateOptionsMenu(menu: Menu): Boolean {
|
||||||
@@ -111,6 +148,24 @@ class MainActivity : AppCompatActivity() {
|
|||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun onOptionsItemSelected(item: MenuItem): Boolean {
|
||||||
|
return when (item.itemId) {
|
||||||
|
R.id.action_info -> {
|
||||||
|
showAbout()
|
||||||
|
true
|
||||||
|
}
|
||||||
|
R.id.action_download -> {
|
||||||
|
bookHandler?.sendEmptyMessage(6)
|
||||||
|
true
|
||||||
|
}
|
||||||
|
R.id.action_sort -> {
|
||||||
|
ComicDlFragment.handler?.sendEmptyMessage(13)
|
||||||
|
true
|
||||||
|
}
|
||||||
|
else -> super.onOptionsItemSelected(item)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
override fun onSupportNavigateUp(): Boolean {
|
override fun onSupportNavigateUp(): Boolean {
|
||||||
val navController = findNavController(R.id.nav_host_fragment)
|
val navController = findNavController(R.id.nav_host_fragment)
|
||||||
|
|
||||||
@@ -250,7 +305,7 @@ class MainActivity : AppCompatActivity() {
|
|||||||
}.start()
|
}.start()
|
||||||
}
|
}
|
||||||
|
|
||||||
fun showAbout(item: MenuItem) {
|
private fun showAbout() {
|
||||||
val dl = android.app.AlertDialog.Builder(this)
|
val dl = android.app.AlertDialog.Builder(this)
|
||||||
dl.setMessage(R.string.app_description)
|
dl.setMessage(R.string.app_description)
|
||||||
dl.setTitle(R.string.action_info)
|
dl.setTitle(R.string.action_info)
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package top.fumiama.copymanga.template.general
|
package top.fumiama.copymanga.template.general
|
||||||
|
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
|
import android.util.Log
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
@@ -17,7 +18,11 @@ open class NoBackRefreshFragment(private val layoutToLoad: Int):Fragment() {
|
|||||||
if(rootView == null){
|
if(rootView == null){
|
||||||
isFirstInflate = true
|
isFirstInflate = true
|
||||||
rootView = inflater.inflate(layoutToLoad, container, false)
|
rootView = inflater.inflate(layoutToLoad, container, false)
|
||||||
} else isFirstInflate = false
|
Log.d("MyNBRF", "is first inflate")
|
||||||
|
} else {
|
||||||
|
isFirstInflate = false
|
||||||
|
Log.d("MyNBRF", "not first inflate")
|
||||||
|
}
|
||||||
return rootView
|
return rootView
|
||||||
}
|
}
|
||||||
override fun onDestroyView() {
|
override fun onDestroyView() {
|
||||||
|
|||||||
@@ -41,8 +41,12 @@ open class AutoDownloadHandler(private val url: String, private val jsonClass: C
|
|||||||
timeThread?.start()
|
timeThread?.start()
|
||||||
}
|
}
|
||||||
private fun dlThread() {
|
private fun dlThread() {
|
||||||
DownloadTools.getHttpContent(url, null, mainWeakReference?.get()?.getString(R.string.pc_ua)!!)?.let {
|
DownloadTools.getHttpContent(url, null, mainWeakReference?.get()?.getString(R.string.pc_ua)!!).let {
|
||||||
if(exit) return
|
if(exit) return
|
||||||
|
if(it == null) {
|
||||||
|
dlThread()
|
||||||
|
return
|
||||||
|
}
|
||||||
val fi = it.inputStream()
|
val fi = it.inputStream()
|
||||||
var pass = true
|
var pass = true
|
||||||
try {
|
try {
|
||||||
|
|||||||
@@ -62,11 +62,11 @@ class DownloadPool(folder: String) {
|
|||||||
for(index in imgUrls.indices) {
|
for(index in imgUrls.indices) {
|
||||||
while (wait && !exit) sleep(1000)
|
while (wait && !exit) sleep(1000)
|
||||||
if(exit) break
|
if(exit) break
|
||||||
zip.putNextEntry(ZipEntry("$index.jpg"))
|
zip.putNextEntry(ZipEntry("$index.${if(imgUrls[index].contains(".webp")) "webp" else "jpg"}"))
|
||||||
var tryTimes = 3
|
var tryTimes = 3
|
||||||
var s = false
|
var s = false
|
||||||
while (!s && tryTimes-- > 0){
|
while (!s && tryTimes-- > 0){
|
||||||
s = (DownloadTools.getHttpContent(imgUrls[index], -1, refer)) ?.let { zip.write(it); true }?:false
|
s = (DownloadTools.getHttpContent(imgUrls[index], -1))?.let { zip.write(it); true }?:false
|
||||||
if (!s) sleep(2000)
|
if (!s) sleep(2000)
|
||||||
}
|
}
|
||||||
if(!s && tryTimes <= 0) {
|
if(!s && tryTimes <= 0) {
|
||||||
|
|||||||
@@ -4,30 +4,13 @@ import android.content.Context
|
|||||||
import android.util.Log
|
import android.util.Log
|
||||||
import androidx.preference.PreferenceManager
|
import androidx.preference.PreferenceManager
|
||||||
import top.fumiama.copymanga.MainActivity
|
import top.fumiama.copymanga.MainActivity
|
||||||
import top.fumiama.copymanga.tools.ssl.AllTrustManager
|
|
||||||
import top.fumiama.copymanga.tools.ssl.IgnoreHostNameVerifier
|
|
||||||
import java.net.HttpURLConnection
|
import java.net.HttpURLConnection
|
||||||
import java.net.URL
|
import java.net.URL
|
||||||
import java.net.URLEncoder
|
|
||||||
import java.security.SecureRandom
|
|
||||||
import java.util.concurrent.Callable
|
import java.util.concurrent.Callable
|
||||||
import java.util.concurrent.FutureTask
|
import java.util.concurrent.FutureTask
|
||||||
import javax.net.ssl.HttpsURLConnection
|
import javax.net.ssl.HttpsURLConnection
|
||||||
import javax.net.ssl.SSLContext
|
|
||||||
|
|
||||||
object DownloadTools {
|
object DownloadTools {
|
||||||
private val trustManager = AllTrustManager()
|
|
||||||
private val sslContext: SSLContext = SSLContext.getInstance("SSL").let {
|
|
||||||
it.init(null, arrayOf(trustManager), SecureRandom())
|
|
||||||
it
|
|
||||||
}
|
|
||||||
private val ignoreHostNameVerifier = IgnoreHostNameVerifier()
|
|
||||||
|
|
||||||
init {
|
|
||||||
HttpsURLConnection.setDefaultHostnameVerifier(ignoreHostNameVerifier)
|
|
||||||
HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.socketFactory)
|
|
||||||
}
|
|
||||||
|
|
||||||
fun getConnection(url: String?, method: String = "GET", refer: String? = null, ua: String? = null) =
|
fun getConnection(url: String?, method: String = "GET", refer: String? = null, ua: String? = null) =
|
||||||
url?.let {
|
url?.let {
|
||||||
val connection = URL(url).openConnection() as HttpURLConnection
|
val connection = URL(url).openConnection() as HttpURLConnection
|
||||||
@@ -35,6 +18,7 @@ object DownloadTools {
|
|||||||
connection.connectTimeout = 20000
|
connection.connectTimeout = 20000
|
||||||
connection.readTimeout = 20000
|
connection.readTimeout = 20000
|
||||||
connection.apply {
|
connection.apply {
|
||||||
|
setRequestProperty("host", url.substringAfter("://").substringBefore("/"))
|
||||||
ua?.let { setRequestProperty("user-agent", it) }
|
ua?.let { setRequestProperty("user-agent", it) }
|
||||||
refer?.let { setRequestProperty("referer", it) }
|
refer?.let { setRequestProperty("referer", it) }
|
||||||
setRequestProperty("source", "copyApp")
|
setRequestProperty("source", "copyApp")
|
||||||
@@ -51,11 +35,22 @@ object DownloadTools {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
setRequestProperty("host", url.substringAfter("://").substringBefore("/"))
|
|
||||||
setRequestProperty("platform", "3")
|
setRequestProperty("platform", "3")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun getNormalConnection(url: String?, method: String = "GET", ua: String? = null) =
|
||||||
|
url?.let {
|
||||||
|
val connection = URL(url).openConnection() as HttpURLConnection
|
||||||
|
connection.requestMethod = method
|
||||||
|
connection.connectTimeout = 20000
|
||||||
|
connection.readTimeout = 20000
|
||||||
|
connection.apply {
|
||||||
|
setRequestProperty("host", url.substringAfter("://").substringBefore("/"))
|
||||||
|
ua?.let { setRequestProperty("user-agent", it) }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fun getHttpContent(Url: String, refer: String? = null, ua: String? = null): ByteArray? {
|
fun getHttpContent(Url: String, refer: String? = null, ua: String? = null): ByteArray? {
|
||||||
Log.d("Mydl", "getHttp: $Url")
|
Log.d("Mydl", "getHttp: $Url")
|
||||||
var ret: ByteArray? = null
|
var ret: ByteArray? = null
|
||||||
@@ -79,16 +74,12 @@ object DownloadTools {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getHttpContent(Url: String, readSize: Int, refer: String? = "https://api.copymanga.com"): ByteArray? {
|
fun getHttpContent(Url: String, readSize: Int): ByteArray? {
|
||||||
Log.d("Mydl", "getHttp: $Url")
|
Log.d("Mydl", "getHttp: $Url")
|
||||||
var ret: ByteArray? = null
|
var ret: ByteArray? = null
|
||||||
val task = FutureTask(Callable {
|
val task = FutureTask(Callable {
|
||||||
try {
|
try {
|
||||||
val connection = getConnection(Url, "GET", refer)?.apply {
|
val connection = getNormalConnection(Url, "GET")
|
||||||
ret = inputStream.readBytes()
|
|
||||||
disconnect()
|
|
||||||
}
|
|
||||||
|
|
||||||
val ci = connection?.inputStream
|
val ci = connection?.inputStream
|
||||||
if(readSize > 0) {
|
if(readSize > 0) {
|
||||||
ret = ByteArray(readSize)
|
ret = ByteArray(readSize)
|
||||||
@@ -110,16 +101,13 @@ object DownloadTools {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun touch(url: String?, refer: String? = "https://api.copymanga.com"): FutureTask<ByteArray?>? =
|
fun touch(url: String?): FutureTask<ByteArray?>? =
|
||||||
url?.let {
|
url?.let {
|
||||||
Log.d("Mydl", "touchHttp: $it")
|
Log.d("Mydl", "touchHttp: $it")
|
||||||
var ret: ByteArray? = null
|
var ret: ByteArray? = null
|
||||||
val task = FutureTask(Callable {
|
val task = FutureTask(Callable {
|
||||||
try {
|
try {
|
||||||
val connection = getConnection(it, "GET", refer)?.apply {
|
val connection = getNormalConnection(it, "GET")
|
||||||
ret = inputStream.readBytes()
|
|
||||||
disconnect()
|
|
||||||
}
|
|
||||||
|
|
||||||
val ci = connection?.inputStream
|
val ci = connection?.inputStream
|
||||||
ret = ci?.readBytes()
|
ret = ci?.readBytes()
|
||||||
@@ -134,10 +122,10 @@ object DownloadTools {
|
|||||||
task
|
task
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun replaceChineseCharacters(string: String?) : String? {
|
/*private fun replaceChineseCharacters(string: String?) : String? {
|
||||||
if (android.os.Build.VERSION.SDK_INT > android.os.Build.VERSION_CODES.M) return string
|
if (android.os.Build.VERSION.SDK_INT > android.os.Build.VERSION_CODES.M) return string
|
||||||
else return string?.replace(Regex("(?<=/)[\\w\\s\\d\\u4e00-\\u9fa5.-]+(?=/?)")) { match ->
|
else return string?.replace(Regex("(?<=/)[\\w\\s\\d\\u4e00-\\u9fa5.-]+(?=/?)")) { match ->
|
||||||
return@replace URLEncoder.encode(match.value, "UTF-8")
|
return@replace URLEncoder.encode(match.value, "UTF-8")
|
||||||
}
|
}
|
||||||
}
|
}*/
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,17 +0,0 @@
|
|||||||
package top.fumiama.copymanga.tools.ssl;
|
|
||||||
|
|
||||||
import java.security.cert.X509Certificate;
|
|
||||||
import javax.net.ssl.X509TrustManager;
|
|
||||||
|
|
||||||
public class AllTrustManager implements X509TrustManager{
|
|
||||||
@Override
|
|
||||||
public void checkClientTrusted(X509Certificate[] chain, String authType) { }
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void checkServerTrusted(X509Certificate[] chain, String authType) { }
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public X509Certificate[] getAcceptedIssuers() {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
package top.fumiama.copymanga.tools.ssl;
|
|
||||||
|
|
||||||
import javax.net.ssl.HostnameVerifier;
|
|
||||||
import javax.net.ssl.SSLSession;
|
|
||||||
|
|
||||||
public class IgnoreHostNameVerifier implements HostnameVerifier {
|
|
||||||
@Override
|
|
||||||
public boolean verify(String hostname, SSLSession session) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -2,9 +2,9 @@ package top.fumiama.copymanga.ui.book
|
|||||||
|
|
||||||
import android.content.Context.MODE_PRIVATE
|
import android.content.Context.MODE_PRIVATE
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.util.Log
|
import android.view.LayoutInflater
|
||||||
import android.view.Menu
|
|
||||||
import android.view.View
|
import android.view.View
|
||||||
|
import android.view.ViewGroup
|
||||||
import androidx.navigation.Navigation
|
import androidx.navigation.Navigation
|
||||||
import kotlinx.android.synthetic.main.app_bar_main.*
|
import kotlinx.android.synthetic.main.app_bar_main.*
|
||||||
import kotlinx.android.synthetic.main.line_booktandb.*
|
import kotlinx.android.synthetic.main.line_booktandb.*
|
||||||
@@ -16,7 +16,9 @@ import java.lang.Thread.sleep
|
|||||||
import java.lang.ref.WeakReference
|
import java.lang.ref.WeakReference
|
||||||
|
|
||||||
class BookFragment: NoBackRefreshFragment(R.layout.fragment_book) {
|
class BookFragment: NoBackRefreshFragment(R.layout.fragment_book) {
|
||||||
private lateinit var bookHandler: BookHandler
|
var fbibinfo: View? = null
|
||||||
|
var fbtinfo: View? = null
|
||||||
|
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
|
||||||
@@ -24,7 +26,7 @@ class BookFragment: NoBackRefreshFragment(R.layout.fragment_book) {
|
|||||||
bookHandler = BookHandler(WeakReference(this), arguments?.getString("path")?:"null")
|
bookHandler = BookHandler(WeakReference(this), arguments?.getString("path")?:"null")
|
||||||
Thread{
|
Thread{
|
||||||
sleep(600)
|
sleep(600)
|
||||||
bookHandler.startLoad()
|
bookHandler?.startLoad()
|
||||||
}.start()
|
}.start()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -32,35 +34,29 @@ class BookFragment: NoBackRefreshFragment(R.layout.fragment_book) {
|
|||||||
override fun onResume() {
|
override fun onResume() {
|
||||||
super.onResume()
|
super.onResume()
|
||||||
mainWeakReference?.get()?.apply {
|
mainWeakReference?.get()?.apply {
|
||||||
menuMain?.let { setMenuVisible(it) }
|
toolbar.title = bookHandler?.book?.results?.comic?.name
|
||||||
toolbar.title = bookHandler.book?.results?.comic?.name
|
|
||||||
}
|
}
|
||||||
setStartRead()
|
setStartRead()
|
||||||
bookHandler.fbibinfo?.layoutParams?.height = ((bookHandler.fbibinfo?.width?:0) * 4.0 / 9.0 + 0.5).toInt()
|
fbibinfo?.layoutParams?.height = ((fbibinfo?.width?:0) * 4.0 / 9.0 + 0.5).toInt()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onDestroy() {
|
override fun onDestroy() {
|
||||||
super.onDestroy()
|
super.onDestroy()
|
||||||
mainWeakReference?.get()?.menuMain?.let { setMenuInvisible(it) }
|
bookHandler?.destroy()
|
||||||
bookHandler.destroy()
|
bookHandler?.ads?.forEach {
|
||||||
bookHandler.ads.forEach {
|
|
||||||
it.exit = true
|
it.exit = true
|
||||||
}
|
}
|
||||||
}
|
bookHandler = null
|
||||||
|
|
||||||
override fun onPause() {
|
|
||||||
super.onPause()
|
|
||||||
mainWeakReference?.get()?.menuMain?.let { setMenuInvisible(it) }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fun setStartRead() {
|
fun setStartRead() {
|
||||||
if(bookHandler.chapterNames.isNotEmpty()) mainWeakReference?.get()?.apply {
|
if(bookHandler?.chapterNames?.isNotEmpty() == true) mainWeakReference?.get()?.apply {
|
||||||
bookHandler.book?.results?.comic?.name?.let { name ->
|
bookHandler?.book?.results?.comic?.name?.let { name ->
|
||||||
getPreferences(MODE_PRIVATE).getInt(name, -1).let { p ->
|
getPreferences(MODE_PRIVATE).getInt(name, -1).let { p ->
|
||||||
this@BookFragment.lbbstart.apply {
|
this@BookFragment.lbbstart.apply {
|
||||||
var i = 0
|
var i = 0
|
||||||
if(p >= 0) {
|
if(p >= 0) {
|
||||||
text = bookHandler.chapterNames[p]
|
text = bookHandler!!.chapterNames[p]
|
||||||
i = p
|
i = p
|
||||||
}
|
}
|
||||||
setOnClickListener {
|
setOnClickListener {
|
||||||
@@ -72,34 +68,20 @@ class BookFragment: NoBackRefreshFragment(R.layout.fragment_book) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun setMenuInvisible(menu: Menu){
|
fun navigate2dl(){
|
||||||
menu.findItem(R.id.action_download)?.isVisible = false
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun setMenuVisible(menu: Menu) {
|
|
||||||
Log.d("MyBF", "显示下载按钮")
|
|
||||||
val dl = menu.findItem(R.id.action_download)
|
|
||||||
dl?.isVisible = true
|
|
||||||
dl?.setIcon(R.drawable.ic_menu_download)
|
|
||||||
dl?.setOnMenuItemClickListener {
|
|
||||||
if(bookHandler.complete && it.itemId == R.id.action_download){
|
|
||||||
navigate2dl()
|
|
||||||
true
|
|
||||||
}
|
|
||||||
else it.itemId == R.id.action_download
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun navigate2dl(){
|
|
||||||
val bundle = Bundle()
|
val bundle = Bundle()
|
||||||
bundle.putString("path", arguments?.getString("path")?:"null")
|
bundle.putString("path", arguments?.getString("path")?:"null")
|
||||||
bundle.putString("name", bookHandler.book?.results?.comic?.name)
|
bundle.putString("name", bookHandler!!.book?.results?.comic?.name)
|
||||||
if(bookHandler.vols != null) {
|
if(bookHandler!!.vols != null) {
|
||||||
bundle.putBoolean("loadJson", true)
|
bundle.putBoolean("loadJson", true)
|
||||||
}
|
}
|
||||||
bundle.putStringArray("group", bookHandler.gpws)
|
bundle.putStringArray("group", bookHandler!!.gpws)
|
||||||
bundle.putStringArray("groupNames", bookHandler.keys)
|
bundle.putStringArray("groupNames", bookHandler!!.keys)
|
||||||
bundle.putIntArray("count", bookHandler.cnts)
|
bundle.putIntArray("count", bookHandler!!.cnts)
|
||||||
rootView?.let { Navigation.findNavController(it).navigate(R.id.action_nav_book_to_nav_group, bundle) }
|
rootView?.let { Navigation.findNavController(it).navigate(R.id.action_nav_book_to_nav_group, bundle) }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
var bookHandler: BookHandler? = null
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -1,7 +1,5 @@
|
|||||||
package top.fumiama.copymanga.ui.book
|
package top.fumiama.copymanga.ui.book
|
||||||
|
|
||||||
import android.content.Context.MODE_PRIVATE
|
|
||||||
import android.content.Intent
|
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.os.Looper
|
import android.os.Looper
|
||||||
import android.os.Message
|
import android.os.Message
|
||||||
@@ -44,12 +42,12 @@ import java.io.File
|
|||||||
import java.lang.Thread.sleep
|
import java.lang.Thread.sleep
|
||||||
import java.lang.ref.WeakReference
|
import java.lang.ref.WeakReference
|
||||||
|
|
||||||
class BookHandler(that: WeakReference<BookFragment>, private val path: String)
|
class BookHandler(private val th: WeakReference<BookFragment>, private val path: String)
|
||||||
: AutoDownloadHandler(
|
: AutoDownloadHandler(
|
||||||
that.get()?.getString(R.string.bookInfoApiUrl)?.let { String.format(it, path) } ?: "",
|
th.get()?.getString(R.string.bookInfoApiUrl)?.let { String.format(it, path) } ?: "",
|
||||||
BookInfoStructure::class.java,
|
BookInfoStructure::class.java,
|
||||||
Looper.myLooper()!!){
|
Looper.myLooper()!!){
|
||||||
private val that = that.get()
|
private val that get() = th.get()
|
||||||
private var hasToastedError = false
|
private var hasToastedError = false
|
||||||
get(){
|
get(){
|
||||||
val re = field
|
val re = field
|
||||||
@@ -57,7 +55,6 @@ class BookHandler(that: WeakReference<BookFragment>, private val path: String)
|
|||||||
return re
|
return re
|
||||||
}
|
}
|
||||||
var book: BookInfoStructure? = null
|
var book: BookInfoStructure? = null
|
||||||
var fbibinfo:View? = null
|
|
||||||
var complete = false
|
var complete = false
|
||||||
var ads = emptyArray<AutoDownloadThread>()
|
var ads = emptyArray<AutoDownloadThread>()
|
||||||
var gpws = arrayOf<String>()
|
var gpws = arrayOf<String>()
|
||||||
@@ -65,8 +62,7 @@ class BookHandler(that: WeakReference<BookFragment>, private val path: String)
|
|||||||
var cnts = intArrayOf()
|
var cnts = intArrayOf()
|
||||||
var vols: Array<VolumeStructure>? = null
|
var vols: Array<VolumeStructure>? = null
|
||||||
var chapterNames = arrayOf<String>()
|
var chapterNames = arrayOf<String>()
|
||||||
private val divider get() = that?.layoutInflater?.inflate(R.layout.div_h, that.fbl, false)
|
private val divider get() = that?.layoutInflater?.inflate(R.layout.div_h, that?.fbl, false)
|
||||||
private var fbtinfo: View? = null
|
|
||||||
|
|
||||||
override fun handleMessage(msg: Message) {
|
override fun handleMessage(msg: Message) {
|
||||||
super.handleMessage(msg)
|
super.handleMessage(msg)
|
||||||
@@ -74,9 +70,10 @@ class BookHandler(that: WeakReference<BookFragment>, private val path: String)
|
|||||||
//0 -> setLayouts()
|
//0 -> setLayouts()
|
||||||
1 -> setCover()
|
1 -> setCover()
|
||||||
2 -> setTexts()
|
2 -> setTexts()
|
||||||
3 -> fbibinfo?.let { setInfoHeight(it) }
|
3 -> that?.fbibinfo?.let { setInfoHeight(it) }
|
||||||
4 -> setThemes()
|
4 -> setThemes()
|
||||||
5 -> setOverScale()
|
5 -> setOverScale()
|
||||||
|
6 -> if(complete) that?.navigate2dl()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -120,12 +117,12 @@ class BookHandler(that: WeakReference<BookFragment>, private val path: String)
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun inflateComponents(){
|
private fun inflateComponents(){
|
||||||
fbibinfo = that?.layoutInflater?.inflate(R.layout.line_bookinfo, that.fbl, false)
|
that?.fbibinfo = that?.layoutInflater?.inflate(R.layout.line_bookinfo, that?.fbl, false)
|
||||||
fbtinfo = that?.layoutInflater?.inflate(R.layout.line_text_info, that.fbl, false)
|
that?.fbtinfo = that?.layoutInflater?.inflate(R.layout.line_text_info, that?.fbl, false)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun setOverScale(){
|
private fun setOverScale(){
|
||||||
that?.fbov?.setScaleView(that.lbibg)
|
that?.fbov?.setScaleView(that!!.lbibg)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun setCover(){
|
private fun setCover(){
|
||||||
@@ -164,8 +161,8 @@ class BookHandler(that: WeakReference<BookFragment>, private val path: String)
|
|||||||
book?.results?.comic?.status?.display
|
book?.results?.comic?.status?.display
|
||||||
) }?:""
|
) }?:""
|
||||||
that?.bttime?.text = book?.results?.comic?.datetime_updated
|
that?.bttime?.text = book?.results?.comic?.datetime_updated
|
||||||
(fbtinfo as TextView).text = book?.results?.comic?.brief
|
(that?.fbtinfo as TextView).text = book?.results?.comic?.brief
|
||||||
that?.fbl?.addView(fbtinfo)
|
that?.fbl?.addView(that?.fbtinfo)
|
||||||
that?.fbl?.addView(divider)
|
that?.fbl?.addView(divider)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -190,7 +187,7 @@ class BookHandler(that: WeakReference<BookFragment>, private val path: String)
|
|||||||
themeStructure.onEachIndexed { i, it ->
|
themeStructure.onEachIndexed { i, it ->
|
||||||
if(line == null) {
|
if(line == null) {
|
||||||
if(i == last) {
|
if(i == last) {
|
||||||
line = that?.layoutInflater?.inflate(R.layout.line_chapter, that.fbl, false)
|
line = that?.layoutInflater?.inflate(R.layout.line_chapter, that!!.fbl, false)
|
||||||
line?.lcc?.apply {
|
line?.lcc?.apply {
|
||||||
lct.text = it.name
|
lct.text = it.name
|
||||||
setOnClickListener { _ ->
|
setOnClickListener { _ ->
|
||||||
@@ -199,7 +196,7 @@ class BookHandler(that: WeakReference<BookFragment>, private val path: String)
|
|||||||
}
|
}
|
||||||
that?.fbl?.addView(line)
|
that?.fbl?.addView(line)
|
||||||
} else {
|
} else {
|
||||||
line = that?.layoutInflater?.inflate(R.layout.line_2chapters, that.fbl, false)
|
line = that?.layoutInflater?.inflate(R.layout.line_2chapters, that!!.fbl, false)
|
||||||
line?.l2cl?.apply {
|
line?.l2cl?.apply {
|
||||||
lct.text = it.name
|
lct.text = it.name
|
||||||
setOnClickListener { _ ->
|
setOnClickListener { _ ->
|
||||||
@@ -250,14 +247,14 @@ class BookHandler(that: WeakReference<BookFragment>, private val path: String)
|
|||||||
chapterNames += it.name
|
chapterNames += it.name
|
||||||
if(line == null) {
|
if(line == null) {
|
||||||
if(i == last) {
|
if(i == last) {
|
||||||
line = layoutInflater.inflate(R.layout.line_chapter, that.fbl, false)
|
line = layoutInflater.inflate(R.layout.line_chapter, that!!.fbl, false)
|
||||||
line?.lcc?.apply {
|
line?.lcc?.apply {
|
||||||
lct.text = it.name
|
lct.text = it.name
|
||||||
setOnClickListener { Reader.viewMangaAt(book!!.results.comic.name, i) }
|
setOnClickListener { Reader.viewMangaAt(book!!.results.comic.name, i) }
|
||||||
}
|
}
|
||||||
fbl?.addView(line)
|
fbl?.addView(line)
|
||||||
} else {
|
} else {
|
||||||
line = layoutInflater.inflate(R.layout.line_2chapters, that.fbl, false)
|
line = layoutInflater.inflate(R.layout.line_2chapters, that!!.fbl, false)
|
||||||
line?.l2cl?.apply {
|
line?.l2cl?.apply {
|
||||||
lct.text = it.name
|
lct.text = it.name
|
||||||
setOnClickListener { Reader.viewMangaAt(book!!.results.comic.name, i) }
|
setOnClickListener { Reader.viewMangaAt(book!!.results.comic.name, i) }
|
||||||
@@ -271,11 +268,6 @@ class BookHandler(that: WeakReference<BookFragment>, private val path: String)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// padding
|
|
||||||
val line = layoutInflater.inflate(R.layout.line_chapter, that.fbl, false)
|
|
||||||
line.lci.visibility = View.INVISIBLE
|
|
||||||
line.isClickable = false
|
|
||||||
fbl?.addView(line)
|
|
||||||
endSetLayouts()
|
endSetLayouts()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,27 +0,0 @@
|
|||||||
package top.fumiama.copymanga.ui.chapter
|
|
||||||
|
|
||||||
import android.os.Bundle
|
|
||||||
import android.view.View
|
|
||||||
import top.fumiama.dmzj.copymanga.R
|
|
||||||
import top.fumiama.copymanga.template.general.NoBackRefreshFragment
|
|
||||||
import java.lang.Thread.sleep
|
|
||||||
import java.lang.ref.WeakReference
|
|
||||||
|
|
||||||
class ChapterFragment: NoBackRefreshFragment(R.layout.fragment_chapters) {
|
|
||||||
var handler: ChapterHandler? = null
|
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
|
||||||
super.onViewCreated(view, savedInstanceState)
|
|
||||||
if(isFirstInflate){
|
|
||||||
handler = arguments?.let { ChapterHandler(WeakReference(this), it.getString("path")?:"", it.getString("group")?:"") }
|
|
||||||
Thread{
|
|
||||||
sleep(600)
|
|
||||||
handler?.startLoad()
|
|
||||||
}.start()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onDestroy() {
|
|
||||||
super.onDestroy()
|
|
||||||
handler?.destroy()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,84 +0,0 @@
|
|||||||
package top.fumiama.copymanga.ui.chapter
|
|
||||||
|
|
||||||
import android.os.Looper
|
|
||||||
import android.os.Message
|
|
||||||
import android.view.View
|
|
||||||
import android.widget.Toast
|
|
||||||
import androidx.navigation.Navigation
|
|
||||||
import kotlinx.android.synthetic.main.fragment_book.*
|
|
||||||
import kotlinx.android.synthetic.main.fragment_chapters.*
|
|
||||||
import kotlinx.android.synthetic.main.line_chapter.view.*
|
|
||||||
import top.fumiama.dmzj.copymanga.R
|
|
||||||
import top.fumiama.copymanga.json.ChapterStructure
|
|
||||||
import top.fumiama.copymanga.json.VolumeStructure
|
|
||||||
import top.fumiama.copymanga.template.http.AutoDownloadHandler
|
|
||||||
import java.lang.ref.WeakReference
|
|
||||||
|
|
||||||
class ChapterHandler(that: WeakReference<ChapterFragment>, pw: String, gpw: String):
|
|
||||||
AutoDownloadHandler(
|
|
||||||
that.get()?.getString(R.string.groupInfoApiUrl)?.let { String.format(it, pw, gpw) } ?: "",
|
|
||||||
VolumeStructure::class.java,
|
|
||||||
Looper.myLooper()!!
|
|
||||||
) {
|
|
||||||
private val that = that.get()
|
|
||||||
private var hasToastedError = false
|
|
||||||
get(){
|
|
||||||
val re = field
|
|
||||||
field = true
|
|
||||||
return re
|
|
||||||
}
|
|
||||||
private var chapters: VolumeStructure? = null
|
|
||||||
|
|
||||||
override fun handleMessage(msg: Message) {
|
|
||||||
super.handleMessage(msg)
|
|
||||||
when(msg.what){
|
|
||||||
//0 -> setLayouts()
|
|
||||||
1 -> inflateChapters()
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun getGsonItem() = chapters
|
|
||||||
override fun setGsonItem(gsonObj: Any) :Boolean {
|
|
||||||
val pass = super.setGsonItem(gsonObj)
|
|
||||||
chapters = gsonObj as VolumeStructure
|
|
||||||
return pass
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onError() {
|
|
||||||
super.onError()
|
|
||||||
if(exit) return
|
|
||||||
if(!hasToastedError) {
|
|
||||||
Toast.makeText(that?.context, R.string.null_book, Toast.LENGTH_SHORT).show()
|
|
||||||
that?.rootView?.let { it1 ->
|
|
||||||
Navigation.findNavController(it1).navigateUp()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
override fun doWhenFinishDownload() {
|
|
||||||
super.doWhenFinishDownload()
|
|
||||||
if(exit) return
|
|
||||||
Thread{ sendEmptyMessage(1) }.start()
|
|
||||||
}
|
|
||||||
private fun inflateChapters(){
|
|
||||||
|
|
||||||
that?.fcloading?.visibility = View.GONE
|
|
||||||
}
|
|
||||||
private fun addLine(size: Int, name:String, onClick:(()->Unit)? = null){
|
|
||||||
val line =
|
|
||||||
that?.let { it.layoutInflater.inflate(R.layout.line_chapter, it.fbl, false) }
|
|
||||||
line?.lct?.text = name
|
|
||||||
onClick?.let {action->
|
|
||||||
line?.lcc?.setOnClickListener {action()}
|
|
||||||
}
|
|
||||||
that?.fcl?.addView(line)
|
|
||||||
}
|
|
||||||
private fun loadChapter(chapter: ChapterStructure){
|
|
||||||
/*val bundle = Bundle()
|
|
||||||
|
|
||||||
bundle.putInt("id", id)
|
|
||||||
bundle.putInt("volume", volId)
|
|
||||||
bundle.putInt("chapter", cid)
|
|
||||||
that?.rootView?.let { Navigation.findNavController(it).navigate(R.id.action_nav_chapter_to_nav_reader, bundle) }
|
|
||||||
*/}
|
|
||||||
}
|
|
||||||
@@ -18,7 +18,7 @@ import java.lang.Thread.sleep
|
|||||||
import java.lang.ref.WeakReference
|
import java.lang.ref.WeakReference
|
||||||
|
|
||||||
class ComicDlFragment: NoBackRefreshFragment(R.layout.fragment_dlcomic) {
|
class ComicDlFragment: NoBackRefreshFragment(R.layout.fragment_dlcomic) {
|
||||||
var handler: ComicDlHandler? = null
|
var ltbtn: View? = null
|
||||||
var ads = emptyArray<AutoDownloadThread>()
|
var ads = emptyArray<AutoDownloadThread>()
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
@@ -43,7 +43,6 @@ class ComicDlFragment: NoBackRefreshFragment(R.layout.fragment_dlcomic) {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
mainWeakReference?.get()?.menuMain?.let { setMenuVisible(it) }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onDestroy() {
|
override fun onDestroy() {
|
||||||
@@ -81,19 +80,6 @@ class ComicDlFragment: NoBackRefreshFragment(R.layout.fragment_dlcomic) {
|
|||||||
private fun loadFromJson() = Gson().fromJson(json, Array<VolumeStructure>::class.java)
|
private fun loadFromJson() = Gson().fromJson(json, Array<VolumeStructure>::class.java)
|
||||||
private fun loadGroupsFromFile(file: File) = Gson().fromJson(file.reader(), Array<String>::class.java)
|
private fun loadGroupsFromFile(file: File) = Gson().fromJson(file.reader(), Array<String>::class.java)
|
||||||
|
|
||||||
private fun setMenuVisible(menu: Menu) {
|
|
||||||
val dl = menu.findItem(R.id.action_download)
|
|
||||||
dl?.isVisible = true
|
|
||||||
dl?.setIcon(R.drawable.ic_menu_sort)
|
|
||||||
dl?.setOnMenuItemClickListener {
|
|
||||||
if(handler?.complete == true && it.itemId == R.id.action_download){
|
|
||||||
handler?.showMultiSelectInfo()
|
|
||||||
true
|
|
||||||
}
|
|
||||||
else it.itemId == R.id.action_download
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*private fun setMenuInvisible(menu: Menu){
|
/*private fun setMenuInvisible(menu: Menu){
|
||||||
menu.findItem(R.id.action_download)?.isVisible = false
|
menu.findItem(R.id.action_download)?.isVisible = false
|
||||||
}*/
|
}*/
|
||||||
@@ -167,6 +153,7 @@ class ComicDlFragment: NoBackRefreshFragment(R.layout.fragment_dlcomic) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
|
var handler: ComicDlHandler? = null
|
||||||
var json: String? = null
|
var json: String? = null
|
||||||
var exit = false
|
var exit = false
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,7 +14,6 @@ import android.view.ViewTreeObserver
|
|||||||
import android.widget.Toast
|
import android.widget.Toast
|
||||||
import com.google.gson.Gson
|
import com.google.gson.Gson
|
||||||
import kotlinx.android.synthetic.main.fragment_book.*
|
import kotlinx.android.synthetic.main.fragment_book.*
|
||||||
import kotlinx.android.synthetic.main.fragment_chapters.*
|
|
||||||
import kotlinx.android.synthetic.main.line_chapter.view.*
|
import kotlinx.android.synthetic.main.line_chapter.view.*
|
||||||
import kotlinx.android.synthetic.main.widget_downloadbar.*
|
import kotlinx.android.synthetic.main.widget_downloadbar.*
|
||||||
import kotlinx.android.synthetic.main.fragment_dlcomic.*
|
import kotlinx.android.synthetic.main.fragment_dlcomic.*
|
||||||
@@ -36,14 +35,14 @@ import top.fumiama.copymanga.views.LazyScrollView
|
|||||||
import java.io.File
|
import java.io.File
|
||||||
import java.lang.ref.WeakReference
|
import java.lang.ref.WeakReference
|
||||||
|
|
||||||
class ComicDlHandler(looper: Looper, that: WeakReference<ComicDlFragment>, private val vols: Array<VolumeStructure>, private val comicName: String, private val groupNames: Array<String>?):Handler(looper) {
|
class ComicDlHandler(looper: Looper, private val th: WeakReference<ComicDlFragment>, private val vols: Array<VolumeStructure>, private val comicName: String, private val groupNames: Array<String>?):Handler(looper) {
|
||||||
constructor(looper: Looper, that: WeakReference<ComicDlFragment>, comicName: String) : this(looper, that, arrayOf(), comicName, null) {
|
constructor(looper: Looper, th: WeakReference<ComicDlFragment>, comicName: String) : this(looper, th, arrayOf(), comicName, null) {
|
||||||
isOld = true
|
isOld = true
|
||||||
}
|
}
|
||||||
private var isOld = false
|
private var isOld = false
|
||||||
var complete = false
|
var complete = false
|
||||||
private val that = that.get()
|
private val that get() = th.get()
|
||||||
private val toolsBox = UITools(that.get()?.context)
|
private val toolsBox = UITools(th.get()?.context)
|
||||||
private var btnNumPerRow = 4
|
private var btnNumPerRow = 4
|
||||||
private var btnw = 0
|
private var btnw = 0
|
||||||
private var cdwnWidth = 0
|
private var cdwnWidth = 0
|
||||||
@@ -56,7 +55,6 @@ class ComicDlHandler(looper: Looper, that: WeakReference<ComicDlFragment>, priva
|
|||||||
private var isNewTitle = false
|
private var isNewTitle = false
|
||||||
val mangaDlTools = MangaDlTools()
|
val mangaDlTools = MangaDlTools()
|
||||||
private var multiSelect = false
|
private var multiSelect = false
|
||||||
private var ltbtn: View? = null
|
|
||||||
private var finishMap = arrayOf<Boolean?>()
|
private var finishMap = arrayOf<Boolean?>()
|
||||||
var downloading = false
|
var downloading = false
|
||||||
|
|
||||||
@@ -95,10 +93,11 @@ class ComicDlHandler(looper: Looper, that: WeakReference<ComicDlFragment>, priva
|
|||||||
}
|
}
|
||||||
6 -> that?.tdwn?.text = "${dldChapter}/${checkedChapter}"
|
6 -> that?.tdwn?.text = "${dldChapter}/${checkedChapter}"
|
||||||
7 -> deleteChapters(msg.obj as File, msg.arg1)
|
7 -> deleteChapters(msg.obj as File, msg.arg1)
|
||||||
9 -> that?.cdwn?.setCardBackgroundColor(that.resources.getColor(R.color.colorGreen))
|
9 -> that?.cdwn?.setCardBackgroundColor(that!!.resources.getColor(R.color.colorGreen))
|
||||||
10 -> addTbtn(msg.obj as Array<String>)
|
10 -> addTbtn(msg.obj as Array<String>)
|
||||||
11 -> addCaption(msg.obj as String)
|
11 -> addCaption(msg.obj as String)
|
||||||
12 -> addDiv()
|
12 -> addDiv()
|
||||||
|
13 -> if(complete) showMultiSelectInfo()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -128,7 +127,7 @@ class ComicDlHandler(looper: Looper, that: WeakReference<ComicDlFragment>, priva
|
|||||||
}
|
}
|
||||||
private fun addDiv(){
|
private fun addDiv(){
|
||||||
that?.ldwn?.addView(
|
that?.ldwn?.addView(
|
||||||
that.layoutInflater.inflate(R.layout.div_h, that.ldwn, false),
|
that!!.layoutInflater.inflate(R.layout.div_h, that!!.ldwn, false),
|
||||||
ViewGroup.LayoutParams(
|
ViewGroup.LayoutParams(
|
||||||
ViewGroup.LayoutParams.MATCH_PARENT,
|
ViewGroup.LayoutParams.MATCH_PARENT,
|
||||||
ViewGroup.LayoutParams.WRAP_CONTENT
|
ViewGroup.LayoutParams.WRAP_CONTENT
|
||||||
@@ -136,7 +135,7 @@ class ComicDlHandler(looper: Looper, that: WeakReference<ComicDlFragment>, priva
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
private fun addCaption(title: String){
|
private fun addCaption(title: String){
|
||||||
val tc = that?.layoutInflater?.inflate(R.layout.line_caption, that.ldwn, false)
|
val tc = that?.layoutInflater?.inflate(R.layout.line_caption, that!!.ldwn, false)
|
||||||
tc?.tcptn?.text = title
|
tc?.tcptn?.text = title
|
||||||
that?.ldwn?.addView(
|
that?.ldwn?.addView(
|
||||||
tc,
|
tc,
|
||||||
@@ -191,9 +190,9 @@ class ComicDlHandler(looper: Looper, that: WeakReference<ComicDlFragment>, priva
|
|||||||
dl?.setContentView(R.layout.dialog_unzipping)
|
dl?.setContentView(R.layout.dialog_unzipping)
|
||||||
that?.dlsdwn?.viewTreeObserver?.addOnGlobalLayoutListener(object : ViewTreeObserver.OnGlobalLayoutListener{
|
that?.dlsdwn?.viewTreeObserver?.addOnGlobalLayoutListener(object : ViewTreeObserver.OnGlobalLayoutListener{
|
||||||
override fun onGlobalLayout() {
|
override fun onGlobalLayout() {
|
||||||
cdwnWidth = that.dlsdwn.width
|
cdwnWidth = that!!.dlsdwn.width
|
||||||
Log.d("MyDl", "Get dlsdwn height: $cdwnWidth")
|
Log.d("MyDl", "Get dlsdwn height: $cdwnWidth")
|
||||||
that.dlsdwn.viewTreeObserver.removeOnGlobalLayoutListener(this)
|
that!!.dlsdwn.viewTreeObserver.removeOnGlobalLayoutListener(this)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
that?.dllazys?.onScrollListener = object : LazyScrollView.OnScrollListener{
|
that?.dllazys?.onScrollListener = object : LazyScrollView.OnScrollListener{
|
||||||
@@ -204,10 +203,10 @@ class ComicDlHandler(looper: Looper, that: WeakReference<ComicDlFragment>, priva
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
that?.cdwn?.setOnClickListener {
|
that?.cdwn?.setOnClickListener {
|
||||||
if(that.dlsdwn.translationX != 0f) showDlCard()
|
if(that!!.dlsdwn.translationX != 0f) showDlCard()
|
||||||
else if(checkedChapter == 0) hideDlCard()
|
else if(checkedChapter == 0) hideDlCard()
|
||||||
else{
|
else{
|
||||||
that.pdwn.progress = 0
|
that!!.pdwn.progress = 0
|
||||||
if (downloading || checkedChapter == 0) {
|
if (downloading || checkedChapter == 0) {
|
||||||
mangaDlTools.wait = !mangaDlTools.wait!!
|
mangaDlTools.wait = !mangaDlTools.wait!!
|
||||||
} else {
|
} else {
|
||||||
@@ -251,7 +250,8 @@ class ComicDlHandler(looper: Looper, that: WeakReference<ComicDlFragment>, priva
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
fun showMultiSelectInfo() {
|
|
||||||
|
private fun showMultiSelectInfo() {
|
||||||
toolsBox.buildInfo("进入多选模式?", "之后可以对已下载漫画进行批量删除/重新下载",
|
toolsBox.buildInfo("进入多选模式?", "之后可以对已下载漫画进行批量删除/重新下载",
|
||||||
"确定", null, "取消", { multiSelect = true })
|
"确定", null, "取消", { multiSelect = true })
|
||||||
}
|
}
|
||||||
@@ -314,12 +314,12 @@ class ComicDlHandler(looper: Looper, that: WeakReference<ComicDlFragment>, priva
|
|||||||
@SuppressLint("SetTextI18n")
|
@SuppressLint("SetTextI18n")
|
||||||
private fun addTbtn(title: String, uuid: String, caption: String, url: String) {
|
private fun addTbtn(title: String, uuid: String, caption: String, url: String) {
|
||||||
if ((tbtncnt % btnNumPerRow == 0) || isNewTitle) {
|
if ((tbtncnt % btnNumPerRow == 0) || isNewTitle) {
|
||||||
ltbtn = that?.layoutInflater?.inflate(R.layout.line_horizonal_empty, that.ldwn, false)
|
that?.ltbtn = that?.layoutInflater?.inflate(R.layout.line_horizonal_empty, that!!.ldwn, false)
|
||||||
that?.ldwn?.addView(ltbtn)
|
that?.ldwn?.addView(that!!.ltbtn)
|
||||||
tbtncnt = 0
|
tbtncnt = 0
|
||||||
isNewTitle = false
|
isNewTitle = false
|
||||||
}
|
}
|
||||||
that?.layoutInflater?.inflate(R.layout.button_tbutton, ltbtn?.ltbtn, false)?.let { tbv ->
|
that?.layoutInflater?.inflate(R.layout.button_tbutton, that!!.ltbtn?.ltbtn, false)?.let { tbv ->
|
||||||
tbv.tbtn.index = tbtnlist.size
|
tbv.tbtn.index = tbtnlist.size
|
||||||
tbtnlist += tbv.tbtn
|
tbtnlist += tbv.tbtn
|
||||||
tbtncnt++
|
tbtncnt++
|
||||||
@@ -330,15 +330,15 @@ class ComicDlHandler(looper: Looper, that: WeakReference<ComicDlFragment>, priva
|
|||||||
//tbv.tbtn.hint = caption
|
//tbv.tbtn.hint = caption
|
||||||
tbv.tbtn.caption = caption
|
tbv.tbtn.caption = caption
|
||||||
tbv.tbtn.layoutParams.width = btnw
|
tbv.tbtn.layoutParams.width = btnw
|
||||||
val zipf = CMApi.getZipFile(that.context?.getExternalFilesDir(""), comicName, caption, title)
|
val zipf = CMApi.getZipFile(that!!.context?.getExternalFilesDir(""), comicName, caption, title)
|
||||||
Log.d("MyCD", "Get zipf: $zipf")
|
Log.d("MyCD", "Get zipf: $zipf")
|
||||||
ViewMangaActivity.fileArray += zipf
|
ViewMangaActivity.fileArray += zipf
|
||||||
if (zipf.exists()) {
|
if (zipf.exists()) {
|
||||||
tbv.tbtn.setBackgroundResource(R.drawable.rndbg_checked)
|
tbv.tbtn.setBackgroundResource(R.drawable.rndbg_checked)
|
||||||
tbv.tbtn.isChecked = false
|
tbv.tbtn.isChecked = false
|
||||||
}
|
}
|
||||||
ltbtn?.ltbtn?.addView(tbv)
|
that?.ltbtn?.ltbtn?.addView(tbv)
|
||||||
ltbtn?.invalidate()
|
that?.ltbtn?.invalidate()
|
||||||
tbv.tbtn.setOnClickListener {
|
tbv.tbtn.setOnClickListener {
|
||||||
if (zipf.exists() && !multiSelect) {
|
if (zipf.exists() && !multiSelect) {
|
||||||
it.tbtn.setBackgroundResource(R.drawable.rndbg_checked)
|
it.tbtn.setBackgroundResource(R.drawable.rndbg_checked)
|
||||||
@@ -348,13 +348,13 @@ class ComicDlHandler(looper: Looper, that: WeakReference<ComicDlFragment>, priva
|
|||||||
ViewMangaActivity.position = it.tbtn.index
|
ViewMangaActivity.position = it.tbtn.index
|
||||||
dl?.show()
|
dl?.show()
|
||||||
|
|
||||||
that.startActivity(Intent(that.context, ViewMangaActivity::class.java)
|
that?.startActivity(Intent(that!!.context, ViewMangaActivity::class.java)
|
||||||
.putExtra("callFrom", "zipFirst")
|
.putExtra("callFrom", "zipFirst")
|
||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
it.tbtn.setBackgroundResource(R.drawable.toggle_button)
|
it.tbtn.setBackgroundResource(R.drawable.toggle_button)
|
||||||
if (it.tbtn.isChecked) that.tdwn?.text = "$dldChapter/${++checkedChapter}"
|
if (it.tbtn.isChecked) that?.tdwn?.text = "$dldChapter/${++checkedChapter}"
|
||||||
else that.tdwn.text = "$dldChapter/${--checkedChapter}"
|
else that?.tdwn?.text = "$dldChapter/${--checkedChapter}"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
tbv.tbtn.setOnLongClickListener {
|
tbv.tbtn.setOnLongClickListener {
|
||||||
@@ -377,7 +377,7 @@ class ComicDlHandler(looper: Looper, that: WeakReference<ComicDlFragment>, priva
|
|||||||
ViewMangaActivity.position = it.tbtn.index
|
ViewMangaActivity.position = it.tbtn.index
|
||||||
dl?.show()
|
dl?.show()
|
||||||
|
|
||||||
that.startActivity(Intent(that.context, ViewMangaActivity::class.java))
|
that?.startActivity(Intent(that?.context, ViewMangaActivity::class.java))
|
||||||
}, null, null
|
}, null, null
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@@ -389,17 +389,17 @@ class ComicDlHandler(looper: Looper, that: WeakReference<ComicDlFragment>, priva
|
|||||||
private fun analyzeOldStructure() = Thread{
|
private fun analyzeOldStructure() = Thread{
|
||||||
Gson().fromJson(json?.reader(), Array<ComicStructureOld>::class.java)?.let {
|
Gson().fromJson(json?.reader(), Array<ComicStructureOld>::class.java)?.let {
|
||||||
for (group in it) {
|
for (group in it) {
|
||||||
that?.layoutInflater?.inflate(R.layout.line_caption, that.ldwn, false)?.let { tc ->
|
that?.layoutInflater?.inflate(R.layout.line_caption, that!!.ldwn, false)?.let { tc ->
|
||||||
tc.tcptn.text = group.name
|
tc.tcptn.text = group.name
|
||||||
that.ldwn.addView(
|
that!!.ldwn.addView(
|
||||||
tc,
|
tc,
|
||||||
ViewGroup.LayoutParams(
|
ViewGroup.LayoutParams(
|
||||||
ViewGroup.LayoutParams.MATCH_PARENT,
|
ViewGroup.LayoutParams.MATCH_PARENT,
|
||||||
ViewGroup.LayoutParams.WRAP_CONTENT
|
ViewGroup.LayoutParams.WRAP_CONTENT
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
that.ldwn.addView(
|
that!!.ldwn.addView(
|
||||||
that.layoutInflater.inflate(R.layout.div_h, that.ldwn, false),
|
that!!.layoutInflater.inflate(R.layout.div_h, that!!.ldwn, false),
|
||||||
ViewGroup.LayoutParams(
|
ViewGroup.LayoutParams(
|
||||||
ViewGroup.LayoutParams.MATCH_PARENT,
|
ViewGroup.LayoutParams.MATCH_PARENT,
|
||||||
ViewGroup.LayoutParams.WRAP_CONTENT
|
ViewGroup.LayoutParams.WRAP_CONTENT
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ class DownloadFragment: NoBackRefreshFragment(R.layout.fragment_download) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun scanFile(cd: File?){
|
private fun scanFile(cd: File?){
|
||||||
val isRoot = cd == context?.getExternalFilesDir("")
|
val isRoot = cd == context?.getExternalFilesDir("")
|
||||||
val jsonFile = File(cd, "info.bin")
|
val jsonFile = File(cd, "info.bin")
|
||||||
if(isRoot || !jsonFile.exists()) cd?.list()?.sortedArrayWith { o1, o2 ->
|
if(isRoot || !jsonFile.exists()) cd?.list()?.sortedArrayWith { o1, o2 ->
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ class HomeFragment : NoBackRefreshFragment(R.layout.fragment_home) {
|
|||||||
|
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
if(isFirstInflate){
|
if(isFirstInflate) {
|
||||||
val theme = resources.newTheme()
|
val theme = resources.newTheme()
|
||||||
swiperefresh.setColorSchemeColors(
|
swiperefresh.setColorSchemeColors(
|
||||||
resources.getColor(R.color.colorAccent, theme),
|
resources.getColor(R.color.colorAccent, theme),
|
||||||
|
|||||||
@@ -8,10 +8,12 @@ import android.os.Message
|
|||||||
import android.util.Log
|
import android.util.Log
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewTreeObserver
|
import android.view.ViewTreeObserver
|
||||||
|
import android.widget.LinearLayout
|
||||||
import android.widget.Toast
|
import android.widget.Toast
|
||||||
import androidx.cardview.widget.CardView
|
import androidx.cardview.widget.CardView
|
||||||
import androidx.constraintlayout.widget.ConstraintLayout
|
import androidx.constraintlayout.widget.ConstraintLayout
|
||||||
import androidx.navigation.Navigation
|
import androidx.navigation.Navigation
|
||||||
|
import androidx.navigation.fragment.findNavController
|
||||||
import com.bumptech.glide.Glide
|
import com.bumptech.glide.Glide
|
||||||
import com.bumptech.glide.load.model.GlideUrl
|
import com.bumptech.glide.load.model.GlideUrl
|
||||||
import com.to.aboomy.pager2banner.Banner
|
import com.to.aboomy.pager2banner.Banner
|
||||||
@@ -30,19 +32,19 @@ import top.fumiama.copymanga.tools.api.UITools
|
|||||||
import java.lang.Thread.sleep
|
import java.lang.Thread.sleep
|
||||||
import java.lang.ref.WeakReference
|
import java.lang.ref.WeakReference
|
||||||
|
|
||||||
class HomeHandler(that: WeakReference<HomeFragment>) : AutoDownloadHandler(
|
class HomeHandler(private val that: WeakReference<HomeFragment>) : AutoDownloadHandler(
|
||||||
that.get()?.getString(R.string.mainPageApiUrl) ?: "",
|
that.get()?.getString(R.string.mainPageApiUrl) ?: "",
|
||||||
IndexStructure::class.java,
|
IndexStructure::class.java,
|
||||||
Looper.myLooper()!!,
|
Looper.myLooper()!!,
|
||||||
9
|
9
|
||||||
) {
|
) {
|
||||||
private val homeF = that.get()
|
private val homeF get() = that.get()
|
||||||
var index: IndexStructure? = null
|
var index: IndexStructure? = null
|
||||||
var fhib: View? = null
|
var fhib: View? = null
|
||||||
get() {
|
get() {
|
||||||
Log.d("MyHH", "Get fhib.")
|
Log.d("MyHH", "Get fhib.")
|
||||||
if(field == null){
|
if(field == null){
|
||||||
field = homeF?.layoutInflater?.inflate(R.layout.viewpage_banner, homeF.fhl, false)
|
field = homeF?.layoutInflater?.inflate(R.layout.viewpage_banner, homeF?.fhl, false)
|
||||||
Thread{homeF?.homeHandler?.sendEmptyMessage(3)}.start()
|
Thread{homeF?.homeHandler?.sendEmptyMessage(3)}.start()
|
||||||
}
|
}
|
||||||
return field
|
return field
|
||||||
@@ -72,7 +74,15 @@ class HomeHandler(that: WeakReference<HomeFragment>) : AutoDownloadHandler(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
7 -> inflateBanner()
|
7 -> inflateBanner()
|
||||||
8 -> homeF?.fhl?.addView(indexLines[msg.arg1])
|
8 -> {
|
||||||
|
try {
|
||||||
|
homeF?.fhl?.addView(indexLines[msg.arg1])
|
||||||
|
} catch (e: Exception) {
|
||||||
|
e.printStackTrace()
|
||||||
|
(indexLines[msg.arg1].parent as LinearLayout).removeAllViews()
|
||||||
|
homeF?.fhl?.addView(indexLines[msg.arg1])
|
||||||
|
}
|
||||||
|
}
|
||||||
//9 -> checkIndex()
|
//9 -> checkIndex()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -159,7 +169,7 @@ class HomeHandler(that: WeakReference<HomeFragment>) : AutoDownloadHandler(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(comics.size == 9) allocateLine(homeF?.getString(R.string.rank_list)?:"", R.drawable.img_novel_bill, comics) {
|
if(comics.size == 9) allocateLine(homeF?.getString(R.string.rank_list)?:"", R.drawable.img_novel_bill, comics) {
|
||||||
mainWeakReference?.get()?.navController?.navigate(R.id.nav_rank)
|
that.get()?.findNavController()?.navigate(R.id.nav_rank)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -201,6 +211,7 @@ class HomeHandler(that: WeakReference<HomeFragment>) : AutoDownloadHandler(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun inflateCardLines() {
|
private fun inflateCardLines() {
|
||||||
|
if (indexLines.isNotEmpty()) indexLines = arrayOf()
|
||||||
inflateRec()
|
inflateRec()
|
||||||
inflateTopics()
|
inflateTopics()
|
||||||
inflateHot()
|
inflateHot()
|
||||||
@@ -208,7 +219,10 @@ class HomeHandler(that: WeakReference<HomeFragment>) : AutoDownloadHandler(
|
|||||||
inflateFinish()
|
inflateFinish()
|
||||||
inflateRank()
|
inflateRank()
|
||||||
Thread{
|
Thread{
|
||||||
for(i in indexLines.indices) obtainMessage(8, i, 0).sendToTarget()
|
for(i in indexLines.indices) {
|
||||||
|
obtainMessage(8, i, 0).sendToTarget()
|
||||||
|
sleep(512)
|
||||||
|
}
|
||||||
obtainMessage(-1, false).sendToTarget() //closeLoad
|
obtainMessage(-1, false).sendToTarget() //closeLoad
|
||||||
}.start()
|
}.start()
|
||||||
}
|
}
|
||||||
@@ -233,11 +247,11 @@ class HomeHandler(that: WeakReference<HomeFragment>) : AutoDownloadHandler(
|
|||||||
.addPageTransformer(ScaleInTransformer())
|
.addPageTransformer(ScaleInTransformer())
|
||||||
.setPageMargin(it.dp2px(20) ?: 0, it.dp2px(10) ?: 0)
|
.setPageMargin(it.dp2px(20) ?: 0, it.dp2px(10) ?: 0)
|
||||||
.setIndicator(
|
.setIndicator(
|
||||||
IndicatorView(homeF.context)
|
IndicatorView(homeF!!.context)
|
||||||
.setIndicatorColor(Color.DKGRAY)
|
.setIndicatorColor(Color.DKGRAY)
|
||||||
.setIndicatorSelectorColor(Color.WHITE)
|
.setIndicatorSelectorColor(Color.WHITE)
|
||||||
.setIndicatorStyle(IndicatorView.IndicatorStyle.INDICATOR_BEZIER)
|
.setIndicatorStyle(IndicatorView.IndicatorStyle.INDICATOR_BEZIER)
|
||||||
).adapter = homeF.ViewData(v).RecyclerViewAdapter()
|
).adapter = homeF?.ViewData(v)?.RecyclerViewAdapter()
|
||||||
}
|
}
|
||||||
v.invalidate()
|
v.invalidate()
|
||||||
homeF?.fhov?.swipeRefreshLayout = homeF?.swiperefresh
|
homeF?.fhov?.swipeRefreshLayout = homeF?.swiperefresh
|
||||||
@@ -265,7 +279,7 @@ class HomeHandler(that: WeakReference<HomeFragment>) : AutoDownloadHandler(
|
|||||||
2 -> R.layout.line_2bookline
|
2 -> R.layout.line_2bookline
|
||||||
3 -> R.layout.line_3bookline
|
3 -> R.layout.line_3bookline
|
||||||
else -> return -1
|
else -> return -1
|
||||||
}, homeF.fhl, false)?.apply {
|
}, homeF!!.fhl, false)?.apply {
|
||||||
scanCards(this, comics, finish, isTopic)
|
scanCards(this, comics, finish, isTopic)
|
||||||
rttitle.text = title
|
rttitle.text = title
|
||||||
ir.setImageResource(iconResId)
|
ir.setImageResource(iconResId)
|
||||||
|
|||||||
@@ -1,18 +0,0 @@
|
|||||||
package top.fumiama.copymanga.ui.sub
|
|
||||||
|
|
||||||
import android.os.Bundle
|
|
||||||
import android.view.LayoutInflater
|
|
||||||
import android.view.View
|
|
||||||
import android.view.ViewGroup
|
|
||||||
import androidx.fragment.app.Fragment
|
|
||||||
import top.fumiama.dmzj.copymanga.R
|
|
||||||
|
|
||||||
class SubFragment : Fragment() {
|
|
||||||
override fun onCreateView(
|
|
||||||
inflater: LayoutInflater,
|
|
||||||
container: ViewGroup?,
|
|
||||||
savedInstanceState: Bundle?
|
|
||||||
): View? {
|
|
||||||
return inflater.inflate(R.layout.fragment_sub, container, false)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -360,7 +360,7 @@ class ViewMangaActivity : TitleActivityTemplate() {
|
|||||||
val re = tasks?.get(index2load)
|
val re = tasks?.get(index2load)
|
||||||
if (re != null) Thread{
|
if (re != null) Thread{
|
||||||
val data = re.get()
|
val data = re.get()
|
||||||
if(data != null) {
|
if(data != null && data.isNotEmpty()) {
|
||||||
BitmapFactory.decodeByteArray(data, 0, data.size)?.let {
|
BitmapFactory.decodeByteArray(data, 0, data.size)?.let {
|
||||||
loadImg(imgView, it, isLast, useCut, isLeft)
|
loadImg(imgView, it, isLast, useCut, isLeft)
|
||||||
Log.d("MyVM", "Load from task")
|
Log.d("MyVM", "Load from task")
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ import java.security.MessageDigest
|
|||||||
|
|
||||||
object Update {
|
object Update {
|
||||||
fun checkUpdate(activity: Activity, toolsBox: UITools, ignoreSkip: Boolean = false) = activity.apply{
|
fun checkUpdate(activity: Activity, toolsBox: UITools, ignoreSkip: Boolean = false) = activity.apply{
|
||||||
val client = Client("copymanga.v6.army", 12315)
|
val client = Client("copymanga.v6.army", 12316)
|
||||||
val progressBar = layoutInflater.inflate(R.layout.dialog_progress, null, false)
|
val progressBar = layoutInflater.inflate(R.layout.dialog_progress, null, false)
|
||||||
val progressHandler = object : Client.Progress{
|
val progressHandler = object : Client.Progress{
|
||||||
override fun notify(progressPercentage: Int) {
|
override fun notify(progressPercentage: Int) {
|
||||||
|
|||||||
@@ -13,7 +13,8 @@
|
|||||||
android:id="@+id/fbl"
|
android:id="@+id/fbl"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:orientation="vertical" />
|
android:orientation="vertical"
|
||||||
|
android:paddingBottom="@dimen/global_content_padding_bottom"/>
|
||||||
</top.fumiama.copymanga.views.OverScrollView>
|
</top.fumiama.copymanga.views.OverScrollView>
|
||||||
|
|
||||||
<ProgressBar
|
<ProgressBar
|
||||||
|
|||||||
@@ -1,28 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="match_parent">
|
|
||||||
|
|
||||||
<androidx.core.widget.NestedScrollView
|
|
||||||
android:id="@+id/nestedScrollView2"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="match_parent">
|
|
||||||
|
|
||||||
<LinearLayout
|
|
||||||
android:id="@+id/fcl"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:orientation="vertical" />
|
|
||||||
</androidx.core.widget.NestedScrollView>
|
|
||||||
|
|
||||||
<ProgressBar
|
|
||||||
android:id="@+id/fcloading"
|
|
||||||
style="?android:attr/progressBarStyle"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
app:layout_constraintBottom_toBottomOf="parent"
|
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
|
||||||
app:layout_constraintTop_toTopOf="parent" />
|
|
||||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
|
||||||
@@ -14,7 +14,8 @@
|
|||||||
android:id="@+id/ldwn"
|
android:id="@+id/ldwn"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:orientation="vertical"/>
|
android:orientation="vertical"
|
||||||
|
android:paddingBottom="@dimen/global_content_padding_bottom"/>
|
||||||
</top.fumiama.copymanga.views.LazyScrollView>
|
</top.fumiama.copymanga.views.LazyScrollView>
|
||||||
|
|
||||||
<include
|
<include
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<ListView xmlns:android="http://schemas.android.com/apk/res/android"
|
<ListView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:fillViewport="true"
|
android:id="@+id/mylv"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="match_parent"
|
||||||
android:id="@+id/mylv">
|
android:paddingBottom="@dimen/global_content_padding_bottom"/>
|
||||||
</ListView>
|
|
||||||
|
|||||||
@@ -1,13 +1,12 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
|
||||||
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
xmlns:tools="http://schemas.android.com/tools"
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
tools:context="top.fumiama.copymanga.ui.home.HomeFragment"
|
tools:context="top.fumiama.copymanga.ui.home.HomeFragment"
|
||||||
android:focusableInTouchMode="true">
|
android:focusableInTouchMode="true">
|
||||||
|
|
||||||
|
|
||||||
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
|
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
|
||||||
android:id="@+id/swiperefresh"
|
android:id="@+id/swiperefresh"
|
||||||
@@ -29,7 +28,8 @@
|
|||||||
android:id="@+id/fhl"
|
android:id="@+id/fhl"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:orientation="vertical">
|
android:orientation="vertical"
|
||||||
|
android:paddingBottom="@dimen/global_content_padding_bottom">
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
</top.fumiama.copymanga.views.ScrollRefreshView>
|
</top.fumiama.copymanga.views.ScrollRefreshView>
|
||||||
|
|||||||
@@ -1,23 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<androidx.constraintlayout.widget.ConstraintLayout
|
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
|
|
||||||
android:layout_height="match_parent">
|
|
||||||
|
|
||||||
<androidx.core.widget.NestedScrollView
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="match_parent">
|
|
||||||
|
|
||||||
<LinearLayout
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:orientation="vertical" >
|
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:id="@+id/frt"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:textAlignment="textStart"
|
|
||||||
android:textSize="18sp" />
|
|
||||||
</LinearLayout>
|
|
||||||
</androidx.core.widget.NestedScrollView>
|
|
||||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
|
||||||
@@ -1,22 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
|
||||||
xmlns:tools="http://schemas.android.com/tools"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="match_parent"
|
|
||||||
tools:context="top.fumiama.copymanga.ui.sub.SubFragment">
|
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:id="@+id/text_sub"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_marginStart="8dp"
|
|
||||||
android:layout_marginTop="8dp"
|
|
||||||
android:layout_marginEnd="8dp"
|
|
||||||
android:textAlignment="center"
|
|
||||||
android:textSize="20sp"
|
|
||||||
app:layout_constraintBottom_toBottomOf="parent"
|
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
|
||||||
app:layout_constraintTop_toTopOf="parent" />
|
|
||||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
|
||||||
@@ -25,7 +25,8 @@
|
|||||||
android:id="@+id/mydll"
|
android:id="@+id/mydll"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:orientation="vertical" />
|
android:orientation="vertical"
|
||||||
|
android:paddingBottom="@dimen/global_content_padding_bottom"/>
|
||||||
</androidx.core.widget.NestedScrollView>
|
</androidx.core.widget.NestedScrollView>
|
||||||
|
|
||||||
</com.liaoinstan.springview.widget.SpringView>
|
</com.liaoinstan.springview.widget.SpringView>
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<menu
|
<menu xmlns:tools="http://schemas.android.com/tools"
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto">
|
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||||
<item
|
<item
|
||||||
@@ -10,9 +10,15 @@
|
|||||||
android:visible="false"
|
android:visible="false"
|
||||||
app:showAsAction="ifRoom" />
|
app:showAsAction="ifRoom" />
|
||||||
<item
|
<item
|
||||||
android:id="@+id/action_info"
|
android:id="@+id/action_sort"
|
||||||
android:onClick="showAbout"
|
android:icon="@drawable/ic_menu_sort"
|
||||||
android:orderInCategory="200"
|
android:orderInCategory="200"
|
||||||
|
android:title="@string/action_sort"
|
||||||
|
android:visible="false"
|
||||||
|
app:showAsAction="ifRoom" />
|
||||||
|
<item
|
||||||
|
android:id="@+id/action_info"
|
||||||
|
android:orderInCategory="300"
|
||||||
android:title="@string/action_info"
|
android:title="@string/action_info"
|
||||||
app:showAsAction="never" />
|
app:showAsAction="never" />
|
||||||
</menu>
|
</menu>
|
||||||
|
|||||||
@@ -75,12 +75,6 @@
|
|||||||
app:popExitAnim="@anim/slide_in_right_exit"/>
|
app:popExitAnim="@anim/slide_in_right_exit"/>
|
||||||
</fragment>
|
</fragment>
|
||||||
|
|
||||||
<fragment
|
|
||||||
android:id="@+id/nav_sub"
|
|
||||||
android:name="top.fumiama.copymanga.ui.sub.SubFragment"
|
|
||||||
android:label="@string/menu_sub"
|
|
||||||
tools:layout="@layout/fragment_sub" />
|
|
||||||
|
|
||||||
<fragment
|
<fragment
|
||||||
android:id="@+id/nav_history"
|
android:id="@+id/nav_history"
|
||||||
android:name="top.fumiama.copymanga.ui.cardflow.history.HistoryFragment"
|
android:name="top.fumiama.copymanga.ui.cardflow.history.HistoryFragment"
|
||||||
@@ -128,13 +122,6 @@
|
|||||||
android:name="top.fumiama.copymanga.ui.book.BookFragment"
|
android:name="top.fumiama.copymanga.ui.book.BookFragment"
|
||||||
android:label="@string/page_book"
|
android:label="@string/page_book"
|
||||||
tools:layout="@layout/fragment_book" >
|
tools:layout="@layout/fragment_book" >
|
||||||
<action
|
|
||||||
android:id="@+id/action_nav_book_to_nav_chapter"
|
|
||||||
app:destination="@id/nav_chapter"
|
|
||||||
app:enterAnim="@anim/slide_in_right"
|
|
||||||
app:exitAnim="@anim/slide_out_left"
|
|
||||||
app:popEnterAnim="@anim/slide_out_left_exit"
|
|
||||||
app:popExitAnim="@anim/slide_in_right_exit"/>
|
|
||||||
<action
|
<action
|
||||||
android:id="@+id/action_nav_book_to_nav_group"
|
android:id="@+id/action_nav_book_to_nav_group"
|
||||||
app:destination="@id/nav_group"
|
app:destination="@id/nav_group"
|
||||||
@@ -158,13 +145,6 @@
|
|||||||
app:popExitAnim="@anim/slide_in_right_exit"/>
|
app:popExitAnim="@anim/slide_in_right_exit"/>
|
||||||
</fragment>
|
</fragment>
|
||||||
|
|
||||||
<fragment
|
|
||||||
android:id="@+id/nav_chapter"
|
|
||||||
android:name="top.fumiama.copymanga.ui.chapter.ChapterFragment"
|
|
||||||
android:label="@string/page_chapter"
|
|
||||||
tools:layout="@layout/fragment_chapters" >
|
|
||||||
</fragment>
|
|
||||||
|
|
||||||
<fragment
|
<fragment
|
||||||
android:id="@+id/nav_topic"
|
android:id="@+id/nav_topic"
|
||||||
android:name="top.fumiama.copymanga.ui.cardflow.topic.TopicFragment"
|
android:name="top.fumiama.copymanga.ui.cardflow.topic.TopicFragment"
|
||||||
|
|||||||
@@ -11,4 +11,6 @@
|
|||||||
<dimen name="global_alpha">0.8</dimen>
|
<dimen name="global_alpha">0.8</dimen>
|
||||||
<dimen name="global_radius">16dp</dimen>
|
<dimen name="global_radius">16dp</dimen>
|
||||||
<dimen name="global_card_elevation">4dp</dimen>
|
<dimen name="global_card_elevation">4dp</dimen>
|
||||||
|
|
||||||
|
<dimen name="global_content_padding_bottom">48dp</dimen>
|
||||||
</resources>
|
</resources>
|
||||||
@@ -3,11 +3,12 @@
|
|||||||
<string name="action_settings">设定</string>
|
<string name="action_settings">设定</string>
|
||||||
<string name="action_info">关于</string>
|
<string name="action_info">关于</string>
|
||||||
<string name="action_download">下载</string>
|
<string name="action_download">下载</string>
|
||||||
|
<string name="action_sort">整理</string>
|
||||||
|
|
||||||
<string name="menu_home">主页</string>
|
<string name="menu_home">主页</string>
|
||||||
<string name="menu_sort">分类</string>
|
<string name="menu_sort">分类</string>
|
||||||
<string name="menu_rank">排行</string>
|
<string name="menu_rank">排行</string>
|
||||||
<string name="app_description">©2022源文雨@CoolApk\n本应用为拷贝漫画的第三方客户端,数据均来源于网络,作者不对其中所呈现的任何内容负责。</string>
|
<string name="app_description">©2022源文雨\n本应用为拷贝漫画的第三方客户端,数据均来源于网络,作者不对其中所呈现的任何内容负责。</string>
|
||||||
<string name="menu_history">浏览历史</string>
|
<string name="menu_history">浏览历史</string>
|
||||||
<string name="menu_sub">我的订阅</string>
|
<string name="menu_sub">我的订阅</string>
|
||||||
<string name="menu_download">我的下载</string>
|
<string name="menu_download">我的下载</string>
|
||||||
|
|||||||
Reference in New Issue
Block a user