diff --git a/.idea/misc.xml b/.idea/misc.xml index b85b19c..905a8f2 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -11,23 +11,32 @@ + + + + + + + + + @@ -35,7 +44,10 @@ + + + diff --git a/app/src/main/java/top/fumiama/copymanga/MainActivity.kt b/app/src/main/java/top/fumiama/copymanga/MainActivity.kt index 17859fe..3284ed7 100644 --- a/app/src/main/java/top/fumiama/copymanga/MainActivity.kt +++ b/app/src/main/java/top/fumiama/copymanga/MainActivity.kt @@ -39,16 +39,19 @@ import kotlinx.android.synthetic.main.app_bar_main.* import kotlinx.android.synthetic.main.nav_header_main.* import top.fumiama.dmzj.copymanga.R 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.update.Update import java.io.File import java.io.FileInputStream +import java.lang.Thread.sleep import java.lang.ref.WeakReference class MainActivity : AppCompatActivity() { var isDrawerClosed = true - var menuMain: Menu? = null - var navController: NavController? = null + private var menuMain: Menu? = null + private var navController: NavController? = null private lateinit var appBarConfiguration: AppBarConfiguration private lateinit var headPic: File @@ -102,6 +105,40 @@ class MainActivity : AppCompatActivity() { checkUpdate(false) 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 { @@ -111,6 +148,24 @@ class MainActivity : AppCompatActivity() { 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 { val navController = findNavController(R.id.nav_host_fragment) @@ -250,7 +305,7 @@ class MainActivity : AppCompatActivity() { }.start() } - fun showAbout(item: MenuItem) { + private fun showAbout() { val dl = android.app.AlertDialog.Builder(this) dl.setMessage(R.string.app_description) dl.setTitle(R.string.action_info) diff --git a/app/src/main/java/top/fumiama/copymanga/template/general/NoBackRefreshFragment.kt b/app/src/main/java/top/fumiama/copymanga/template/general/NoBackRefreshFragment.kt index 86e09b7..e90ccf5 100644 --- a/app/src/main/java/top/fumiama/copymanga/template/general/NoBackRefreshFragment.kt +++ b/app/src/main/java/top/fumiama/copymanga/template/general/NoBackRefreshFragment.kt @@ -1,6 +1,7 @@ package top.fumiama.copymanga.template.general import android.os.Bundle +import android.util.Log import android.view.LayoutInflater import android.view.View import android.view.ViewGroup @@ -17,7 +18,11 @@ open class NoBackRefreshFragment(private val layoutToLoad: Int):Fragment() { if(rootView == null){ isFirstInflate = true 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 } override fun onDestroyView() { diff --git a/app/src/main/java/top/fumiama/copymanga/template/http/AutoDownloadHandler.kt b/app/src/main/java/top/fumiama/copymanga/template/http/AutoDownloadHandler.kt index 66250dd..3d4042f 100644 --- a/app/src/main/java/top/fumiama/copymanga/template/http/AutoDownloadHandler.kt +++ b/app/src/main/java/top/fumiama/copymanga/template/http/AutoDownloadHandler.kt @@ -41,8 +41,12 @@ open class AutoDownloadHandler(private val url: String, private val jsonClass: C timeThread?.start() } 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(it == null) { + dlThread() + return + } val fi = it.inputStream() var pass = true try { diff --git a/app/src/main/java/top/fumiama/copymanga/tools/http/DownloadPool.kt b/app/src/main/java/top/fumiama/copymanga/tools/http/DownloadPool.kt index d33f804..538a6c7 100644 --- a/app/src/main/java/top/fumiama/copymanga/tools/http/DownloadPool.kt +++ b/app/src/main/java/top/fumiama/copymanga/tools/http/DownloadPool.kt @@ -62,11 +62,11 @@ class DownloadPool(folder: String) { for(index in imgUrls.indices) { while (wait && !exit) sleep(1000) if(exit) break - zip.putNextEntry(ZipEntry("$index.jpg")) + zip.putNextEntry(ZipEntry("$index.${if(imgUrls[index].contains(".webp")) "webp" else "jpg"}")) var tryTimes = 3 var s = false 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 && tryTimes <= 0) { diff --git a/app/src/main/java/top/fumiama/copymanga/tools/http/DownloadTools.kt b/app/src/main/java/top/fumiama/copymanga/tools/http/DownloadTools.kt index 6224c72..b0c1182 100644 --- a/app/src/main/java/top/fumiama/copymanga/tools/http/DownloadTools.kt +++ b/app/src/main/java/top/fumiama/copymanga/tools/http/DownloadTools.kt @@ -4,30 +4,13 @@ import android.content.Context import android.util.Log import androidx.preference.PreferenceManager 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.URL -import java.net.URLEncoder -import java.security.SecureRandom import java.util.concurrent.Callable import java.util.concurrent.FutureTask import javax.net.ssl.HttpsURLConnection -import javax.net.ssl.SSLContext 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) = url?.let { val connection = URL(url).openConnection() as HttpURLConnection @@ -35,6 +18,7 @@ object DownloadTools { connection.connectTimeout = 20000 connection.readTimeout = 20000 connection.apply { + setRequestProperty("host", url.substringAfter("://").substringBefore("/")) ua?.let { setRequestProperty("user-agent", it) } refer?.let { setRequestProperty("referer", it) } setRequestProperty("source", "copyApp") @@ -51,11 +35,22 @@ object DownloadTools { } } } - setRequestProperty("host", url.substringAfter("://").substringBefore("/")) 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? { Log.d("Mydl", "getHttp: $Url") 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") var ret: ByteArray? = null val task = FutureTask(Callable { try { - val connection = getConnection(Url, "GET", refer)?.apply { - ret = inputStream.readBytes() - disconnect() - } - + val connection = getNormalConnection(Url, "GET") val ci = connection?.inputStream if(readSize > 0) { ret = ByteArray(readSize) @@ -110,16 +101,13 @@ object DownloadTools { } } - fun touch(url: String?, refer: String? = "https://api.copymanga.com"): FutureTask? = + fun touch(url: String?): FutureTask? = url?.let { Log.d("Mydl", "touchHttp: $it") var ret: ByteArray? = null val task = FutureTask(Callable { try { - val connection = getConnection(it, "GET", refer)?.apply { - ret = inputStream.readBytes() - disconnect() - } + val connection = getNormalConnection(it, "GET") val ci = connection?.inputStream ret = ci?.readBytes() @@ -134,10 +122,10 @@ object DownloadTools { 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 else return string?.replace(Regex("(?<=/)[\\w\\s\\d\\u4e00-\\u9fa5.-]+(?=/?)")) { match -> return@replace URLEncoder.encode(match.value, "UTF-8") } - } -} \ No newline at end of file + }*/ +} diff --git a/app/src/main/java/top/fumiama/copymanga/tools/ssl/AllTrustManager.java b/app/src/main/java/top/fumiama/copymanga/tools/ssl/AllTrustManager.java deleted file mode 100644 index 157e756..0000000 --- a/app/src/main/java/top/fumiama/copymanga/tools/ssl/AllTrustManager.java +++ /dev/null @@ -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; - } -} diff --git a/app/src/main/java/top/fumiama/copymanga/tools/ssl/IgnoreHostNameVerifier.java b/app/src/main/java/top/fumiama/copymanga/tools/ssl/IgnoreHostNameVerifier.java deleted file mode 100644 index 08c6578..0000000 --- a/app/src/main/java/top/fumiama/copymanga/tools/ssl/IgnoreHostNameVerifier.java +++ /dev/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; - } -} diff --git a/app/src/main/java/top/fumiama/copymanga/ui/book/BookFragment.kt b/app/src/main/java/top/fumiama/copymanga/ui/book/BookFragment.kt index 5ef9c40..6d2c26d 100644 --- a/app/src/main/java/top/fumiama/copymanga/ui/book/BookFragment.kt +++ b/app/src/main/java/top/fumiama/copymanga/ui/book/BookFragment.kt @@ -2,9 +2,9 @@ package top.fumiama.copymanga.ui.book import android.content.Context.MODE_PRIVATE import android.os.Bundle -import android.util.Log -import android.view.Menu +import android.view.LayoutInflater import android.view.View +import android.view.ViewGroup import androidx.navigation.Navigation import kotlinx.android.synthetic.main.app_bar_main.* import kotlinx.android.synthetic.main.line_booktandb.* @@ -16,7 +16,9 @@ import java.lang.Thread.sleep import java.lang.ref.WeakReference 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?) { super.onViewCreated(view, savedInstanceState) @@ -24,7 +26,7 @@ class BookFragment: NoBackRefreshFragment(R.layout.fragment_book) { bookHandler = BookHandler(WeakReference(this), arguments?.getString("path")?:"null") Thread{ sleep(600) - bookHandler.startLoad() + bookHandler?.startLoad() }.start() } } @@ -32,35 +34,29 @@ class BookFragment: NoBackRefreshFragment(R.layout.fragment_book) { override fun onResume() { super.onResume() mainWeakReference?.get()?.apply { - menuMain?.let { setMenuVisible(it) } - toolbar.title = bookHandler.book?.results?.comic?.name + toolbar.title = bookHandler?.book?.results?.comic?.name } 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() { super.onDestroy() - mainWeakReference?.get()?.menuMain?.let { setMenuInvisible(it) } - bookHandler.destroy() - bookHandler.ads.forEach { + bookHandler?.destroy() + bookHandler?.ads?.forEach { it.exit = true } - } - - override fun onPause() { - super.onPause() - mainWeakReference?.get()?.menuMain?.let { setMenuInvisible(it) } + bookHandler = null } fun setStartRead() { - if(bookHandler.chapterNames.isNotEmpty()) mainWeakReference?.get()?.apply { - bookHandler.book?.results?.comic?.name?.let { name -> + if(bookHandler?.chapterNames?.isNotEmpty() == true) mainWeakReference?.get()?.apply { + bookHandler?.book?.results?.comic?.name?.let { name -> getPreferences(MODE_PRIVATE).getInt(name, -1).let { p -> this@BookFragment.lbbstart.apply { var i = 0 if(p >= 0) { - text = bookHandler.chapterNames[p] + text = bookHandler!!.chapterNames[p] i = p } setOnClickListener { @@ -72,34 +68,20 @@ class BookFragment: NoBackRefreshFragment(R.layout.fragment_book) { } } - private fun setMenuInvisible(menu: Menu){ - 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(){ + fun navigate2dl(){ val bundle = Bundle() bundle.putString("path", arguments?.getString("path")?:"null") - bundle.putString("name", bookHandler.book?.results?.comic?.name) - if(bookHandler.vols != null) { + bundle.putString("name", bookHandler!!.book?.results?.comic?.name) + if(bookHandler!!.vols != null) { bundle.putBoolean("loadJson", true) } - bundle.putStringArray("group", bookHandler.gpws) - bundle.putStringArray("groupNames", bookHandler.keys) - bundle.putIntArray("count", bookHandler.cnts) + bundle.putStringArray("group", bookHandler!!.gpws) + bundle.putStringArray("groupNames", bookHandler!!.keys) + bundle.putIntArray("count", bookHandler!!.cnts) rootView?.let { Navigation.findNavController(it).navigate(R.id.action_nav_book_to_nav_group, bundle) } } + + companion object { + var bookHandler: BookHandler? = null + } } \ No newline at end of file diff --git a/app/src/main/java/top/fumiama/copymanga/ui/book/BookHandler.kt b/app/src/main/java/top/fumiama/copymanga/ui/book/BookHandler.kt index 801308b..12d58fc 100644 --- a/app/src/main/java/top/fumiama/copymanga/ui/book/BookHandler.kt +++ b/app/src/main/java/top/fumiama/copymanga/ui/book/BookHandler.kt @@ -1,7 +1,5 @@ package top.fumiama.copymanga.ui.book -import android.content.Context.MODE_PRIVATE -import android.content.Intent import android.os.Bundle import android.os.Looper import android.os.Message @@ -44,12 +42,12 @@ import java.io.File import java.lang.Thread.sleep import java.lang.ref.WeakReference -class BookHandler(that: WeakReference, private val path: String) +class BookHandler(private val th: WeakReference, private val path: String) : 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, Looper.myLooper()!!){ - private val that = that.get() + private val that get() = th.get() private var hasToastedError = false get(){ val re = field @@ -57,7 +55,6 @@ class BookHandler(that: WeakReference, private val path: String) return re } var book: BookInfoStructure? = null - var fbibinfo:View? = null var complete = false var ads = emptyArray() var gpws = arrayOf() @@ -65,8 +62,7 @@ class BookHandler(that: WeakReference, private val path: String) var cnts = intArrayOf() var vols: Array? = null var chapterNames = arrayOf() - private val divider get() = that?.layoutInflater?.inflate(R.layout.div_h, that.fbl, false) - private var fbtinfo: View? = null + private val divider get() = that?.layoutInflater?.inflate(R.layout.div_h, that?.fbl, false) override fun handleMessage(msg: Message) { super.handleMessage(msg) @@ -74,9 +70,10 @@ class BookHandler(that: WeakReference, private val path: String) //0 -> setLayouts() 1 -> setCover() 2 -> setTexts() - 3 -> fbibinfo?.let { setInfoHeight(it) } + 3 -> that?.fbibinfo?.let { setInfoHeight(it) } 4 -> setThemes() 5 -> setOverScale() + 6 -> if(complete) that?.navigate2dl() } } @@ -120,12 +117,12 @@ class BookHandler(that: WeakReference, private val path: String) } private fun inflateComponents(){ - fbibinfo = that?.layoutInflater?.inflate(R.layout.line_bookinfo, that.fbl, false) - fbtinfo = that?.layoutInflater?.inflate(R.layout.line_text_info, that.fbl, false) + that?.fbibinfo = that?.layoutInflater?.inflate(R.layout.line_bookinfo, that?.fbl, false) + that?.fbtinfo = that?.layoutInflater?.inflate(R.layout.line_text_info, that?.fbl, false) } private fun setOverScale(){ - that?.fbov?.setScaleView(that.lbibg) + that?.fbov?.setScaleView(that!!.lbibg) } private fun setCover(){ @@ -164,8 +161,8 @@ class BookHandler(that: WeakReference, private val path: String) book?.results?.comic?.status?.display ) }?:"" that?.bttime?.text = book?.results?.comic?.datetime_updated - (fbtinfo as TextView).text = book?.results?.comic?.brief - that?.fbl?.addView(fbtinfo) + (that?.fbtinfo as TextView).text = book?.results?.comic?.brief + that?.fbl?.addView(that?.fbtinfo) that?.fbl?.addView(divider) } @@ -190,7 +187,7 @@ class BookHandler(that: WeakReference, private val path: String) themeStructure.onEachIndexed { i, it -> if(line == null) { 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 { lct.text = it.name setOnClickListener { _ -> @@ -199,7 +196,7 @@ class BookHandler(that: WeakReference, private val path: String) } that?.fbl?.addView(line) } 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 { lct.text = it.name setOnClickListener { _ -> @@ -250,14 +247,14 @@ class BookHandler(that: WeakReference, private val path: String) chapterNames += it.name if(line == null) { 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 { lct.text = it.name setOnClickListener { Reader.viewMangaAt(book!!.results.comic.name, i) } } fbl?.addView(line) } else { - line = layoutInflater.inflate(R.layout.line_2chapters, that.fbl, false) + line = layoutInflater.inflate(R.layout.line_2chapters, that!!.fbl, false) line?.l2cl?.apply { lct.text = it.name setOnClickListener { Reader.viewMangaAt(book!!.results.comic.name, i) } @@ -271,11 +268,6 @@ class BookHandler(that: WeakReference, 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() } } diff --git a/app/src/main/java/top/fumiama/copymanga/ui/chapter/ChapterFragment.kt b/app/src/main/java/top/fumiama/copymanga/ui/chapter/ChapterFragment.kt deleted file mode 100644 index ec8e03c..0000000 --- a/app/src/main/java/top/fumiama/copymanga/ui/chapter/ChapterFragment.kt +++ /dev/null @@ -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() - } -} \ No newline at end of file diff --git a/app/src/main/java/top/fumiama/copymanga/ui/chapter/ChapterHandler.kt b/app/src/main/java/top/fumiama/copymanga/ui/chapter/ChapterHandler.kt deleted file mode 100644 index b4d2ee2..0000000 --- a/app/src/main/java/top/fumiama/copymanga/ui/chapter/ChapterHandler.kt +++ /dev/null @@ -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, 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) } - */} -} \ No newline at end of file diff --git a/app/src/main/java/top/fumiama/copymanga/ui/comicdl/ComicDlFragment.kt b/app/src/main/java/top/fumiama/copymanga/ui/comicdl/ComicDlFragment.kt index dab8c30..7bb491b 100644 --- a/app/src/main/java/top/fumiama/copymanga/ui/comicdl/ComicDlFragment.kt +++ b/app/src/main/java/top/fumiama/copymanga/ui/comicdl/ComicDlFragment.kt @@ -18,7 +18,7 @@ import java.lang.Thread.sleep import java.lang.ref.WeakReference class ComicDlFragment: NoBackRefreshFragment(R.layout.fragment_dlcomic) { - var handler: ComicDlHandler? = null + var ltbtn: View? = null var ads = emptyArray() override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) @@ -43,7 +43,6 @@ class ComicDlFragment: NoBackRefreshFragment(R.layout.fragment_dlcomic) { ) } } - mainWeakReference?.get()?.menuMain?.let { setMenuVisible(it) } } override fun onDestroy() { @@ -81,19 +80,6 @@ class ComicDlFragment: NoBackRefreshFragment(R.layout.fragment_dlcomic) { private fun loadFromJson() = Gson().fromJson(json, Array::class.java) private fun loadGroupsFromFile(file: File) = Gson().fromJson(file.reader(), Array::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){ menu.findItem(R.id.action_download)?.isVisible = false }*/ @@ -167,6 +153,7 @@ class ComicDlFragment: NoBackRefreshFragment(R.layout.fragment_dlcomic) { } companion object { + var handler: ComicDlHandler? = null var json: String? = null var exit = false } diff --git a/app/src/main/java/top/fumiama/copymanga/ui/comicdl/ComicDlHandler.kt b/app/src/main/java/top/fumiama/copymanga/ui/comicdl/ComicDlHandler.kt index c283563..2b6142a 100644 --- a/app/src/main/java/top/fumiama/copymanga/ui/comicdl/ComicDlHandler.kt +++ b/app/src/main/java/top/fumiama/copymanga/ui/comicdl/ComicDlHandler.kt @@ -14,7 +14,6 @@ import android.view.ViewTreeObserver import android.widget.Toast import com.google.gson.Gson 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.widget_downloadbar.* import kotlinx.android.synthetic.main.fragment_dlcomic.* @@ -36,14 +35,14 @@ import top.fumiama.copymanga.views.LazyScrollView import java.io.File import java.lang.ref.WeakReference -class ComicDlHandler(looper: Looper, that: WeakReference, private val vols: Array, private val comicName: String, private val groupNames: Array?):Handler(looper) { - constructor(looper: Looper, that: WeakReference, comicName: String) : this(looper, that, arrayOf(), comicName, null) { +class ComicDlHandler(looper: Looper, private val th: WeakReference, private val vols: Array, private val comicName: String, private val groupNames: Array?):Handler(looper) { + constructor(looper: Looper, th: WeakReference, comicName: String) : this(looper, th, arrayOf(), comicName, null) { isOld = true } private var isOld = false var complete = false - private val that = that.get() - private val toolsBox = UITools(that.get()?.context) + private val that get() = th.get() + private val toolsBox = UITools(th.get()?.context) private var btnNumPerRow = 4 private var btnw = 0 private var cdwnWidth = 0 @@ -56,7 +55,6 @@ class ComicDlHandler(looper: Looper, that: WeakReference, priva private var isNewTitle = false val mangaDlTools = MangaDlTools() private var multiSelect = false - private var ltbtn: View? = null private var finishMap = arrayOf() var downloading = false @@ -95,10 +93,11 @@ class ComicDlHandler(looper: Looper, that: WeakReference, priva } 6 -> that?.tdwn?.text = "${dldChapter}/${checkedChapter}" 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) 11 -> addCaption(msg.obj as String) 12 -> addDiv() + 13 -> if(complete) showMultiSelectInfo() } } @@ -128,7 +127,7 @@ class ComicDlHandler(looper: Looper, that: WeakReference, priva } private fun addDiv(){ 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.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT @@ -136,7 +135,7 @@ class ComicDlHandler(looper: Looper, that: WeakReference, priva ) } 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 that?.ldwn?.addView( tc, @@ -191,9 +190,9 @@ class ComicDlHandler(looper: Looper, that: WeakReference, priva dl?.setContentView(R.layout.dialog_unzipping) that?.dlsdwn?.viewTreeObserver?.addOnGlobalLayoutListener(object : ViewTreeObserver.OnGlobalLayoutListener{ override fun onGlobalLayout() { - cdwnWidth = that.dlsdwn.width + cdwnWidth = that!!.dlsdwn.width Log.d("MyDl", "Get dlsdwn height: $cdwnWidth") - that.dlsdwn.viewTreeObserver.removeOnGlobalLayoutListener(this) + that!!.dlsdwn.viewTreeObserver.removeOnGlobalLayoutListener(this) } }) that?.dllazys?.onScrollListener = object : LazyScrollView.OnScrollListener{ @@ -204,10 +203,10 @@ class ComicDlHandler(looper: Looper, that: WeakReference, priva } } that?.cdwn?.setOnClickListener { - if(that.dlsdwn.translationX != 0f) showDlCard() + if(that!!.dlsdwn.translationX != 0f) showDlCard() else if(checkedChapter == 0) hideDlCard() else{ - that.pdwn.progress = 0 + that!!.pdwn.progress = 0 if (downloading || checkedChapter == 0) { mangaDlTools.wait = !mangaDlTools.wait!! } else { @@ -251,7 +250,8 @@ class ComicDlHandler(looper: Looper, that: WeakReference, priva } } } - fun showMultiSelectInfo() { + + private fun showMultiSelectInfo() { toolsBox.buildInfo("进入多选模式?", "之后可以对已下载漫画进行批量删除/重新下载", "确定", null, "取消", { multiSelect = true }) } @@ -314,12 +314,12 @@ class ComicDlHandler(looper: Looper, that: WeakReference, priva @SuppressLint("SetTextI18n") private fun addTbtn(title: String, uuid: String, caption: String, url: String) { if ((tbtncnt % btnNumPerRow == 0) || isNewTitle) { - ltbtn = that?.layoutInflater?.inflate(R.layout.line_horizonal_empty, that.ldwn, false) - that?.ldwn?.addView(ltbtn) + that?.ltbtn = that?.layoutInflater?.inflate(R.layout.line_horizonal_empty, that!!.ldwn, false) + that?.ldwn?.addView(that!!.ltbtn) tbtncnt = 0 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 tbtnlist += tbv.tbtn tbtncnt++ @@ -330,15 +330,15 @@ class ComicDlHandler(looper: Looper, that: WeakReference, priva //tbv.tbtn.hint = caption tbv.tbtn.caption = caption 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") ViewMangaActivity.fileArray += zipf if (zipf.exists()) { tbv.tbtn.setBackgroundResource(R.drawable.rndbg_checked) tbv.tbtn.isChecked = false } - ltbtn?.ltbtn?.addView(tbv) - ltbtn?.invalidate() + that?.ltbtn?.ltbtn?.addView(tbv) + that?.ltbtn?.invalidate() tbv.tbtn.setOnClickListener { if (zipf.exists() && !multiSelect) { it.tbtn.setBackgroundResource(R.drawable.rndbg_checked) @@ -348,13 +348,13 @@ class ComicDlHandler(looper: Looper, that: WeakReference, priva ViewMangaActivity.position = it.tbtn.index dl?.show() - that.startActivity(Intent(that.context, ViewMangaActivity::class.java) + that?.startActivity(Intent(that!!.context, ViewMangaActivity::class.java) .putExtra("callFrom", "zipFirst") ) } else { it.tbtn.setBackgroundResource(R.drawable.toggle_button) - if (it.tbtn.isChecked) that.tdwn?.text = "$dldChapter/${++checkedChapter}" - else that.tdwn.text = "$dldChapter/${--checkedChapter}" + if (it.tbtn.isChecked) that?.tdwn?.text = "$dldChapter/${++checkedChapter}" + else that?.tdwn?.text = "$dldChapter/${--checkedChapter}" } } tbv.tbtn.setOnLongClickListener { @@ -377,7 +377,7 @@ class ComicDlHandler(looper: Looper, that: WeakReference, priva ViewMangaActivity.position = it.tbtn.index dl?.show() - that.startActivity(Intent(that.context, ViewMangaActivity::class.java)) + that?.startActivity(Intent(that?.context, ViewMangaActivity::class.java)) }, null, null ) } @@ -389,17 +389,17 @@ class ComicDlHandler(looper: Looper, that: WeakReference, priva private fun analyzeOldStructure() = Thread{ Gson().fromJson(json?.reader(), Array::class.java)?.let { 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 - that.ldwn.addView( + that!!.ldwn.addView( tc, ViewGroup.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT ) ) - that.ldwn.addView( - that.layoutInflater.inflate(R.layout.div_h, that.ldwn, false), + that!!.ldwn.addView( + that!!.layoutInflater.inflate(R.layout.div_h, that!!.ldwn, false), ViewGroup.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT diff --git a/app/src/main/java/top/fumiama/copymanga/ui/download/DownloadFragment.kt b/app/src/main/java/top/fumiama/copymanga/ui/download/DownloadFragment.kt index 085a80b..65cd10c 100644 --- a/app/src/main/java/top/fumiama/copymanga/ui/download/DownloadFragment.kt +++ b/app/src/main/java/top/fumiama/copymanga/ui/download/DownloadFragment.kt @@ -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 jsonFile = File(cd, "info.bin") if(isRoot || !jsonFile.exists()) cd?.list()?.sortedArrayWith { o1, o2 -> diff --git a/app/src/main/java/top/fumiama/copymanga/ui/home/HomeFragment.kt b/app/src/main/java/top/fumiama/copymanga/ui/home/HomeFragment.kt index 2f505eb..2719e04 100644 --- a/app/src/main/java/top/fumiama/copymanga/ui/home/HomeFragment.kt +++ b/app/src/main/java/top/fumiama/copymanga/ui/home/HomeFragment.kt @@ -38,7 +38,7 @@ class HomeFragment : NoBackRefreshFragment(R.layout.fragment_home) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - if(isFirstInflate){ + if(isFirstInflate) { val theme = resources.newTheme() swiperefresh.setColorSchemeColors( resources.getColor(R.color.colorAccent, theme), diff --git a/app/src/main/java/top/fumiama/copymanga/ui/home/HomeHandler.kt b/app/src/main/java/top/fumiama/copymanga/ui/home/HomeHandler.kt index 0756143..02499c8 100644 --- a/app/src/main/java/top/fumiama/copymanga/ui/home/HomeHandler.kt +++ b/app/src/main/java/top/fumiama/copymanga/ui/home/HomeHandler.kt @@ -8,10 +8,12 @@ import android.os.Message import android.util.Log import android.view.View import android.view.ViewTreeObserver +import android.widget.LinearLayout import android.widget.Toast import androidx.cardview.widget.CardView import androidx.constraintlayout.widget.ConstraintLayout import androidx.navigation.Navigation +import androidx.navigation.fragment.findNavController import com.bumptech.glide.Glide import com.bumptech.glide.load.model.GlideUrl 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.ref.WeakReference -class HomeHandler(that: WeakReference) : AutoDownloadHandler( +class HomeHandler(private val that: WeakReference) : AutoDownloadHandler( that.get()?.getString(R.string.mainPageApiUrl) ?: "", IndexStructure::class.java, Looper.myLooper()!!, 9 ) { - private val homeF = that.get() + private val homeF get() = that.get() var index: IndexStructure? = null var fhib: View? = null get() { Log.d("MyHH", "Get fhib.") 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() } return field @@ -72,7 +74,15 @@ class HomeHandler(that: WeakReference) : AutoDownloadHandler( } } 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() } } @@ -159,7 +169,7 @@ class HomeHandler(that: WeakReference) : AutoDownloadHandler( } } 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) : AutoDownloadHandler( } private fun inflateCardLines() { + if (indexLines.isNotEmpty()) indexLines = arrayOf() inflateRec() inflateTopics() inflateHot() @@ -208,7 +219,10 @@ class HomeHandler(that: WeakReference) : AutoDownloadHandler( inflateFinish() inflateRank() 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 }.start() } @@ -233,11 +247,11 @@ class HomeHandler(that: WeakReference) : AutoDownloadHandler( .addPageTransformer(ScaleInTransformer()) .setPageMargin(it.dp2px(20) ?: 0, it.dp2px(10) ?: 0) .setIndicator( - IndicatorView(homeF.context) + IndicatorView(homeF!!.context) .setIndicatorColor(Color.DKGRAY) .setIndicatorSelectorColor(Color.WHITE) .setIndicatorStyle(IndicatorView.IndicatorStyle.INDICATOR_BEZIER) - ).adapter = homeF.ViewData(v).RecyclerViewAdapter() + ).adapter = homeF?.ViewData(v)?.RecyclerViewAdapter() } v.invalidate() homeF?.fhov?.swipeRefreshLayout = homeF?.swiperefresh @@ -265,7 +279,7 @@ class HomeHandler(that: WeakReference) : AutoDownloadHandler( 2 -> R.layout.line_2bookline 3 -> R.layout.line_3bookline else -> return -1 - }, homeF.fhl, false)?.apply { + }, homeF!!.fhl, false)?.apply { scanCards(this, comics, finish, isTopic) rttitle.text = title ir.setImageResource(iconResId) diff --git a/app/src/main/java/top/fumiama/copymanga/ui/sub/SubFragment.kt b/app/src/main/java/top/fumiama/copymanga/ui/sub/SubFragment.kt deleted file mode 100644 index add5393..0000000 --- a/app/src/main/java/top/fumiama/copymanga/ui/sub/SubFragment.kt +++ /dev/null @@ -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) - } -} \ No newline at end of file diff --git a/app/src/main/java/top/fumiama/copymanga/ui/vm/ViewMangaActivity.kt b/app/src/main/java/top/fumiama/copymanga/ui/vm/ViewMangaActivity.kt index a47c95a..f18dea7 100644 --- a/app/src/main/java/top/fumiama/copymanga/ui/vm/ViewMangaActivity.kt +++ b/app/src/main/java/top/fumiama/copymanga/ui/vm/ViewMangaActivity.kt @@ -360,7 +360,7 @@ class ViewMangaActivity : TitleActivityTemplate() { val re = tasks?.get(index2load) if (re != null) Thread{ val data = re.get() - if(data != null) { + if(data != null && data.isNotEmpty()) { BitmapFactory.decodeByteArray(data, 0, data.size)?.let { loadImg(imgView, it, isLast, useCut, isLeft) Log.d("MyVM", "Load from task") diff --git a/app/src/main/java/top/fumiama/copymanga/update/Update.kt b/app/src/main/java/top/fumiama/copymanga/update/Update.kt index c1b2ef6..88ab9d6 100644 --- a/app/src/main/java/top/fumiama/copymanga/update/Update.kt +++ b/app/src/main/java/top/fumiama/copymanga/update/Update.kt @@ -18,7 +18,7 @@ import java.security.MessageDigest object Update { 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 progressHandler = object : Client.Progress{ override fun notify(progressPercentage: Int) { diff --git a/app/src/main/res/layout/fragment_book.xml b/app/src/main/res/layout/fragment_book.xml index a664a2b..31e9de0 100644 --- a/app/src/main/res/layout/fragment_book.xml +++ b/app/src/main/res/layout/fragment_book.xml @@ -13,7 +13,8 @@ android:id="@+id/fbl" android:layout_width="match_parent" android:layout_height="wrap_content" - android:orientation="vertical" /> + android:orientation="vertical" + android:paddingBottom="@dimen/global_content_padding_bottom"/> - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_dlcomic.xml b/app/src/main/res/layout/fragment_dlcomic.xml index 92baca2..cfcbdc4 100644 --- a/app/src/main/res/layout/fragment_dlcomic.xml +++ b/app/src/main/res/layout/fragment_dlcomic.xml @@ -14,7 +14,8 @@ android:id="@+id/ldwn" android:layout_width="match_parent" android:layout_height="wrap_content" - android:orientation="vertical"/> + android:orientation="vertical" + android:paddingBottom="@dimen/global_content_padding_bottom"/> - \ No newline at end of file + android:layout_height="match_parent" + android:paddingBottom="@dimen/global_content_padding_bottom"/> diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml index f57c9b8..f83b3ec 100644 --- a/app/src/main/res/layout/fragment_home.xml +++ b/app/src/main/res/layout/fragment_home.xml @@ -1,13 +1,12 @@ - - + + android:orientation="vertical" + android:paddingBottom="@dimen/global_content_padding_bottom"> diff --git a/app/src/main/res/layout/fragment_reader.xml b/app/src/main/res/layout/fragment_reader.xml deleted file mode 100644 index 3de05ba..0000000 --- a/app/src/main/res/layout/fragment_reader.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_sub.xml b/app/src/main/res/layout/fragment_sub.xml deleted file mode 100644 index 09c304b..0000000 --- a/app/src/main/res/layout/fragment_sub.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/line_lazybooklines.xml b/app/src/main/res/layout/line_lazybooklines.xml index d360a96..f497295 100644 --- a/app/src/main/res/layout/line_lazybooklines.xml +++ b/app/src/main/res/layout/line_lazybooklines.xml @@ -25,7 +25,8 @@ android:id="@+id/mydll" android:layout_width="match_parent" android:layout_height="wrap_content" - android:orientation="vertical" /> + android:orientation="vertical" + android:paddingBottom="@dimen/global_content_padding_bottom"/> diff --git a/app/src/main/res/menu/main.xml b/app/src/main/res/menu/main.xml index a807181..4311e0b 100644 --- a/app/src/main/res/menu/main.xml +++ b/app/src/main/res/menu/main.xml @@ -1,5 +1,5 @@ - + - \ No newline at end of file + diff --git a/app/src/main/res/navigation/mobile_navigation.xml b/app/src/main/res/navigation/mobile_navigation.xml index 2f62c08..a627d47 100644 --- a/app/src/main/res/navigation/mobile_navigation.xml +++ b/app/src/main/res/navigation/mobile_navigation.xml @@ -75,12 +75,6 @@ app:popExitAnim="@anim/slide_in_right_exit"/> - - - - - - 0.8 16dp 4dp + + 48dp \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 651e1fe..9e3889c 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -3,11 +3,12 @@ 设定 关于 下载 + 整理 主页 分类 排行 - ©2022源文雨@CoolApk\n本应用为拷贝漫画的第三方客户端,数据均来源于网络,作者不对其中所呈现的任何内容负责。 + ©2022源文雨\n本应用为拷贝漫画的第三方客户端,数据均来源于网络,作者不对其中所呈现的任何内容负责。 浏览历史 我的订阅 我的下载