1
0
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:
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' 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"

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

View File

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

View File

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

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.animation.ObjectAnimator
import android.view.View 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 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) }
} }
} }

View File

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

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

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

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

View File

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

View File

@@ -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&amp;offset=%3$d</string> <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="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&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> <string name="complete">已完结</string>