mirror of
https://github.com/fumiama/copymanga.git
synced 2026-06-20 00:50:25 +08:00
2.0.beta3
1. 修复增加卡片错误 2. 增加专题、漫画推荐、全新上架、已完结的详情页
This commit is contained in:
@@ -28,8 +28,8 @@ android {
|
|||||||
applicationId 'top.fumiama.copymanga'
|
applicationId 'top.fumiama.copymanga'
|
||||||
minSdkVersion 23
|
minSdkVersion 23
|
||||||
targetSdkVersion 30
|
targetSdkVersion 30
|
||||||
versionCode 13
|
versionCode 14
|
||||||
versionName '2.0.beta2'
|
versionName '2.0.beta3'
|
||||||
resConfigs "zh", "zh-rCN"
|
resConfigs "zh", "zh-rCN"
|
||||||
|
|
||||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||||
|
|||||||
@@ -0,0 +1,12 @@
|
|||||||
|
package top.fumiama.copymanga.json;
|
||||||
|
|
||||||
|
public class TopicStructure extends ReturnBase {
|
||||||
|
public Results results;
|
||||||
|
public static class Results {
|
||||||
|
public String title;
|
||||||
|
public String period;
|
||||||
|
public String intro;
|
||||||
|
public int type;
|
||||||
|
public String datetime_created;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
package top.fumiama.copymanga.json;
|
||||||
|
|
||||||
|
public class TypeBookListStructure extends ReturnBase {
|
||||||
|
public Results results;
|
||||||
|
public static class Results {
|
||||||
|
public int total;
|
||||||
|
public TypeBook[] list;
|
||||||
|
public int limit;
|
||||||
|
public int offset;
|
||||||
|
}
|
||||||
|
public static class TypeBook {
|
||||||
|
public int type;
|
||||||
|
public String name;
|
||||||
|
public String datetime_created;
|
||||||
|
public ComicStructure comic;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -48,17 +48,19 @@ class CardList(
|
|||||||
recycleOneRow(it)
|
recycleOneRow(it)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun recycleOneRow(v:View?){
|
private fun recycleOneRow(v:View?){
|
||||||
if(index < 20) rows[index] = v
|
val relativeIndex = index++ % 20
|
||||||
else{
|
if(rows[relativeIndex] == null) rows[relativeIndex] = v
|
||||||
|
else {
|
||||||
|
val victim = rows[relativeIndex]
|
||||||
mainWeakReference?.get()?.runOnUiThread {
|
mainWeakReference?.get()?.runOnUiThread {
|
||||||
that?.mydll?.removeView(rows[index % 20])
|
that?.apply {
|
||||||
//zis.mys?.scrollY = zis.mys?.scrollY?.minus(cardHeight + 16)?:0
|
mydll?.removeView(victim)
|
||||||
|
mys?.scrollY = that.mys?.scrollY?.minus(cardHeight + 16)?:0
|
||||||
|
}
|
||||||
}
|
}
|
||||||
rows[index % 20] = v
|
rows[relativeIndex] = v
|
||||||
}
|
}
|
||||||
index++
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ExperimentalStdlibApi
|
@ExperimentalStdlibApi
|
||||||
|
|||||||
@@ -8,12 +8,13 @@ import androidx.navigation.Navigation
|
|||||||
import com.google.gson.Gson
|
import com.google.gson.Gson
|
||||||
import top.fumiama.dmzj.copymanga.R
|
import top.fumiama.dmzj.copymanga.R
|
||||||
import top.fumiama.copymanga.json.BookListStructure
|
import top.fumiama.copymanga.json.BookListStructure
|
||||||
|
import top.fumiama.copymanga.json.TypeBookListStructure
|
||||||
import top.fumiama.copymanga.tools.DownloadTools
|
import top.fumiama.copymanga.tools.DownloadTools
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.lang.ref.WeakReference
|
import java.lang.ref.WeakReference
|
||||||
|
|
||||||
@ExperimentalStdlibApi
|
@ExperimentalStdlibApi
|
||||||
open class InfoCardLoader(inflateRes:Int, private val navId:Int): MangaPagesFragmentTemplate(inflateRes) {
|
open class InfoCardLoader(inflateRes:Int, private val navId:Int, private val isTypeBook: Boolean = false): MangaPagesFragmentTemplate(inflateRes) {
|
||||||
private val subUrl get() = getApiUrl()
|
private val subUrl get() = getApiUrl()
|
||||||
|
|
||||||
init {
|
init {
|
||||||
@@ -24,13 +25,27 @@ open class InfoCardLoader(inflateRes:Int, private val navId:Int): MangaPagesFrag
|
|||||||
page = 0
|
page = 0
|
||||||
isRefresh = false
|
isRefresh = false
|
||||||
}
|
}
|
||||||
val bookList = Gson().fromJson(it?.decodeToString(), BookListStructure::class.java)
|
if(isTypeBook) {
|
||||||
bookList?.let {
|
val bookList = Gson().fromJson(it?.decodeToString(), TypeBookListStructure::class.java)
|
||||||
if(it.code == 200) it.results.list?.forEach{ book ->
|
bookList?.apply {
|
||||||
cardList.addCard(book.name, null, book.cover, book.path_word, null, null, false)
|
if(results.offset < results.total) {
|
||||||
|
if(code == 200) results.list.forEach { book ->
|
||||||
|
cardList.addCard(book.comic.name, null, book.comic.cover, book.comic.path_word, null, null, false)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
page++
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
val bookList = Gson().fromJson(it?.decodeToString(), BookListStructure::class.java)
|
||||||
|
bookList?.apply {
|
||||||
|
if(results.offset < results.total) {
|
||||||
|
if(code == 200) results.list.forEach{ book ->
|
||||||
|
cardList.addCard(book.name, null, book.cover, book.path_word, null, null, false)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
page++
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
page++
|
|
||||||
onLoadFinish()
|
onLoadFinish()
|
||||||
}.start()
|
}.start()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -100,18 +100,18 @@ class BookHandler(that: WeakReference<BookFragment>, path: String)
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun setCover(){
|
private fun setCover(){
|
||||||
that?.let {
|
that?.apply {
|
||||||
it.fbl.addView(fbibinfo)
|
fbl.addView(fbibinfo)
|
||||||
val load = Glide.with(it).load(
|
val load = Glide.with(this).load(
|
||||||
GlideUrl(book?.results?.comic?.cover, CMApi.myGlideHeaders)
|
GlideUrl(book?.results?.comic?.cover, CMApi.myGlideHeaders)
|
||||||
).timeout(10000)
|
).timeout(10000)
|
||||||
load.into(it.imic)
|
load.into(imic)
|
||||||
it.context?.let { it1 -> GlideBlurTransformation(it1) }
|
context?.let { it1 -> GlideBlurTransformation(it1) }
|
||||||
?.let { it2 -> RequestOptions.bitmapTransform(it2) }
|
?.let { it2 -> RequestOptions.bitmapTransform(it2) }
|
||||||
?.let { it3 -> load.apply(it3).into(it.lbibg) }
|
?.let { it3 -> load.apply(it3).into(lbibg) }
|
||||||
it.imf.visibility = View.GONE
|
imf.visibility = View.GONE
|
||||||
|
fbl.addView(divider)
|
||||||
}
|
}
|
||||||
that?.fbl?.addView(divider)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getThemeSeq(authors: Array<ThemeStructure>): CharSequence{
|
private fun getThemeSeq(authors: Array<ThemeStructure>): CharSequence{
|
||||||
|
|||||||
@@ -0,0 +1,77 @@
|
|||||||
|
package top.fumiama.copymanga.ui.cardflow.finish
|
||||||
|
|
||||||
|
import android.animation.ObjectAnimator
|
||||||
|
import android.view.View
|
||||||
|
import kotlinx.android.synthetic.main.anchor_popular.view.*
|
||||||
|
import kotlinx.android.synthetic.main.line_finish.*
|
||||||
|
import kotlinx.android.synthetic.main.line_lazybooklines.*
|
||||||
|
import top.fumiama.copymanga.MainActivity.Companion.mainWeakReference
|
||||||
|
import top.fumiama.copymanga.template.InfoCardLoader
|
||||||
|
import top.fumiama.dmzj.copymanga.R
|
||||||
|
import java.lang.Thread.sleep
|
||||||
|
|
||||||
|
@ExperimentalStdlibApi
|
||||||
|
class FinishFragment : InfoCardLoader(R.layout.fragment_finish, R.id.action_nav_finish_to_nav_book) {
|
||||||
|
private val sortWay = listOf("datetime_updated", "-datetime_updated", "popular", "-popular")
|
||||||
|
private var sortValue = 0
|
||||||
|
|
||||||
|
override fun getApiUrl() =
|
||||||
|
getString(R.string.finishApiUrl).let {
|
||||||
|
String.format(
|
||||||
|
it,
|
||||||
|
page * 21,
|
||||||
|
sortWay[sortValue]
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun setListeners() {
|
||||||
|
super.setListeners()
|
||||||
|
setUpdate()
|
||||||
|
setHot()
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onLoadFinish() {
|
||||||
|
super.onLoadFinish()
|
||||||
|
mainWeakReference?.get()?.runOnUiThread {
|
||||||
|
mypl.visibility = View.GONE
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun setUpdate() {
|
||||||
|
line_finish_time.apply {
|
||||||
|
apt.setText(R.string.menu_update_time)
|
||||||
|
setOnClickListener {
|
||||||
|
sortValue = if(apim.rotation == 0f) {
|
||||||
|
ObjectAnimator.ofFloat(apim, "rotation", 0f, 180f).setDuration(233).start()
|
||||||
|
1
|
||||||
|
}else{
|
||||||
|
ObjectAnimator.ofFloat(apim, "rotation", 180f, 0f).setDuration(233).start()
|
||||||
|
0
|
||||||
|
}
|
||||||
|
Thread{
|
||||||
|
sleep(400)
|
||||||
|
mh?.sendEmptyMessage(4)
|
||||||
|
}.start()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun setHot() {
|
||||||
|
line_finish_pop.apply {
|
||||||
|
apt.setText(R.string.menu_hot)
|
||||||
|
setOnClickListener {
|
||||||
|
sortValue = if (apim.rotation == 0f) {
|
||||||
|
ObjectAnimator.ofFloat(apim, "rotation", 0f, 180f).setDuration(233).start()
|
||||||
|
1
|
||||||
|
} else {
|
||||||
|
ObjectAnimator.ofFloat(apim, "rotation", 180f, 0f).setDuration(233).start()
|
||||||
|
0
|
||||||
|
}
|
||||||
|
Thread {
|
||||||
|
sleep(400)
|
||||||
|
mh?.sendEmptyMessage(4)
|
||||||
|
}.start()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
package top.fumiama.copymanga.ui.cardflow.newest
|
||||||
|
|
||||||
|
import android.view.View
|
||||||
|
import kotlinx.android.synthetic.main.line_lazybooklines.*
|
||||||
|
import top.fumiama.copymanga.MainActivity.Companion.mainWeakReference
|
||||||
|
import top.fumiama.copymanga.template.InfoCardLoader
|
||||||
|
import top.fumiama.dmzj.copymanga.R
|
||||||
|
|
||||||
|
@ExperimentalStdlibApi
|
||||||
|
class NewestFragment : InfoCardLoader(R.layout.fragment_newest, R.id.action_nav_newest_to_nav_book, true) {
|
||||||
|
override fun getApiUrl() =
|
||||||
|
getString(R.string.newestApiUrl).let {
|
||||||
|
String.format(it, page * 21)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onLoadFinish() {
|
||||||
|
super.onLoadFinish()
|
||||||
|
mainWeakReference?.get()?.runOnUiThread {
|
||||||
|
mypl.visibility = View.GONE
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
package top.fumiama.copymanga.ui.cardflow.recommend
|
||||||
|
|
||||||
|
import android.view.View
|
||||||
|
import kotlinx.android.synthetic.main.line_lazybooklines.*
|
||||||
|
import top.fumiama.copymanga.MainActivity.Companion.mainWeakReference
|
||||||
|
import top.fumiama.copymanga.template.InfoCardLoader
|
||||||
|
import top.fumiama.dmzj.copymanga.R
|
||||||
|
|
||||||
|
@ExperimentalStdlibApi
|
||||||
|
class RecFragment : InfoCardLoader(R.layout.fragment_recommend, R.id.action_nav_recommend_to_nav_book, true) {
|
||||||
|
override fun getApiUrl() =
|
||||||
|
getString(R.string.recommendApiUrl).let {
|
||||||
|
String.format(it, page * 21)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onLoadFinish() {
|
||||||
|
super.onLoadFinish()
|
||||||
|
mainWeakReference?.get()?.runOnUiThread {
|
||||||
|
mypl.visibility = View.GONE
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package top.fumiama.copymanga.ui.sort
|
package top.fumiama.copymanga.ui.cardflow.sort
|
||||||
|
|
||||||
import android.animation.ObjectAnimator
|
import android.animation.ObjectAnimator
|
||||||
import android.view.View
|
import android.view.View
|
||||||
@@ -0,0 +1,51 @@
|
|||||||
|
package top.fumiama.copymanga.ui.cardflow.topic
|
||||||
|
|
||||||
|
import android.os.Bundle
|
||||||
|
import android.view.View
|
||||||
|
import com.google.gson.Gson
|
||||||
|
import kotlinx.android.synthetic.main.app_bar_main.*
|
||||||
|
import kotlinx.android.synthetic.main.line_lazybooklines.*
|
||||||
|
import kotlinx.android.synthetic.main.fragment_topic.*
|
||||||
|
import top.fumiama.copymanga.MainActivity.Companion.mainWeakReference
|
||||||
|
import top.fumiama.copymanga.json.TopicStructure
|
||||||
|
import top.fumiama.copymanga.template.AutoDownloadThread
|
||||||
|
import top.fumiama.copymanga.template.InfoCardLoader
|
||||||
|
import top.fumiama.dmzj.copymanga.R
|
||||||
|
|
||||||
|
@ExperimentalStdlibApi
|
||||||
|
class TopicFragment : InfoCardLoader(R.layout.fragment_topic, R.id.action_nav_topic_to_nav_book) {
|
||||||
|
private var type = 1
|
||||||
|
override fun getApiUrl() =
|
||||||
|
getString(R.string.topicContentApiUrl).let {
|
||||||
|
String.format(it, arguments?.getString("path"), type, page * 21)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
|
super.onCreate(savedInstanceState)
|
||||||
|
AutoDownloadThread(getString(R.string.topicApiUrl).let {
|
||||||
|
String.format(it, arguments?.getString("path"))
|
||||||
|
}) {
|
||||||
|
it?.apply {
|
||||||
|
val r = inputStream().reader()
|
||||||
|
val topic = Gson().fromJson(r, TopicStructure::class.java)
|
||||||
|
topic?.apply {
|
||||||
|
mainWeakReference?.get()?.let {
|
||||||
|
it.runOnUiThread {
|
||||||
|
it.toolbar.title = results.title
|
||||||
|
ftttime.text = results.datetime_created
|
||||||
|
fttintro.text = results.intro
|
||||||
|
type = results.type
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}.start()
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onLoadFinish() {
|
||||||
|
super.onLoadFinish()
|
||||||
|
mainWeakReference?.get()?.runOnUiThread {
|
||||||
|
mypl.visibility = View.GONE
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -110,7 +110,7 @@ class HomeHandler(that: WeakReference<HomeFragment>) :AutoDownloadHandler(
|
|||||||
newComic.path_word = topic.path_word
|
newComic.path_word = topic.path_word
|
||||||
comics += newComic
|
comics += newComic
|
||||||
}
|
}
|
||||||
if(comics.size == 3) allocateLine(homeF?.getString(R.string.topics_series)?:"", R.drawable.img_hot_serial, comics)
|
if(comics.size == 3) allocateLine(homeF?.getString(R.string.topics_series)?:"", R.drawable.img_hot_serial, comics, isTopic = true)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -121,7 +121,9 @@ class HomeHandler(that: WeakReference<HomeFragment>) :AutoDownloadHandler(
|
|||||||
if(i > 2) break
|
if(i > 2) break
|
||||||
comics += rec.comic
|
comics += rec.comic
|
||||||
}
|
}
|
||||||
if(comics.size == 3) allocateLine(homeF?.getString(R.string.manga_rec)?:"", R.drawable.img_master_work, comics)
|
if(comics.size == 3) allocateLine(homeF?.getString(R.string.manga_rec)?:"", R.drawable.img_master_work, comics) {
|
||||||
|
homeF?.rootView?.apply { Navigation.findNavController(this).navigate(R.id.action_nav_home_to_nav_recommend) }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -166,7 +168,9 @@ class HomeHandler(that: WeakReference<HomeFragment>) :AutoDownloadHandler(
|
|||||||
if(i > 8) break
|
if(i > 8) break
|
||||||
comics += rec.comic
|
comics += rec.comic
|
||||||
}
|
}
|
||||||
if(comics.size == 9) allocateLine(homeF?.getString(R.string.new_list)?:"", R.drawable.img_latest_pub, comics)
|
if(comics.size == 9) allocateLine(homeF?.getString(R.string.new_list)?:"", R.drawable.img_latest_pub, comics) {
|
||||||
|
homeF?.rootView?.apply { Navigation.findNavController(this).navigate(R.id.action_nav_home_to_nav_newest) }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -177,7 +181,9 @@ class HomeHandler(that: WeakReference<HomeFragment>) :AutoDownloadHandler(
|
|||||||
if(i > 5) break
|
if(i > 5) break
|
||||||
comics += rec
|
comics += rec
|
||||||
}
|
}
|
||||||
if(comics.size == 6) allocateLine(homeF?.getString(R.string.complete)?:"", R.drawable.img_novel_eye, comics, true)
|
if(comics.size == 6) allocateLine(homeF?.getString(R.string.complete)?:"", R.drawable.img_novel_eye, comics, true) {
|
||||||
|
homeF?.rootView?.apply { Navigation.findNavController(this).navigate(R.id.action_nav_home_to_nav_finish) }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -237,7 +243,7 @@ class HomeHandler(that: WeakReference<HomeFragment>) :AutoDownloadHandler(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun allocateLine(title: String, iconResId: Int, comics: Array<ComicStructure>, finish: Boolean = false): Int{
|
private fun allocateLine(title: String, iconResId: Int, comics: Array<ComicStructure>, finish: Boolean = false, isTopic: Boolean = false, onClick: (() -> Unit)? = null): Int{
|
||||||
val p = indexLines.size
|
val p = indexLines.size
|
||||||
val c = comics.size / 3
|
val c = comics.size / 3
|
||||||
homeF?.layoutInflater?.inflate(
|
homeF?.layoutInflater?.inflate(
|
||||||
@@ -246,12 +252,13 @@ 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)?.let {
|
}, homeF.fhl, false)?.apply {
|
||||||
scanCards(it, comics, finish)
|
scanCards(this, comics, finish, isTopic)
|
||||||
it.rttitle.text = title
|
rttitle.text = title
|
||||||
it.ir.setImageResource(iconResId)
|
ir.setImageResource(iconResId)
|
||||||
setLineHeight(it, c)
|
setLineHeight(this, c)
|
||||||
indexLines += it
|
if(onClick != null) setOnClickListener { onClick() }
|
||||||
|
indexLines += this
|
||||||
}
|
}
|
||||||
return p
|
return p
|
||||||
}
|
}
|
||||||
@@ -279,7 +286,7 @@ class HomeHandler(that: WeakReference<HomeFragment>) :AutoDownloadHandler(
|
|||||||
}
|
}
|
||||||
}*/
|
}*/
|
||||||
|
|
||||||
private fun scanCards(v: View, comics: Array<ComicStructure>, finish: Boolean = false){
|
private fun scanCards(v: View, comics: Array<ComicStructure>, finish: Boolean, isTopic: Boolean){
|
||||||
var id = v.rc1.id
|
var id = v.rc1.id
|
||||||
var card = v.findViewById<ConstraintLayout>(id)
|
var card = v.findViewById<ConstraintLayout>(id)
|
||||||
for (data in comics){
|
for (data in comics){
|
||||||
@@ -288,13 +295,14 @@ class HomeHandler(that: WeakReference<HomeFragment>) :AutoDownloadHandler(
|
|||||||
data.path_word,
|
data.path_word,
|
||||||
data.name,
|
data.name,
|
||||||
data.cover,
|
data.cover,
|
||||||
finish
|
finish,
|
||||||
|
isTopic
|
||||||
)
|
)
|
||||||
card = v.findViewById(++id)
|
card = v.findViewById(++id)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun setCards(cv: CardView, pw: String, name: String, img: String, isFinal: Boolean = false) {
|
private fun setCards(cv: CardView, pw: String, name: String, img: String, isFinal: Boolean, isTopic: Boolean) {
|
||||||
cv.tic.text = name
|
cv.tic.text = name
|
||||||
homeF?.let {
|
homeF?.let {
|
||||||
Glide.with(it).load(GlideUrl(img, CMApi.myGlideHeaders)).timeout(10000).into(cv.imic)
|
Glide.with(it).load(GlideUrl(img, CMApi.myGlideHeaders)).timeout(10000).into(cv.imic)
|
||||||
@@ -303,7 +311,7 @@ class HomeHandler(that: WeakReference<HomeFragment>) :AutoDownloadHandler(
|
|||||||
cv.setOnClickListener {
|
cv.setOnClickListener {
|
||||||
val bundle = Bundle()
|
val bundle = Bundle()
|
||||||
bundle.putString("path", pw)
|
bundle.putString("path", pw)
|
||||||
homeF?.rootView?.let { Navigation.findNavController(it).navigate(R.id.action_nav_home_to_nav_book, bundle) }
|
homeF?.rootView?.let { Navigation.findNavController(it).navigate(if(isTopic) R.id.action_nav_home_to_nav_topic else R.id.action_nav_home_to_nav_book, bundle) }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ import androidx.fragment.app.Fragment
|
|||||||
import com.github.zawadz88.materialpopupmenu.popupMenu
|
import com.github.zawadz88.materialpopupmenu.popupMenu
|
||||||
import com.google.gson.Gson
|
import com.google.gson.Gson
|
||||||
import kotlinx.android.synthetic.main.anchor_popular.view.*
|
import kotlinx.android.synthetic.main.anchor_popular.view.*
|
||||||
import kotlinx.android.synthetic.main.line_rank.*
|
|
||||||
import top.fumiama.dmzj.copymanga.R
|
import top.fumiama.dmzj.copymanga.R
|
||||||
import top.fumiama.copymanga.json.FilterStructure
|
import top.fumiama.copymanga.json.FilterStructure
|
||||||
import top.fumiama.copymanga.template.InfoCardLoader
|
import top.fumiama.copymanga.template.InfoCardLoader
|
||||||
|
|||||||
26
app/src/main/res/layout/fragment_finish.xml
Normal file
26
app/src/main/res/layout/fragment_finish.xml
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
<?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.cardflow.sort.SortFragment">
|
||||||
|
|
||||||
|
<include
|
||||||
|
android:id="@+id/fslai"
|
||||||
|
layout="@layout/line_finish"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
<include
|
||||||
|
layout="@layout/line_lazybooklines"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="0dp"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toBottomOf="@+id/fslai" />
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
10
app/src/main/res/layout/fragment_newest.xml
Normal file
10
app/src/main/res/layout/fragment_newest.xml
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
<?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">
|
||||||
|
|
||||||
|
<include
|
||||||
|
layout="@layout/line_lazybooklines"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent" />
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
@@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
<include
|
<include
|
||||||
android:id="@+id/frlai"
|
android:id="@+id/frlai"
|
||||||
layout="@layout/line_rank"
|
layout="@layout/line_finish"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
|||||||
10
app/src/main/res/layout/fragment_recommend.xml
Normal file
10
app/src/main/res/layout/fragment_recommend.xml
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
<?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">
|
||||||
|
|
||||||
|
<include
|
||||||
|
layout="@layout/line_lazybooklines"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent" />
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
@@ -4,7 +4,7 @@
|
|||||||
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.sort.SortFragment">
|
tools:context="top.fumiama.copymanga.ui.cardflow.sort.SortFragment">
|
||||||
|
|
||||||
<include
|
<include
|
||||||
android:id="@+id/fslai"
|
android:id="@+id/fslai"
|
||||||
|
|||||||
23
app/src/main/res/layout/fragment_topic.xml
Normal file
23
app/src/main/res/layout/fragment_topic.xml
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:orientation="vertical">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/ftttime"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:textAppearance="@style/TextAppearance.AppCompat.Display1" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/fttintro"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginBottom="@dimen/nav_header_vertical_spacing" />
|
||||||
|
|
||||||
|
<include
|
||||||
|
layout="@layout/line_lazybooklines"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content" />
|
||||||
|
</LinearLayout>
|
||||||
@@ -11,25 +11,25 @@
|
|||||||
android:layout_marginTop="@dimen/nav_header_vertical_spacing"
|
android:layout_marginTop="@dimen/nav_header_vertical_spacing"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintTop_toBottomOf="@+id/line_rank_class" />
|
app:layout_constraintTop_toBottomOf="@+id/line_finish_pop" />
|
||||||
|
|
||||||
<include
|
<include
|
||||||
android:id="@+id/line_rank_class"
|
android:id="@+id/line_finish_pop"
|
||||||
layout="@layout/anchor_popular"
|
layout="@layout/anchor_popular"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
app:layout_constraintBottom_toBottomOf="parent"
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
app:layout_constraintEnd_toStartOf="@+id/line_rank_pop"
|
app:layout_constraintEnd_toStartOf="@+id/line_finish_time"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintTop_toTopOf="parent" />
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
<include
|
<include
|
||||||
android:id="@+id/line_rank_pop"
|
android:id="@+id/line_finish_time"
|
||||||
layout="@layout/anchor_popular"
|
layout="@layout/anchor_popular"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
app:layout_constraintBottom_toBottomOf="parent"
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintStart_toEndOf="@+id/line_rank_class"
|
app:layout_constraintStart_toEndOf="@+id/line_finish_pop"
|
||||||
app:layout_constraintTop_toTopOf="parent" />
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
@@ -24,11 +24,39 @@
|
|||||||
app:exitAnim="@anim/slide_out_left"
|
app:exitAnim="@anim/slide_out_left"
|
||||||
app:popEnterAnim="@anim/slide_out_left_exit"
|
app:popEnterAnim="@anim/slide_out_left_exit"
|
||||||
app:popExitAnim="@anim/slide_in_right_exit" />
|
app:popExitAnim="@anim/slide_in_right_exit" />
|
||||||
|
<action
|
||||||
|
android:id="@+id/action_nav_home_to_nav_topic"
|
||||||
|
app:destination="@id/nav_topic"
|
||||||
|
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
|
||||||
|
android:id="@+id/action_nav_home_to_nav_recommend"
|
||||||
|
app:destination="@id/nav_recommend"
|
||||||
|
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
|
||||||
|
android:id="@+id/action_nav_home_to_nav_newest"
|
||||||
|
app:destination="@id/nav_newest"
|
||||||
|
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
|
||||||
|
android:id="@+id/action_nav_home_to_nav_finish"
|
||||||
|
app:destination="@id/nav_finish"
|
||||||
|
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"/>
|
||||||
</fragment>
|
</fragment>
|
||||||
|
|
||||||
<fragment
|
<fragment
|
||||||
android:id="@+id/nav_sort"
|
android:id="@+id/nav_sort"
|
||||||
android:name="top.fumiama.copymanga.ui.sort.SortFragment"
|
android:name="top.fumiama.copymanga.ui.cardflow.sort.SortFragment"
|
||||||
android:label="@string/menu_sort"
|
android:label="@string/menu_sort"
|
||||||
tools:layout="@layout/fragment_sort" >
|
tools:layout="@layout/fragment_sort" >
|
||||||
<action
|
<action
|
||||||
@@ -136,6 +164,62 @@
|
|||||||
tools:layout="@layout/fragment_chapters" >
|
tools:layout="@layout/fragment_chapters" >
|
||||||
</fragment>
|
</fragment>
|
||||||
|
|
||||||
|
<fragment
|
||||||
|
android:id="@+id/nav_topic"
|
||||||
|
android:name="top.fumiama.copymanga.ui.cardflow.topic.TopicFragment"
|
||||||
|
android:label="@string/page_topic"
|
||||||
|
tools:layout="@layout/fragment_topic" >
|
||||||
|
<action
|
||||||
|
android:id="@+id/action_nav_topic_to_nav_book"
|
||||||
|
app:destination="@id/nav_book"
|
||||||
|
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"/>
|
||||||
|
</fragment>
|
||||||
|
|
||||||
|
<fragment
|
||||||
|
android:id="@+id/nav_recommend"
|
||||||
|
android:name="top.fumiama.copymanga.ui.cardflow.recommend.RecFragment"
|
||||||
|
android:label="@string/manga_rec"
|
||||||
|
tools:layout="@layout/fragment_recommend" >
|
||||||
|
<action
|
||||||
|
android:id="@+id/action_nav_recommend_to_nav_book"
|
||||||
|
app:destination="@id/nav_book"
|
||||||
|
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"/>
|
||||||
|
</fragment>
|
||||||
|
|
||||||
|
<fragment
|
||||||
|
android:id="@+id/nav_newest"
|
||||||
|
android:name="top.fumiama.copymanga.ui.cardflow.newest.NewestFragment"
|
||||||
|
android:label="@string/new_list"
|
||||||
|
tools:layout="@layout/fragment_newest" >
|
||||||
|
<action
|
||||||
|
android:id="@+id/action_nav_newest_to_nav_book"
|
||||||
|
app:destination="@id/nav_book"
|
||||||
|
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"/>
|
||||||
|
</fragment>
|
||||||
|
|
||||||
|
<fragment
|
||||||
|
android:id="@+id/nav_finish"
|
||||||
|
android:name="top.fumiama.copymanga.ui.cardflow.finish.FinishFragment"
|
||||||
|
android:label="@string/complete"
|
||||||
|
tools:layout="@layout/fragment_newest" >
|
||||||
|
<action
|
||||||
|
android:id="@+id/action_nav_finish_to_nav_book"
|
||||||
|
app:destination="@id/nav_book"
|
||||||
|
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"/>
|
||||||
|
</fragment>
|
||||||
|
|
||||||
<fragment
|
<fragment
|
||||||
android:id="@+id/nav_group"
|
android:id="@+id/nav_group"
|
||||||
android:name="top.fumiama.copymanga.ui.comicdl.ComicDlFragment"
|
android:name="top.fumiama.copymanga.ui.comicdl.ComicDlFragment"
|
||||||
|
|||||||
@@ -15,6 +15,7 @@
|
|||||||
<string name="page_book">图书详情</string>
|
<string name="page_book">图书详情</string>
|
||||||
<string name="page_chapter">章节内容</string>
|
<string name="page_chapter">章节内容</string>
|
||||||
<string name="page_group">漫画下载</string>
|
<string name="page_group">漫画下载</string>
|
||||||
|
<string name="page_topic">专题系列</string>
|
||||||
<string name="check_update">检查更新</string>
|
<string name="check_update">检查更新</string>
|
||||||
|
|
||||||
<string name="navTextInfo">illust: Hiten(490219)</string>
|
<string name="navTextInfo">illust: Hiten(490219)</string>
|
||||||
@@ -38,6 +39,11 @@
|
|||||||
<string name="groupInfoApiUrl">https://api.copymanga.com/api/v3/comic/%1$s/group/%2$s/chapters?limit=100&offset=%3$d</string>
|
<string name="groupInfoApiUrl">https://api.copymanga.com/api/v3/comic/%1$s/group/%2$s/chapters?limit=100&offset=%3$d</string>
|
||||||
<string name="chapterInfoApiUrl">https://api.copymanga.com/api/v3/comic/%1$s/chapter2/%2$s</string>
|
<string name="chapterInfoApiUrl">https://api.copymanga.com/api/v3/comic/%1$s/chapter2/%2$s</string>
|
||||||
<string name="chapterTxtUrl">https://nnv3api.dmzj1.com/novel/download/%1$d_%2$d_%3$d.txt</string>
|
<string name="chapterTxtUrl">https://nnv3api.dmzj1.com/novel/download/%1$d_%2$d_%3$d.txt</string>
|
||||||
|
<string name="topicApiUrl">https://api.copymanga.com/api/v3/topic/%1$s</string>
|
||||||
|
<string name="topicContentApiUrl">https://api.copymanga.com/api/v3/topic/%1$s/contents?type=%2$d&limit=21&offset=%3$d</string>
|
||||||
|
<string name="recommendApiUrl">https://api.copymanga.com/api/v3/recs?pos=3200102&limit=21&offset=%1$d</string>
|
||||||
|
<string name="newestApiUrl">https://api.copymanga.com/api/v3/update/newest?limit=21&offset=%1$d</string>
|
||||||
|
<string name="finishApiUrl">https://api.copymanga.com/api/v3/comics?limit=21&offset=%1$d&ordering=%2$s&top=finish</string>
|
||||||
|
|
||||||
<string name="complete">已完结</string>
|
<string name="complete">已完结</string>
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user