1
0
mirror of https://github.com/fumiama/copymanga.git synced 2026-06-05 07:20:23 +08:00

2.0.beta3

1. 修复增加卡片错误
2. 增加专题、漫画推荐、全新上架、已完结的详情页
This commit is contained in:
fumiama
2021-05-07 20:47:01 +08:00
parent be810e1408
commit 3faacae2da
22 changed files with 432 additions and 48 deletions

View File

@@ -28,8 +28,8 @@ android {
applicationId 'top.fumiama.copymanga'
minSdkVersion 23
targetSdkVersion 30
versionCode 13
versionName '2.0.beta2'
versionCode 14
versionName '2.0.beta3'
resConfigs "zh", "zh-rCN"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"

View File

@@ -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;
}
}

View File

@@ -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;
}
}

View File

@@ -48,17 +48,19 @@ class CardList(
recycleOneRow(it)
}
}
private fun recycleOneRow(v:View?){
if(index < 20) rows[index] = v
else{
val relativeIndex = index++ % 20
if(rows[relativeIndex] == null) rows[relativeIndex] = v
else {
val victim = rows[relativeIndex]
mainWeakReference?.get()?.runOnUiThread {
that?.mydll?.removeView(rows[index % 20])
//zis.mys?.scrollY = zis.mys?.scrollY?.minus(cardHeight + 16)?:0
that?.apply {
mydll?.removeView(victim)
mys?.scrollY = that.mys?.scrollY?.minus(cardHeight + 16)?:0
}
}
rows[index % 20] = v
rows[relativeIndex] = v
}
index++
}
@ExperimentalStdlibApi

View File

@@ -8,12 +8,13 @@ import androidx.navigation.Navigation
import com.google.gson.Gson
import top.fumiama.dmzj.copymanga.R
import top.fumiama.copymanga.json.BookListStructure
import top.fumiama.copymanga.json.TypeBookListStructure
import top.fumiama.copymanga.tools.DownloadTools
import java.io.File
import java.lang.ref.WeakReference
@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()
init {
@@ -24,13 +25,27 @@ open class InfoCardLoader(inflateRes:Int, private val navId:Int): MangaPagesFrag
page = 0
isRefresh = false
}
val bookList = Gson().fromJson(it?.decodeToString(), BookListStructure::class.java)
bookList?.let {
if(it.code == 200) it.results.list?.forEach{ book ->
cardList.addCard(book.name, null, book.cover, book.path_word, null, null, false)
if(isTypeBook) {
val bookList = Gson().fromJson(it?.decodeToString(), TypeBookListStructure::class.java)
bookList?.apply {
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()
}.start()
}

View File

@@ -100,18 +100,18 @@ class BookHandler(that: WeakReference<BookFragment>, path: String)
}
private fun setCover(){
that?.let {
it.fbl.addView(fbibinfo)
val load = Glide.with(it).load(
that?.apply {
fbl.addView(fbibinfo)
val load = Glide.with(this).load(
GlideUrl(book?.results?.comic?.cover, CMApi.myGlideHeaders)
).timeout(10000)
load.into(it.imic)
it.context?.let { it1 -> GlideBlurTransformation(it1) }
load.into(imic)
context?.let { it1 -> GlideBlurTransformation(it1) }
?.let { it2 -> RequestOptions.bitmapTransform(it2) }
?.let { it3 -> load.apply(it3).into(it.lbibg) }
it.imf.visibility = View.GONE
?.let { it3 -> load.apply(it3).into(lbibg) }
imf.visibility = View.GONE
fbl.addView(divider)
}
that?.fbl?.addView(divider)
}
private fun getThemeSeq(authors: Array<ThemeStructure>): CharSequence{

View File

@@ -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()
}
}
}
}

View File

@@ -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
}
}
}

View File

@@ -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
}
}
}

View File

@@ -1,4 +1,4 @@
package top.fumiama.copymanga.ui.sort
package top.fumiama.copymanga.ui.cardflow.sort
import android.animation.ObjectAnimator
import android.view.View

View File

@@ -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
}
}
}

View File

@@ -110,7 +110,7 @@ class HomeHandler(that: WeakReference<HomeFragment>) :AutoDownloadHandler(
newComic.path_word = topic.path_word
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
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
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
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 c = comics.size / 3
homeF?.layoutInflater?.inflate(
@@ -246,12 +252,13 @@ class HomeHandler(that: WeakReference<HomeFragment>) :AutoDownloadHandler(
2 -> R.layout.line_2bookline
3 -> R.layout.line_3bookline
else -> return -1
}, homeF.fhl, false)?.let {
scanCards(it, comics, finish)
it.rttitle.text = title
it.ir.setImageResource(iconResId)
setLineHeight(it, c)
indexLines += it
}, homeF.fhl, false)?.apply {
scanCards(this, comics, finish, isTopic)
rttitle.text = title
ir.setImageResource(iconResId)
setLineHeight(this, c)
if(onClick != null) setOnClickListener { onClick() }
indexLines += this
}
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 card = v.findViewById<ConstraintLayout>(id)
for (data in comics){
@@ -288,13 +295,14 @@ class HomeHandler(that: WeakReference<HomeFragment>) :AutoDownloadHandler(
data.path_word,
data.name,
data.cover,
finish
finish,
isTopic
)
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
homeF?.let {
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 {
val bundle = Bundle()
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) }
}
}

View File

@@ -5,7 +5,6 @@ import androidx.fragment.app.Fragment
import com.github.zawadz88.materialpopupmenu.popupMenu
import com.google.gson.Gson
import kotlinx.android.synthetic.main.anchor_popular.view.*
import kotlinx.android.synthetic.main.line_rank.*
import top.fumiama.dmzj.copymanga.R
import top.fumiama.copymanga.json.FilterStructure
import top.fumiama.copymanga.template.InfoCardLoader

View 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>

View 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>

View File

@@ -8,7 +8,7 @@
<include
android:id="@+id/frlai"
layout="@layout/line_rank"
layout="@layout/line_finish"
android:layout_width="0dp"
android:layout_height="wrap_content"
app:layout_constraintEnd_toEndOf="parent"

View 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>

View File

@@ -4,7 +4,7 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="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
android:id="@+id/fslai"

View 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>

View File

@@ -11,25 +11,25 @@
android:layout_marginTop="@dimen/nav_header_vertical_spacing"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/line_rank_class" />
app:layout_constraintTop_toBottomOf="@+id/line_finish_pop" />
<include
android:id="@+id/line_rank_class"
android:id="@+id/line_finish_pop"
layout="@layout/anchor_popular"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
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_constraintTop_toTopOf="parent" />
<include
android:id="@+id/line_rank_pop"
android:id="@+id/line_finish_time"
layout="@layout/anchor_popular"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="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" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -24,11 +24,39 @@
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_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
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"
tools:layout="@layout/fragment_sort" >
<action
@@ -136,6 +164,62 @@
tools:layout="@layout/fragment_chapters" >
</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
android:id="@+id/nav_group"
android:name="top.fumiama.copymanga.ui.comicdl.ComicDlFragment"

View File

@@ -15,6 +15,7 @@
<string name="page_book">图书详情</string>
<string name="page_chapter">章节内容</string>
<string name="page_group">漫画下载</string>
<string name="page_topic">专题系列</string>
<string name="check_update">检查更新</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&amp;offset=%3$d</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="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&amp;limit=21&amp;offset=%3$d</string>
<string name="recommendApiUrl">https://api.copymanga.com/api/v3/recs?pos=3200102&amp;limit=21&amp;offset=%1$d</string>
<string name="newestApiUrl">https://api.copymanga.com/api/v3/update/newest?limit=21&amp;offset=%1$d</string>
<string name="finishApiUrl">https://api.copymanga.com/api/v3/comics?limit=21&amp;offset=%1$d&amp;ordering=%2$s&amp;top=finish</string>
<string name="complete">已完结</string>