mirror of
https://github.com/fumiama/copymanga.git
synced 2026-06-23 11:00:24 +08:00
v2.0.beta22
新增 1. 浏览漫画的加载提示 2. 设置->网络->总是使用流量观看 3. 加入书架(但是还不能删除) 修复 1. 进入排行时快速切换tab闪退 2. 详情页点击章节非第一组时错位到第一组(fix #33) 3. 快速多次点击某些按钮后闪退
This commit is contained in:
1
.idea/dictionaries/fumiama.xml
generated
1
.idea/dictionaries/fumiama.xml
generated
@@ -2,6 +2,7 @@
|
|||||||
<dictionary name="fumiama">
|
<dictionary name="fumiama">
|
||||||
<words>
|
<words>
|
||||||
<w>lowpan</w>
|
<w>lowpan</w>
|
||||||
|
<w>nisi</w>
|
||||||
</words>
|
</words>
|
||||||
</dictionary>
|
</dictionary>
|
||||||
</component>
|
</component>
|
||||||
@@ -8,8 +8,8 @@ android {
|
|||||||
applicationId 'top.fumiama.copymanga'
|
applicationId 'top.fumiama.copymanga'
|
||||||
minSdkVersion 23
|
minSdkVersion 23
|
||||||
targetSdkVersion 33
|
targetSdkVersion 33
|
||||||
versionCode 33
|
versionCode 34
|
||||||
versionName '2.0.beta21'
|
versionName '2.0.beta22'
|
||||||
resConfigs 'zh', 'zh-rCN'
|
resConfigs 'zh', 'zh-rCN'
|
||||||
|
|
||||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||||
|
|||||||
@@ -40,6 +40,8 @@ import com.yalantis.ucrop.UCrop
|
|||||||
import kotlinx.android.synthetic.main.activity_main.*
|
import kotlinx.android.synthetic.main.activity_main.*
|
||||||
import kotlinx.android.synthetic.main.app_bar_main.*
|
import kotlinx.android.synthetic.main.app_bar_main.*
|
||||||
import kotlinx.android.synthetic.main.nav_header_main.*
|
import kotlinx.android.synthetic.main.nav_header_main.*
|
||||||
|
import top.fumiama.copymanga.manga.Shelf
|
||||||
|
import top.fumiama.copymanga.tools.api.CMApi
|
||||||
import top.fumiama.dmzj.copymanga.R
|
import top.fumiama.dmzj.copymanga.R
|
||||||
import top.fumiama.copymanga.tools.api.UITools
|
import top.fumiama.copymanga.tools.api.UITools
|
||||||
import top.fumiama.copymanga.ui.book.BookFragment.Companion.bookHandler
|
import top.fumiama.copymanga.ui.book.BookFragment.Companion.bookHandler
|
||||||
@@ -361,5 +363,16 @@ class MainActivity : AppCompatActivity() {
|
|||||||
var mainWeakReference: WeakReference<MainActivity>? = null
|
var mainWeakReference: WeakReference<MainActivity>? = null
|
||||||
var ime: InputMethodManager? = null
|
var ime: InputMethodManager? = null
|
||||||
const val MSG_CROP_IMAGE = 1
|
const val MSG_CROP_IMAGE = 1
|
||||||
|
var shelf: Shelf? = null
|
||||||
|
get() {
|
||||||
|
if (field != null) return field
|
||||||
|
return mainWeakReference?.get()?.let {
|
||||||
|
field = Shelf(
|
||||||
|
it.getPreferences(Context.MODE_PRIVATE).getString("token", "")?:return@let null,
|
||||||
|
it.getString(R.string.shelfOperateApiUrl).format(CMApi.myHostApiUrl), it.getString(R.string.referer), it.getString(R.string.pc_ua)
|
||||||
|
)
|
||||||
|
field
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -9,12 +9,13 @@ import top.fumiama.copymanga.ui.vm.ViewMangaActivity
|
|||||||
|
|
||||||
object Reader {
|
object Reader {
|
||||||
fun viewMangaAt(name: String, pos: Int, from_first_page: Boolean = false) {
|
fun viewMangaAt(name: String, pos: Int, from_first_page: Boolean = false) {
|
||||||
|
Log.d("MyR", "viewMangaAt name $name, pos $pos")
|
||||||
mainWeakReference?.get()?.apply {
|
mainWeakReference?.get()?.apply {
|
||||||
getPreferences(Context.MODE_PRIVATE)?.edit {
|
getPreferences(Context.MODE_PRIVATE)?.edit {
|
||||||
putInt(name, pos)
|
putInt(name, pos)
|
||||||
apply()
|
apply()
|
||||||
Log.d("MyR", "记录 $name 阅读到第 ${pos+1} 话")
|
Log.d("MyR", "记录 $name 阅读到第 ${pos+1} 话")
|
||||||
}?: Log.d("MyR", "无法获得main pref")
|
}?: Log.d("MyR", "无法获得 main pref")
|
||||||
ViewMangaActivity.dlhandler = null
|
ViewMangaActivity.dlhandler = null
|
||||||
ViewMangaActivity.position = pos
|
ViewMangaActivity.position = pos
|
||||||
ViewMangaActivity.comicName = name
|
ViewMangaActivity.comicName = name
|
||||||
|
|||||||
44
app/src/main/java/top/fumiama/copymanga/manga/Shelf.kt
Normal file
44
app/src/main/java/top/fumiama/copymanga/manga/Shelf.kt
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
package top.fumiama.copymanga.manga
|
||||||
|
|
||||||
|
import android.content.SharedPreferences
|
||||||
|
import com.google.gson.Gson
|
||||||
|
import top.fumiama.copymanga.json.ReturnBase
|
||||||
|
import top.fumiama.copymanga.tools.http.DownloadTools
|
||||||
|
|
||||||
|
class Shelf(private val token: String, private val apiUrl: String, private val referer: String, private val ua: String) {
|
||||||
|
fun add(comicId: String): String {
|
||||||
|
if (comicId.isEmpty()) {
|
||||||
|
return "空漫画ID"
|
||||||
|
}
|
||||||
|
val body = buildString {
|
||||||
|
append("comic_id=")
|
||||||
|
append(comicId)
|
||||||
|
append("&is_collect=1&authorization=Token+")
|
||||||
|
append("")
|
||||||
|
append(token)
|
||||||
|
}
|
||||||
|
val re = DownloadTools.requestWithBody(
|
||||||
|
"$apiUrl?platform=3", "POST", body.encodeToByteArray(), referer, ua
|
||||||
|
)?.decodeToString() ?: return "空回应"
|
||||||
|
return Gson().fromJson(re, ReturnBase::class.java).message
|
||||||
|
}
|
||||||
|
|
||||||
|
fun del(vararg bookIds: Int): String {
|
||||||
|
if (bookIds.isEmpty()) {
|
||||||
|
return "空ID列表"
|
||||||
|
}
|
||||||
|
val body = buildString {
|
||||||
|
bookIds.forEach {
|
||||||
|
append("ids=")
|
||||||
|
append(it)
|
||||||
|
append("&")
|
||||||
|
}
|
||||||
|
append("authorization=Token+")
|
||||||
|
append(token)
|
||||||
|
}
|
||||||
|
val re = DownloadTools.requestWithBody(
|
||||||
|
"${apiUrl}s?platform=3", "DELETE", body.encodeToByteArray(), referer, ua
|
||||||
|
)?.decodeToString() ?: return "空回应"
|
||||||
|
return Gson().fromJson(re, ReturnBase::class.java).message
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -36,27 +36,31 @@ class CardList(
|
|||||||
exitCardList = false
|
exitCardList = false
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun manageRow(){
|
private fun manageRow() {
|
||||||
if(!exitCardList && count++ % cardPerRow == 0) inflateRow()
|
if(!exitCardList && count++ % cardPerRow == 0) inflateRow()
|
||||||
Log.d("MyCL", "index: $index, cardPR: $cardPerRow")
|
Log.d("MyCL", "index: $index, cardPR: $cardPerRow")
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun inflateRow(){
|
private fun inflateRow(){
|
||||||
that?.layoutInflater?.inflate(R.layout.line_horizonal_empty, that.mydll, false)?.let {
|
that?.layoutInflater?.inflate(R.layout.line_horizonal_empty, that.mydll, false)?.let {
|
||||||
|
if(exitCardList) return
|
||||||
it.layoutParams.height = cardHeight + 16
|
it.layoutParams.height = cardHeight + 16
|
||||||
mainWeakReference?.get()?.runOnUiThread {
|
mainWeakReference?.get()?.runOnUiThread {
|
||||||
if(!exitCardList) that.mydll.addView(it)
|
if(exitCardList) return@runOnUiThread
|
||||||
|
that.mydll.addView(it)
|
||||||
}
|
}
|
||||||
if(!exitCardList) recycleOneRow(it)
|
recycleOneRow(it)
|
||||||
|
index++
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
private fun recycleOneRow(v:View?){
|
private fun recycleOneRow(v:View?){
|
||||||
val relativeIndex = index++ % 20
|
val relativeIndex = index % 20
|
||||||
if(rows[relativeIndex] == null) rows[relativeIndex] = v
|
if(rows[relativeIndex] == null) rows[relativeIndex] = v
|
||||||
else {
|
else {
|
||||||
val victim = rows[relativeIndex]
|
val victim = rows[relativeIndex]
|
||||||
mainWeakReference?.get()?.runOnUiThread {
|
mainWeakReference?.get()?.runOnUiThread {
|
||||||
if(!exitCardList) that?.apply {
|
if(exitCardList) return@runOnUiThread
|
||||||
|
that?.apply {
|
||||||
mydll?.removeView(victim)
|
mydll?.removeView(victim)
|
||||||
mys?.scrollY = that.mys?.scrollY?.minus(cardHeight + 16)?:0
|
mys?.scrollY = that.mys?.scrollY?.minus(cardHeight + 16)?:0
|
||||||
}
|
}
|
||||||
@@ -67,8 +71,9 @@ class CardList(
|
|||||||
|
|
||||||
@ExperimentalStdlibApi
|
@ExperimentalStdlibApi
|
||||||
fun addCard(name: String, append: String? = null, head: String? = null, path: String? = null, chapterUUID: String? = null, pn: Int? = null, isFinish: Boolean = false){
|
fun addCard(name: String, append: String? = null, head: String? = null, path: String? = null, chapterUUID: String? = null, pn: Int? = null, isFinish: Boolean = false){
|
||||||
if(!exitCardList) manageRow()
|
if(exitCardList) return
|
||||||
if(!exitCardList) that?.layoutInflater?.inflate(R.layout.card_book, that.mydll.ltbtn, false)?.let {
|
manageRow()
|
||||||
|
that?.layoutInflater?.inflate(R.layout.card_book, that.mydll.ltbtn, false)?.let {
|
||||||
val card = it.cic
|
val card = it.cic
|
||||||
card.name = name
|
card.name = name
|
||||||
card.append = append
|
card.append = append
|
||||||
@@ -79,7 +84,8 @@ class CardList(
|
|||||||
card.pageNumber = pn
|
card.pageNumber = pn
|
||||||
card.isFinish = isFinish
|
card.isFinish = isFinish
|
||||||
mainWeakReference?.get()?.runOnUiThread{
|
mainWeakReference?.get()?.runOnUiThread{
|
||||||
if(!exitCardList) addCard(it)
|
if(exitCardList) return@runOnUiThread
|
||||||
|
addCard(it)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -87,21 +93,22 @@ class CardList(
|
|||||||
@ExperimentalStdlibApi
|
@ExperimentalStdlibApi
|
||||||
fun addCard(cardFrame: View) {
|
fun addCard(cardFrame: View) {
|
||||||
val card = cardFrame.cic
|
val card = cardFrame.cic
|
||||||
|
if (card.index < 0) return
|
||||||
val name = card.name + (card.append?:"")
|
val name = card.name + (card.append?:"")
|
||||||
val head = card.headImageUrl
|
val head = card.headImageUrl
|
||||||
val file = File(that?.context?.getExternalFilesDir(""), card.name)
|
val file = File(that?.context?.getExternalFilesDir(""), card.name)
|
||||||
if(!exitCardList) cardFrame.let {
|
if(exitCardList) return
|
||||||
|
cardFrame.let {
|
||||||
it.tic.text = name
|
it.tic.text = name
|
||||||
if(!file.exists()){
|
if(!file.exists()){
|
||||||
if(head != null) {
|
if(head != null) {
|
||||||
that?.context?.let { context ->
|
that?.context?.let { context ->
|
||||||
if(!exitCardList)
|
Glide.with(context).load(
|
||||||
Glide.with(context).load(
|
GlideUrl(CMApi.proxy?.wrap(head)?:head, CMApi.myGlideHeaders)
|
||||||
GlideUrl(CMApi.proxy?.wrap(head)?:head, CMApi.myGlideHeaders)
|
).into(it.imic)
|
||||||
).into(it.imic)
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if(!exitCardList) it.imic.setImageResource(R.drawable.img_defmask)
|
it.imic.setImageResource(R.drawable.img_defmask)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
val img = File(file, "head.jpg")
|
val img = File(file, "head.jpg")
|
||||||
@@ -110,8 +117,8 @@ class CardList(
|
|||||||
if(card.isFinish) it.sgnic.visibility = View.VISIBLE
|
if(card.isFinish) it.sgnic.visibility = View.VISIBLE
|
||||||
initClickListeners?.prepareListeners(card, card.name, card.path, card.chapterUUID, card.pageNumber)
|
initClickListeners?.prepareListeners(card, card.name, card.path, card.chapterUUID, card.pageNumber)
|
||||||
rows[card.index % 20]?.ltbtn?.addView(it)
|
rows[card.index % 20]?.ltbtn?.addView(it)
|
||||||
it.layoutParams.height = cardHeight
|
it.layoutParams?.height = cardHeight
|
||||||
it.layoutParams.width = cardWidth
|
it.layoutParams?.width = cardWidth
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
interface InitClickListeners{
|
interface InitClickListeners{
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ import top.fumiama.copymanga.json.ShelfStructure
|
|||||||
import top.fumiama.copymanga.json.TypeBookListStructure
|
import top.fumiama.copymanga.json.TypeBookListStructure
|
||||||
import top.fumiama.copymanga.template.general.MangaPagesFragmentTemplate
|
import top.fumiama.copymanga.template.general.MangaPagesFragmentTemplate
|
||||||
import top.fumiama.copymanga.template.http.AutoDownloadThread
|
import top.fumiama.copymanga.template.http.AutoDownloadThread
|
||||||
|
import top.fumiama.copymanga.tools.api.Navigate
|
||||||
import java.lang.ref.WeakReference
|
import java.lang.ref.WeakReference
|
||||||
|
|
||||||
@ExperimentalStdlibApi
|
@ExperimentalStdlibApi
|
||||||
@@ -101,7 +102,7 @@ open class InfoCardLoader(inflateRes:Int, private val navId:Int, private val isT
|
|||||||
v.setOnClickListener {
|
v.setOnClickListener {
|
||||||
val bundle = Bundle()
|
val bundle = Bundle()
|
||||||
bundle.putString("path", path)
|
bundle.putString("path", path)
|
||||||
findNavController().navigate(navId, bundle)
|
Navigate.safeNavigateTo(findNavController(), navId, bundle)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
17
app/src/main/java/top/fumiama/copymanga/tools/api/Font.kt
Normal file
17
app/src/main/java/top/fumiama/copymanga/tools/api/Font.kt
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
package top.fumiama.copymanga.tools.api
|
||||||
|
|
||||||
|
import android.graphics.Typeface
|
||||||
|
import androidx.core.content.res.ResourcesCompat
|
||||||
|
import top.fumiama.copymanga.MainActivity
|
||||||
|
import top.fumiama.dmzj.copymanga.R
|
||||||
|
|
||||||
|
object Font {
|
||||||
|
var nisiTypeFace: Typeface? = null
|
||||||
|
get() {
|
||||||
|
if (field != null) return field
|
||||||
|
field = MainActivity.mainWeakReference?.get()?.let {
|
||||||
|
ResourcesCompat.getFont(it.applicationContext, R.font.nisi)
|
||||||
|
}
|
||||||
|
return field
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
package top.fumiama.copymanga.tools.api
|
||||||
|
|
||||||
|
import android.os.Bundle
|
||||||
|
import androidx.navigation.NavController
|
||||||
|
|
||||||
|
object Navigate {
|
||||||
|
fun safeNavigateTo(navController: NavController, id: Int, bundle: Bundle? = null) {
|
||||||
|
navController.currentDestination?.getAction(id)?.let {
|
||||||
|
navController.navigate(id, bundle)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -3,6 +3,7 @@ package top.fumiama.copymanga.tools.http
|
|||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
import androidx.preference.PreferenceManager
|
import androidx.preference.PreferenceManager
|
||||||
|
import okhttp3.RequestBody
|
||||||
import top.fumiama.copymanga.MainActivity
|
import top.fumiama.copymanga.MainActivity
|
||||||
import top.fumiama.dmzj.copymanga.R
|
import top.fumiama.dmzj.copymanga.R
|
||||||
import java.net.HttpURLConnection
|
import java.net.HttpURLConnection
|
||||||
@@ -129,4 +130,28 @@ object DownloadTools {
|
|||||||
return@replace URLEncoder.encode(match.value, "UTF-8")
|
return@replace URLEncoder.encode(match.value, "UTF-8")
|
||||||
}
|
}
|
||||||
}*/
|
}*/
|
||||||
|
|
||||||
|
fun requestWithBody(url: String, method: String, body: ByteArray, refer: String? = null, ua: String? = null): ByteArray? {
|
||||||
|
Log.d("Mydl", "$method Http: $url")
|
||||||
|
var ret: ByteArray? = null
|
||||||
|
val task = FutureTask(Callable {
|
||||||
|
try {
|
||||||
|
getConnection(url, method, refer, ua)?.apply {
|
||||||
|
outputStream.write(body)
|
||||||
|
ret = inputStream.readBytes()
|
||||||
|
disconnect()
|
||||||
|
}
|
||||||
|
} catch (ex: Exception) {
|
||||||
|
ex.printStackTrace()
|
||||||
|
}
|
||||||
|
return@Callable ret
|
||||||
|
})
|
||||||
|
Thread(task).start()
|
||||||
|
return try {
|
||||||
|
task.get()
|
||||||
|
} catch (ex: Exception) {
|
||||||
|
ex.printStackTrace()
|
||||||
|
null
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,11 +3,14 @@ package top.fumiama.copymanga.ui.book
|
|||||||
import android.content.Context.MODE_PRIVATE
|
import android.content.Context.MODE_PRIVATE
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.View
|
import android.view.View
|
||||||
|
import android.widget.Toast
|
||||||
import androidx.navigation.fragment.findNavController
|
import androidx.navigation.fragment.findNavController
|
||||||
import kotlinx.android.synthetic.main.line_booktandb.*
|
import kotlinx.android.synthetic.main.line_booktandb.*
|
||||||
|
import top.fumiama.copymanga.MainActivity
|
||||||
import top.fumiama.copymanga.MainActivity.Companion.mainWeakReference
|
import top.fumiama.copymanga.MainActivity.Companion.mainWeakReference
|
||||||
import top.fumiama.copymanga.manga.Reader
|
import top.fumiama.copymanga.manga.Reader
|
||||||
import top.fumiama.copymanga.template.general.NoBackRefreshFragment
|
import top.fumiama.copymanga.template.general.NoBackRefreshFragment
|
||||||
|
import top.fumiama.copymanga.tools.api.Navigate
|
||||||
import top.fumiama.copymanga.ui.comicdl.ComicDlFragment
|
import top.fumiama.copymanga.ui.comicdl.ComicDlFragment
|
||||||
import top.fumiama.dmzj.copymanga.R
|
import top.fumiama.dmzj.copymanga.R
|
||||||
import java.lang.Thread.sleep
|
import java.lang.Thread.sleep
|
||||||
@@ -68,6 +71,20 @@ class BookFragment: NoBackRefreshFragment(R.layout.fragment_book) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun setAddToShelf() {
|
||||||
|
if(bookHandler?.chapterNames?.isNotEmpty() == true)
|
||||||
|
bookHandler?.book?.results?.comic?.let { comic ->
|
||||||
|
this@BookFragment.lbbsub.setOnClickListener {
|
||||||
|
Thread{
|
||||||
|
val re = MainActivity.shelf?.add(comic.uuid)
|
||||||
|
mainWeakReference?.get()?.runOnUiThread {
|
||||||
|
Toast.makeText(context, re, Toast.LENGTH_SHORT).show()
|
||||||
|
}
|
||||||
|
}.start()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fun navigate2dl(){
|
fun navigate2dl(){
|
||||||
val bundle = Bundle()
|
val bundle = Bundle()
|
||||||
bundle.putString("path", arguments?.getString("path")?:"null")
|
bundle.putString("path", arguments?.getString("path")?:"null")
|
||||||
@@ -78,7 +95,9 @@ class BookFragment: NoBackRefreshFragment(R.layout.fragment_book) {
|
|||||||
bundle.putStringArray("group", bookHandler!!.gpws)
|
bundle.putStringArray("group", bookHandler!!.gpws)
|
||||||
bundle.putStringArray("groupNames", bookHandler!!.keys)
|
bundle.putStringArray("groupNames", bookHandler!!.keys)
|
||||||
bundle.putIntArray("count", bookHandler!!.cnts)
|
bundle.putIntArray("count", bookHandler!!.cnts)
|
||||||
findNavController().navigate(R.id.action_nav_book_to_nav_group, bundle)
|
findNavController().let {
|
||||||
|
Navigate.safeNavigateTo(it, R.id.action_nav_book_to_nav_group, bundle)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
|
|||||||
@@ -34,6 +34,7 @@ import top.fumiama.copymanga.template.http.AutoDownloadHandler
|
|||||||
import top.fumiama.copymanga.template.http.AutoDownloadThread
|
import top.fumiama.copymanga.template.http.AutoDownloadThread
|
||||||
import top.fumiama.copymanga.tools.api.CMApi
|
import top.fumiama.copymanga.tools.api.CMApi
|
||||||
import top.fumiama.copymanga.tools.api.GlideBlurTransformation
|
import top.fumiama.copymanga.tools.api.GlideBlurTransformation
|
||||||
|
import top.fumiama.copymanga.tools.api.Navigate
|
||||||
import top.fumiama.copymanga.ui.comicdl.ComicDlFragment
|
import top.fumiama.copymanga.ui.comicdl.ComicDlFragment
|
||||||
import top.fumiama.copymanga.ui.comicdl.ComicDlFragment.Companion.json
|
import top.fumiama.copymanga.ui.comicdl.ComicDlFragment.Companion.json
|
||||||
import top.fumiama.copymanga.ui.vm.ViewMangaActivity
|
import top.fumiama.copymanga.ui.vm.ViewMangaActivity
|
||||||
@@ -113,6 +114,7 @@ class BookHandler(private val th: WeakReference<BookFragment>, private val path:
|
|||||||
that?.fbloading?.visibility = View.GONE
|
that?.fbloading?.visibility = View.GONE
|
||||||
complete = true
|
complete = true
|
||||||
that?.setStartRead()
|
that?.setStartRead()
|
||||||
|
that?.setAddToShelf()
|
||||||
Log.d("MyBH", "Set complete: true")
|
Log.d("MyBH", "Set complete: true")
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -224,6 +226,7 @@ class BookHandler(private val th: WeakReference<BookFragment>, private val path:
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun setThemes(){
|
private fun setThemes(){
|
||||||
|
if (exit) return
|
||||||
that?.apply {
|
that?.apply {
|
||||||
book?.results?.comic?.apply {
|
book?.results?.comic?.apply {
|
||||||
author?.let { setTheme(getString(R.string.author), it, R.id.action_nav_book_to_nav_author) }
|
author?.let { setTheme(getString(R.string.author), it, R.id.action_nav_book_to_nav_author) }
|
||||||
@@ -240,6 +243,7 @@ class BookHandler(private val th: WeakReference<BookFragment>, private val path:
|
|||||||
if(exit) return@runOnUiThread
|
if(exit) return@runOnUiThread
|
||||||
ViewMangaActivity.fileArray = arrayOf()
|
ViewMangaActivity.fileArray = arrayOf()
|
||||||
ViewMangaActivity.urlArray = arrayOf()
|
ViewMangaActivity.urlArray = arrayOf()
|
||||||
|
var i = 0
|
||||||
vols?.forEachIndexed { iv, v ->
|
vols?.forEachIndexed { iv, v ->
|
||||||
if(exit) return@runOnUiThread
|
if(exit) return@runOnUiThread
|
||||||
fbl.addView(layoutInflater.inflate(R.layout.div_h, fbl, false))
|
fbl.addView(layoutInflater.inflate(R.layout.div_h, fbl, false))
|
||||||
@@ -249,7 +253,7 @@ class BookHandler(private val th: WeakReference<BookFragment>, private val path:
|
|||||||
fbl.addView(layoutInflater.inflate(R.layout.div_h, fbl, false))
|
fbl.addView(layoutInflater.inflate(R.layout.div_h, fbl, false))
|
||||||
var line: View? = null
|
var line: View? = null
|
||||||
val last = v.results.list.size - 1
|
val last = v.results.list.size - 1
|
||||||
v.results.list.onEachIndexed { i, it ->
|
v.results.list.forEach {
|
||||||
ViewMangaActivity.urlArray += CMApi.getChapterInfoApiUrl(
|
ViewMangaActivity.urlArray += CMApi.getChapterInfoApiUrl(
|
||||||
comic.path_word,
|
comic.path_word,
|
||||||
it.uuid
|
it.uuid
|
||||||
@@ -261,22 +265,26 @@ class BookHandler(private val th: WeakReference<BookFragment>, private val path:
|
|||||||
line = layoutInflater.inflate(R.layout.line_chapter, that!!.fbl, false)
|
line = layoutInflater.inflate(R.layout.line_chapter, that!!.fbl, false)
|
||||||
line?.lcc?.apply {
|
line?.lcc?.apply {
|
||||||
lct.text = it.name
|
lct.text = it.name
|
||||||
setOnClickListener { Reader.viewMangaAt(book!!.results.comic.name, i) }
|
val index = i
|
||||||
|
setOnClickListener { Reader.viewMangaAt(book!!.results.comic.name, index) }
|
||||||
}
|
}
|
||||||
fbl?.addView(line)
|
fbl?.addView(line)
|
||||||
} else {
|
} else {
|
||||||
line = layoutInflater.inflate(R.layout.line_2chapters, that!!.fbl, false)
|
line = layoutInflater.inflate(R.layout.line_2chapters, that!!.fbl, false)
|
||||||
line?.l2cl?.apply {
|
line?.l2cl?.apply {
|
||||||
lct.text = it.name
|
lct.text = it.name
|
||||||
setOnClickListener { Reader.viewMangaAt(book!!.results.comic.name, i) }
|
val index = i
|
||||||
|
setOnClickListener { Reader.viewMangaAt(book!!.results.comic.name, index) }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else line?.l2cr?.apply {
|
} else line?.l2cr?.apply {
|
||||||
lct.text = it.name
|
lct.text = it.name
|
||||||
setOnClickListener { Reader.viewMangaAt(book!!.results.comic.name, i) }
|
val index = i
|
||||||
|
setOnClickListener { Reader.viewMangaAt(book!!.results.comic.name, index) }
|
||||||
fbl?.addView(line)
|
fbl?.addView(line)
|
||||||
line = null
|
line = null
|
||||||
}
|
}
|
||||||
|
i++
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
endSetLayouts()
|
endSetLayouts()
|
||||||
@@ -292,7 +300,7 @@ class BookHandler(private val th: WeakReference<BookFragment>, private val path:
|
|||||||
val bundle = Bundle()
|
val bundle = Bundle()
|
||||||
bundle.putString("name", name)
|
bundle.putString("name", name)
|
||||||
bundle.putString("path", path)
|
bundle.putString("path", path)
|
||||||
that?.apply { findNavController().navigate(nav, bundle) }
|
that?.apply { Navigate.safeNavigateTo(findNavController(), nav, bundle) }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ import kotlinx.android.synthetic.main.app_bar_main.*
|
|||||||
import kotlinx.android.synthetic.main.fragment_download.*
|
import kotlinx.android.synthetic.main.fragment_download.*
|
||||||
import top.fumiama.copymanga.MainActivity.Companion.mainWeakReference
|
import top.fumiama.copymanga.MainActivity.Companion.mainWeakReference
|
||||||
import top.fumiama.copymanga.template.general.NoBackRefreshFragment
|
import top.fumiama.copymanga.template.general.NoBackRefreshFragment
|
||||||
|
import top.fumiama.copymanga.tools.api.Navigate
|
||||||
import top.fumiama.copymanga.ui.comicdl.ComicDlFragment
|
import top.fumiama.copymanga.ui.comicdl.ComicDlFragment
|
||||||
import top.fumiama.copymanga.ui.vm.ViewMangaActivity
|
import top.fumiama.copymanga.ui.vm.ViewMangaActivity
|
||||||
import top.fumiama.dmzj.copymanga.R
|
import top.fumiama.dmzj.copymanga.R
|
||||||
@@ -96,7 +97,7 @@ class DownloadFragment: NoBackRefreshFragment(R.layout.fragment_download) {
|
|||||||
ComicDlFragment.json = jsonFile.readText()
|
ComicDlFragment.json = jsonFile.readText()
|
||||||
Log.d("MyDF", "root view: $rootView")
|
Log.d("MyDF", "root view: $rootView")
|
||||||
Log.d("MyDF", "action_nav_download_to_nav_group")
|
Log.d("MyDF", "action_nav_download_to_nav_group")
|
||||||
findNavController().navigate(R.id.action_nav_download_to_nav_group, bundle)
|
Navigate.safeNavigateTo(findNavController(), R.id.action_nav_download_to_nav_group, bundle)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun callSelf(title: String){
|
private fun callSelf(title: String){
|
||||||
@@ -105,7 +106,7 @@ class DownloadFragment: NoBackRefreshFragment(R.layout.fragment_download) {
|
|||||||
Log.d("MyDF", "Call self to $title")
|
Log.d("MyDF", "Call self to $title")
|
||||||
Log.d("MyDF", "root view: $rootView")
|
Log.d("MyDF", "root view: $rootView")
|
||||||
Log.d("MyDF", "action_nav_download_self")
|
Log.d("MyDF", "action_nav_download_self")
|
||||||
findNavController().navigate(R.id.action_nav_download_self, bundle)
|
Navigate.safeNavigateTo(findNavController(), R.id.action_nav_download_self, bundle)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getFloat(oldString: String): Float {
|
private fun getFloat(oldString: String): Float {
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ import kotlinx.android.synthetic.main.line_lazybooklines.*
|
|||||||
import top.fumiama.copymanga.MainActivity
|
import top.fumiama.copymanga.MainActivity
|
||||||
import top.fumiama.copymanga.template.general.MangaPagesFragmentTemplate
|
import top.fumiama.copymanga.template.general.MangaPagesFragmentTemplate
|
||||||
import top.fumiama.copymanga.template.ui.CardList
|
import top.fumiama.copymanga.template.ui.CardList
|
||||||
|
import top.fumiama.copymanga.tools.api.Navigate
|
||||||
import top.fumiama.copymanga.ui.comicdl.ComicDlFragment
|
import top.fumiama.copymanga.ui.comicdl.ComicDlFragment
|
||||||
import top.fumiama.dmzj.copymanga.R
|
import top.fumiama.dmzj.copymanga.R
|
||||||
import java.io.File
|
import java.io.File
|
||||||
@@ -58,7 +59,7 @@ class NewDownloadFragment: MangaPagesFragmentTemplate(R.layout.fragment_newdownl
|
|||||||
override fun prepareListeners(v: View, name: String, path: String?, chapterUUID: String?, pn: Int?) {
|
override fun prepareListeners(v: View, name: String, path: String?, chapterUUID: String?, pn: Int?) {
|
||||||
v.setOnClickListener {
|
v.setOnClickListener {
|
||||||
if(name==oldDlCardName && path == oldDlCardName) {
|
if(name==oldDlCardName && path == oldDlCardName) {
|
||||||
findNavController().navigate(R.id.action_nav_new_download_to_nav_download)
|
Navigate.safeNavigateTo(findNavController(), R.id.action_nav_new_download_to_nav_download)
|
||||||
return@setOnClickListener
|
return@setOnClickListener
|
||||||
}
|
}
|
||||||
callDownloadFragment(name)
|
callDownloadFragment(name)
|
||||||
@@ -79,12 +80,13 @@ class NewDownloadFragment: MangaPagesFragmentTemplate(R.layout.fragment_newdownl
|
|||||||
ComicDlFragment.json = File(File(extDir, name), "info.json").readText()
|
ComicDlFragment.json = File(File(extDir, name), "info.json").readText()
|
||||||
Log.d("MyNDF", "root view: $rootView")
|
Log.d("MyNDF", "root view: $rootView")
|
||||||
Log.d("MyNDF", "action_nav_new_download_to_nav_group")
|
Log.d("MyNDF", "action_nav_new_download_to_nav_group")
|
||||||
findNavController().navigate(R.id.action_nav_new_download_to_nav_group, bundle)
|
Navigate.safeNavigateTo(findNavController(), R.id.action_nav_new_download_to_nav_group, bundle)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun onLoadFinish() {
|
private fun onLoadFinish() {
|
||||||
MainActivity.mainWeakReference?.get()?.runOnUiThread {
|
MainActivity.mainWeakReference?.get()?.runOnUiThread {
|
||||||
if(cardList?.exitCardList == false) mypl.visibility = View.GONE
|
if(cardList?.exitCardList != false) return@runOnUiThread
|
||||||
|
mypl.visibility = View.GONE
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -28,6 +28,7 @@ import top.fumiama.copymanga.json.BookListStructure
|
|||||||
import top.fumiama.copymanga.template.general.NoBackRefreshFragment
|
import top.fumiama.copymanga.template.general.NoBackRefreshFragment
|
||||||
import top.fumiama.copymanga.template.http.AutoDownloadThread
|
import top.fumiama.copymanga.template.http.AutoDownloadThread
|
||||||
import top.fumiama.copymanga.tools.api.CMApi
|
import top.fumiama.copymanga.tools.api.CMApi
|
||||||
|
import top.fumiama.copymanga.tools.api.Navigate
|
||||||
import top.fumiama.dmzj.copymanga.R
|
import top.fumiama.dmzj.copymanga.R
|
||||||
import java.lang.Thread.sleep
|
import java.lang.Thread.sleep
|
||||||
import java.lang.ref.WeakReference
|
import java.lang.ref.WeakReference
|
||||||
@@ -159,7 +160,7 @@ class HomeFragment : NoBackRefreshFragment(R.layout.fragment_home) {
|
|||||||
holder.itemView.vpc.setOnClickListener {
|
holder.itemView.vpc.setOnClickListener {
|
||||||
val bundle = Bundle()
|
val bundle = Bundle()
|
||||||
homeHandler.index?.results?.banners?.get(position)?.comic?.path_word?.let { it1 -> bundle.putString("path", it1) }
|
homeHandler.index?.results?.banners?.get(position)?.comic?.path_word?.let { it1 -> bundle.putString("path", it1) }
|
||||||
findNavController().navigate(R.id.action_nav_home_to_nav_book, bundle)
|
Navigate.safeNavigateTo(findNavController(), R.id.action_nav_home_to_nav_book, bundle)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -198,7 +199,7 @@ class HomeFragment : NoBackRefreshFragment(R.layout.fragment_home) {
|
|||||||
holder.itemView.lwc.setOnClickListener {
|
holder.itemView.lwc.setOnClickListener {
|
||||||
val bundle = Bundle()
|
val bundle = Bundle()
|
||||||
bundle.putString("path", path_word)
|
bundle.putString("path", path_word)
|
||||||
findNavController().navigate(R.id.action_nav_home_to_nav_book, bundle)
|
Navigate.safeNavigateTo(findNavController(), R.id.action_nav_home_to_nav_book, bundle)
|
||||||
}
|
}
|
||||||
holder.itemView.lwc.layoutParams.height = fhs.width / 4
|
holder.itemView.lwc.layoutParams.height = fhs.width / 4
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -28,6 +28,7 @@ import top.fumiama.copymanga.json.ComicStructure
|
|||||||
import top.fumiama.copymanga.json.IndexStructure
|
import top.fumiama.copymanga.json.IndexStructure
|
||||||
import top.fumiama.copymanga.template.http.AutoDownloadHandler
|
import top.fumiama.copymanga.template.http.AutoDownloadHandler
|
||||||
import top.fumiama.copymanga.tools.api.CMApi
|
import top.fumiama.copymanga.tools.api.CMApi
|
||||||
|
import top.fumiama.copymanga.tools.api.Navigate
|
||||||
import top.fumiama.copymanga.tools.api.UITools
|
import top.fumiama.copymanga.tools.api.UITools
|
||||||
import java.lang.Thread.sleep
|
import java.lang.Thread.sleep
|
||||||
import java.lang.ref.WeakReference
|
import java.lang.ref.WeakReference
|
||||||
@@ -143,7 +144,9 @@ class HomeHandler(private val that: WeakReference<HomeFragment>) : AutoDownloadH
|
|||||||
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?.findNavController()?.navigate(R.id.action_nav_home_to_nav_recommend)
|
homeF?.findNavController()?.let { nav ->
|
||||||
|
Navigate.safeNavigateTo(nav, R.id.action_nav_home_to_nav_recommend)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -192,7 +195,9 @@ class HomeHandler(private val that: WeakReference<HomeFragment>) : AutoDownloadH
|
|||||||
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?.findNavController()?.navigate(R.id.action_nav_home_to_nav_newest)
|
homeF?.findNavController()?.let { nav ->
|
||||||
|
Navigate.safeNavigateTo(nav, R.id.action_nav_home_to_nav_newest)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -205,7 +210,9 @@ class HomeHandler(private val that: WeakReference<HomeFragment>) : AutoDownloadH
|
|||||||
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?.findNavController()?.navigate(R.id.action_nav_home_to_nav_finish)
|
homeF?.findNavController()?.let { nav ->
|
||||||
|
Navigate.safeNavigateTo(nav, R.id.action_nav_home_to_nav_finish)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -317,7 +324,9 @@ class HomeHandler(private val that: WeakReference<HomeFragment>) : AutoDownloadH
|
|||||||
cv.setOnClickListener {
|
cv.setOnClickListener {
|
||||||
val bundle = Bundle()
|
val bundle = Bundle()
|
||||||
bundle.putString("path", pw)
|
bundle.putString("path", pw)
|
||||||
homeF?.findNavController()?.navigate(if(isTopic) R.id.action_nav_home_to_nav_topic else R.id.action_nav_home_to_nav_book, bundle)
|
homeF?.findNavController()?.let { nav ->
|
||||||
|
Navigate.safeNavigateTo(nav, if(isTopic) R.id.action_nav_home_to_nav_topic else R.id.action_nav_home_to_nav_book, bundle)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -19,8 +19,8 @@ class PagesManager(w: WeakReference<ViewMangaActivity>) {
|
|||||||
fun toNextPage(){
|
fun toNextPage(){
|
||||||
toPage(v?.r2l!=true)
|
toPage(v?.r2l!=true)
|
||||||
}
|
}
|
||||||
private fun judgePrevious() = v?.pageNum?:0 > 1
|
private fun judgePrevious() = (v?.pageNum ?: 0) > 1
|
||||||
private fun judgeNext() = v?.pageNum?:0 < v?.realCount?:0
|
private fun judgeNext() = (v?.pageNum ?: 0) < (v?.realCount ?: 0)
|
||||||
@ExperimentalStdlibApi
|
@ExperimentalStdlibApi
|
||||||
fun toPage(goNext:Boolean){
|
fun toPage(goNext:Boolean){
|
||||||
if (v?.clicked == false) {
|
if (v?.clicked == false) {
|
||||||
|
|||||||
@@ -88,8 +88,8 @@ class VMHandler(activity: ViewMangaActivity, url: String) : AutoDownloadHandler(
|
|||||||
}.start()
|
}.start()
|
||||||
9 -> loadScrollMode(msg.arg1)
|
9 -> loadScrollMode(msg.arg1)
|
||||||
10 -> loadScrollMode()
|
10 -> loadScrollMode()
|
||||||
11 -> loadImgsIntoLine(msg.arg1)
|
11 -> loadImagesIntoLine(msg.arg1)
|
||||||
12 -> loadImgsIntoLine()
|
12 -> loadImagesIntoLine()
|
||||||
13 -> {
|
13 -> {
|
||||||
dl?.hide()
|
dl?.hide()
|
||||||
wv.get()?.restorePN()
|
wv.get()?.restorePN()
|
||||||
@@ -100,7 +100,17 @@ class VMHandler(activity: ViewMangaActivity, url: String) : AutoDownloadHandler(
|
|||||||
Log.d("MyVMH", "Load page from $item")
|
Log.d("MyVMH", "Load page from $item")
|
||||||
}
|
}
|
||||||
15 -> dl?.hide()
|
15 -> dl?.hide()
|
||||||
//16 -> wv.get()?.prepareItems()
|
16 -> if (infcShowed) {
|
||||||
|
hideInfCardFull(); infcShowed = false
|
||||||
|
}
|
||||||
|
17 -> if (!infcShowed) {
|
||||||
|
showInfCardFull(); infcShowed = true
|
||||||
|
}
|
||||||
|
18 -> infcShowed = if (infcShowed) {
|
||||||
|
hideInfCardFull(); false
|
||||||
|
} else {
|
||||||
|
showInfCardFull(); true
|
||||||
|
}
|
||||||
22 -> wv.get()?.idtime?.text = SimpleDateFormat("HH:mm").format(Date()) + week + wv.get()?.toolsBox?.netinfo
|
22 -> wv.get()?.idtime?.text = SimpleDateFormat("HH:mm").format(Date()) + week + wv.get()?.toolsBox?.netinfo
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -163,8 +173,8 @@ class VMHandler(activity: ViewMangaActivity, url: String) : AutoDownloadHandler(
|
|||||||
wv.get()?.initManga()
|
wv.get()?.initManga()
|
||||||
wv.get()?.vprog?.visibility = View.GONE
|
wv.get()?.vprog?.visibility = View.GONE
|
||||||
}
|
}
|
||||||
private fun loadImgsIntoLine(item: Int = (wv.get()?.currentItem?:0), maxCount: Int = (wv.get()?.verticalLoadMaxCount?:20)) /*= Thread*/{
|
private fun loadImagesIntoLine(item: Int = (wv.get()?.currentItem?:0), maxCount: Int = (wv.get()?.verticalLoadMaxCount?:20)) /*= Thread*/{
|
||||||
Log.d("MyVMH", "Fun: loadImgsIntoLine($item, $maxCount)")
|
Log.d("MyVMH", "Fun: loadImagesIntoLine($item, $maxCount)")
|
||||||
wv.get()?.realCount?.let { count ->
|
wv.get()?.realCount?.let { count ->
|
||||||
if(count > 0){
|
if(count > 0){
|
||||||
val notFull = item + maxCount > count
|
val notFull = item + maxCount > count
|
||||||
@@ -197,8 +207,18 @@ class VMHandler(activity: ViewMangaActivity, url: String) : AutoDownloadHandler(
|
|||||||
ObjectAnimator.ofFloat(infcard, "translationY", delta, 0F).setDuration(233).start()
|
ObjectAnimator.ofFloat(infcard, "translationY", delta, 0F).setDuration(233).start()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun showInfCardFull() {
|
||||||
|
Log.d("MyVMH", "Read info drawer delta: $delta")
|
||||||
|
ObjectAnimator.ofFloat(infcard?.idc, "alpha", 0.0F, 0.8F).setDuration(233).start()
|
||||||
|
ObjectAnimator.ofFloat(infcard, "translationY", delta, 0F).setDuration(233).start()
|
||||||
|
}
|
||||||
|
|
||||||
private fun hideInfCard() {
|
private fun hideInfCard() {
|
||||||
ObjectAnimator.ofFloat(infcard?.idc, "alpha", 0.8F, 0.3F).setDuration(233).start()
|
ObjectAnimator.ofFloat(infcard?.idc, "alpha", 0.8F, 0.3F).setDuration(233).start()
|
||||||
ObjectAnimator.ofFloat(infcard, "translationY", 0F, delta).setDuration(233).start()
|
ObjectAnimator.ofFloat(infcard, "translationY", 0F, delta).setDuration(233).start()
|
||||||
}
|
}
|
||||||
|
private fun hideInfCardFull() {
|
||||||
|
ObjectAnimator.ofFloat(infcard?.idc, "alpha", 0.8F, 0.0F).setDuration(233).start()
|
||||||
|
ObjectAnimator.ofFloat(infcard, "translationY", 0F, delta).setDuration(233).start()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -4,8 +4,13 @@ import android.animation.ObjectAnimator
|
|||||||
import android.annotation.SuppressLint
|
import android.annotation.SuppressLint
|
||||||
import android.app.Service
|
import android.app.Service
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
|
import android.content.res.Resources
|
||||||
import android.graphics.Bitmap
|
import android.graphics.Bitmap
|
||||||
import android.graphics.BitmapFactory
|
import android.graphics.BitmapFactory
|
||||||
|
import android.graphics.Canvas
|
||||||
|
import android.graphics.Paint
|
||||||
|
import android.graphics.drawable.BitmapDrawable
|
||||||
|
import android.graphics.drawable.Drawable
|
||||||
import android.media.AudioManager
|
import android.media.AudioManager
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.os.Handler
|
import android.os.Handler
|
||||||
@@ -13,6 +18,7 @@ import android.util.Log
|
|||||||
import android.view.*
|
import android.view.*
|
||||||
import android.widget.SeekBar
|
import android.widget.SeekBar
|
||||||
import android.widget.Toast
|
import android.widget.Toast
|
||||||
|
import androidx.core.content.ContextCompat
|
||||||
import androidx.core.content.edit
|
import androidx.core.content.edit
|
||||||
import androidx.preference.PreferenceManager
|
import androidx.preference.PreferenceManager
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
@@ -36,6 +42,7 @@ import top.fumiama.dmzj.copymanga.R
|
|||||||
import top.fumiama.copymanga.template.general.TitleActivityTemplate
|
import top.fumiama.copymanga.template.general.TitleActivityTemplate
|
||||||
import top.fumiama.copymanga.template.http.AutoDownloadThread
|
import top.fumiama.copymanga.template.http.AutoDownloadThread
|
||||||
import top.fumiama.copymanga.tools.api.CMApi
|
import top.fumiama.copymanga.tools.api.CMApi
|
||||||
|
import top.fumiama.copymanga.tools.api.Font
|
||||||
import top.fumiama.copymanga.tools.http.DownloadTools
|
import top.fumiama.copymanga.tools.http.DownloadTools
|
||||||
import top.fumiama.copymanga.tools.thread.TimeThread
|
import top.fumiama.copymanga.tools.thread.TimeThread
|
||||||
import top.fumiama.copymanga.views.ScaleImageView
|
import top.fumiama.copymanga.views.ScaleImageView
|
||||||
@@ -85,6 +92,7 @@ class ViewMangaActivity : TitleActivityTemplate() {
|
|||||||
private var volTurnPage = false
|
private var volTurnPage = false
|
||||||
private var am: AudioManager? = null
|
private var am: AudioManager? = null
|
||||||
private var pm: PagesManager? = null
|
private var pm: PagesManager? = null
|
||||||
|
private var fullyHideInfo = false
|
||||||
val realCount get() = if(cut) indexMap.size else count
|
val realCount get() = if(cut) indexMap.size else count
|
||||||
|
|
||||||
@SuppressLint("SetTextI18n")
|
@SuppressLint("SetTextI18n")
|
||||||
@@ -108,6 +116,8 @@ class ViewMangaActivity : TitleActivityTemplate() {
|
|||||||
tt.start()
|
tt.start()
|
||||||
volTurnPage = settingsPref?.getBoolean("settings_cat_vm_sw_vol_turn", false)?:false
|
volTurnPage = settingsPref?.getBoolean("settings_cat_vm_sw_vol_turn", false)?:false
|
||||||
am = getSystemService(Service.AUDIO_SERVICE) as AudioManager
|
am = getSystemService(Service.AUDIO_SERVICE) as AudioManager
|
||||||
|
if (!noCellarAlert) noCellarAlert = settingsPref?.getBoolean("settings_cat_net_sw_use_cellar", false) == true
|
||||||
|
fullyHideInfo = settingsPref?.getBoolean("settings_cat_vm_sw_hide_info", false) == true
|
||||||
|
|
||||||
Log.d("MyVM", "Now ZipFile is $zipFile")
|
Log.d("MyVM", "Now ZipFile is $zipFile")
|
||||||
try {
|
try {
|
||||||
@@ -148,7 +158,10 @@ class ViewMangaActivity : TitleActivityTemplate() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun alertCellar() {
|
private fun alertCellar() {
|
||||||
toolsBox.buildInfo("注意", "要使用使用流量观看吗?", "确定", "不再提醒", "取消", {handler.startLoad()}, { noCellarAlert = true; handler.startLoad()}, {finish()})
|
toolsBox.buildInfo(
|
||||||
|
"注意", "要使用使用流量观看吗?", "确定", "本次阅读不再提醒", "取消",
|
||||||
|
{ handler.startLoad() }, { noCellarAlert = true; handler.startLoad() }, { finish() }
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun restorePN(){
|
fun restorePN(){
|
||||||
@@ -354,11 +367,26 @@ class ViewMangaActivity : TitleActivityTemplate() {
|
|||||||
}.start()
|
}.start()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun getLoadingBitmap(position: Int): Bitmap {
|
||||||
|
val loading = Bitmap.createBitmap(1024, 256, Bitmap.Config.ARGB_8888)
|
||||||
|
val canvas = Canvas(loading)
|
||||||
|
val paint = Paint()
|
||||||
|
paint.color = ContextCompat.getColor(applicationContext, R.color.design_default_color_surface)
|
||||||
|
paint.textSize = 100.0f
|
||||||
|
paint.typeface = Font.nisiTypeFace!!
|
||||||
|
val text = "${position+1}"
|
||||||
|
val x = (canvas.width - paint.measureText(text)) / 2
|
||||||
|
val y = (canvas.height + paint.descent() - paint.ascent()) / 2
|
||||||
|
canvas.drawText(text, x, y, paint)
|
||||||
|
return loading
|
||||||
|
}
|
||||||
|
|
||||||
fun loadImgOn(imgView: ScaleImageView, position: Int, isLast: Int = 0){
|
fun loadImgOn(imgView: ScaleImageView, position: Int, isLast: Int = 0){
|
||||||
Log.d("MyVM", "Load img: $position")
|
Log.d("MyVM", "Load img: $position")
|
||||||
val index2load = if(cut) Math.abs(indexMap[position]) -1 else position
|
val index2load = if(cut) Math.abs(indexMap[position]) -1 else position
|
||||||
val useCut = cut && isCut[index2load]
|
val useCut = cut && isCut[index2load]
|
||||||
val isLeft = cut && indexMap[position] > 0
|
val isLeft = cut && indexMap[position] > 0
|
||||||
|
loadImg(imgView, getLoadingBitmap(position), isLast, useCut, isLeft)
|
||||||
if (zipFile?.exists() == true) getImgBitmap(index2load)?.let {
|
if (zipFile?.exists() == true) getImgBitmap(index2load)?.let {
|
||||||
loadImg(imgView, it, isLast, useCut, isLeft)
|
loadImg(imgView, it, isLast, useCut, isLeft)
|
||||||
}
|
}
|
||||||
@@ -428,6 +456,7 @@ class ViewMangaActivity : TitleActivityTemplate() {
|
|||||||
infoDrawerDelta = position.toFloat()
|
infoDrawerDelta = position.toFloat()
|
||||||
infcard.translationY = infoDrawerDelta
|
infcard.translationY = infoDrawerDelta
|
||||||
Log.d("MyVM", "Set info drawer delta to $infoDrawerDelta")
|
Log.d("MyVM", "Set info drawer delta to $infoDrawerDelta")
|
||||||
|
handler.sendEmptyMessage(if (fullyHideInfo) 16 else 1)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ExperimentalStdlibApi
|
@ExperimentalStdlibApi
|
||||||
@@ -538,7 +567,7 @@ class ViewMangaActivity : TitleActivityTemplate() {
|
|||||||
})
|
})
|
||||||
isearch.setImageResource(R.drawable.ic_author)
|
isearch.setImageResource(R.drawable.ic_author)
|
||||||
isearch.setOnClickListener {
|
isearch.setOnClickListener {
|
||||||
handler.sendEmptyMessage(3)
|
handler.sendEmptyMessage(if (fullyHideInfo) 18 else 3) // trigger info card
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -641,12 +670,16 @@ class ViewMangaActivity : TitleActivityTemplate() {
|
|||||||
val thisOneI = holder.itemView.onei
|
val thisOneI = holder.itemView.onei
|
||||||
Glide.with(this@ViewMangaActivity)
|
Glide.with(this@ViewMangaActivity)
|
||||||
.asBitmap()
|
.asBitmap()
|
||||||
.load(GlideUrl(CMApi.proxy?.wrap(it)?:it, CMApi.myGlideHeaders)
|
.load(GlideUrl(CMApi.proxy?.wrap(it)?:it, CMApi.myGlideHeaders))
|
||||||
).into(object : SimpleTarget<Bitmap>() {
|
.placeholder(BitmapDrawable(resources, getLoadingBitmap(pos)))
|
||||||
|
.into(object : SimpleTarget<Bitmap>() {
|
||||||
override fun onResourceReady(resource: Bitmap, transition: Transition<in Bitmap>?) {
|
override fun onResourceReady(resource: Bitmap, transition: Transition<in Bitmap>?) {
|
||||||
thisOneI.setImageBitmap(cutBitmap(resource, isLeft))
|
thisOneI.setImageBitmap(cutBitmap(resource, isLeft))
|
||||||
} })
|
} })
|
||||||
} else Glide.with(this@ViewMangaActivity).load(GlideUrl(CMApi.proxy?.wrap(it)?:it, CMApi.myGlideHeaders)).into(holder.itemView.onei)
|
} else Glide.with(this@ViewMangaActivity)
|
||||||
|
.load(GlideUrl(CMApi.proxy?.wrap(it)?:it, CMApi.myGlideHeaders))
|
||||||
|
.placeholder(BitmapDrawable(resources, getLoadingBitmap(pos)))
|
||||||
|
.into(holder.itemView.onei)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -680,7 +713,7 @@ class ViewMangaActivity : TitleActivityTemplate() {
|
|||||||
infseek.visibility = View.GONE
|
infseek.visibility = View.GONE
|
||||||
isearch.visibility = View.GONE
|
isearch.visibility = View.GONE
|
||||||
}, 300)
|
}, 300)
|
||||||
handler.sendEmptyMessage(1)
|
handler.sendEmptyMessage(if (fullyHideInfo) 16 else 1)
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
|
|||||||
BIN
app/src/main/res/font/nisi.ttf
Executable file
BIN
app/src/main/res/font/nisi.ttf
Executable file
Binary file not shown.
@@ -60,6 +60,7 @@
|
|||||||
<string name="memberInfoApiUrl">https://%1$s/api/v3/member/info?platform=3</string>
|
<string name="memberInfoApiUrl">https://%1$s/api/v3/member/info?platform=3</string>
|
||||||
<string name="historyApiUrl">https://%1$s/api/v3/member/browse/comics?limit=21&offset=%2$d&platform=3</string>
|
<string name="historyApiUrl">https://%1$s/api/v3/member/browse/comics?limit=21&offset=%2$d&platform=3</string>
|
||||||
<string name="shelfApiUrl">https://%1$s/api/v3/member/collect/comics?limit=21&offset=%2$d&free_type=1&ordering=%3$s&platform=3</string>
|
<string name="shelfApiUrl">https://%1$s/api/v3/member/collect/comics?limit=21&offset=%2$d&free_type=1&ordering=%3$s&platform=3</string>
|
||||||
|
<string name="shelfOperateApiUrl">https://%1$s/api/v3/member/collect/comic</string>
|
||||||
|
|
||||||
<string name="imgProxyApiUrl">https://copymanga.azurewebsites.net/api/img?code=%1$s&url=%2$s</string>
|
<string name="imgProxyApiUrl">https://copymanga.azurewebsites.net/api/img?code=%1$s&url=%2$s</string>
|
||||||
<string name="imgProxyApiPrefix">https://hi77-overseas.mangafuna.xyz/</string>
|
<string name="imgProxyApiPrefix">https://hi77-overseas.mangafuna.xyz/</string>
|
||||||
@@ -108,6 +109,8 @@
|
|||||||
<string name="caption">标签</string>
|
<string name="caption">标签</string>
|
||||||
|
|
||||||
<string name="settings_cat_net">网络</string>
|
<string name="settings_cat_net">网络</string>
|
||||||
|
<string name="settings_cat_net_sw_use_cellar">总是使用流量观看</string>
|
||||||
|
<string name="settings_cat_net_sm_use_cellar">打开后不再在开始阅读时提示</string>
|
||||||
<string name="settings_cat_net_sw_use_foreign">使用海外线路</string>
|
<string name="settings_cat_net_sw_use_foreign">使用海外线路</string>
|
||||||
<string name="settings_cat_net_sm_use_foreign">不管使用什么线路, API访问均是海外, 只有图片CDN可能会变化(也可能不变), 请酌情选择使用</string>
|
<string name="settings_cat_net_sm_use_foreign">不管使用什么线路, API访问均是海外, 只有图片CDN可能会变化(也可能不变), 请酌情选择使用</string>
|
||||||
<string name="settings_cat_net_et_title_api_url">请求API网址</string>
|
<string name="settings_cat_net_et_title_api_url">请求API网址</string>
|
||||||
@@ -120,6 +123,8 @@
|
|||||||
<string name="settings_cat_net_et_summary_img_proxy">为避免滥用,代理密钥需加群(559748702)获得,且随时可能会刷新</string>
|
<string name="settings_cat_net_et_summary_img_proxy">为避免滥用,代理密钥需加群(559748702)获得,且随时可能会刷新</string>
|
||||||
|
|
||||||
<string name="settings_cat_vm">漫画浏览</string>
|
<string name="settings_cat_vm">漫画浏览</string>
|
||||||
|
<string name="settings_cat_vm_sw_hide_info">隐藏底部时间栏</string>
|
||||||
|
<string name="settings_cat_vm_sm_hide_info">打开后不再在底部显示时间和网络状态</string>
|
||||||
<string name="settings_cat_vm_sw_vol_turn">音量键翻页</string>
|
<string name="settings_cat_vm_sw_vol_turn">音量键翻页</string>
|
||||||
<string name="settings_cat_vm_sm_vol_turn">使用音量上下键前后翻页</string>
|
<string name="settings_cat_vm_sm_vol_turn">使用音量上下键前后翻页</string>
|
||||||
<string name="settings_cat_vm_sb_vertical_max">竖向翻页一次加载页数</string>
|
<string name="settings_cat_vm_sb_vertical_max">竖向翻页一次加载页数</string>
|
||||||
|
|||||||
@@ -4,6 +4,12 @@
|
|||||||
<PreferenceCategory
|
<PreferenceCategory
|
||||||
app:iconSpaceReserved="false"
|
app:iconSpaceReserved="false"
|
||||||
app:title="@string/settings_cat_net">
|
app:title="@string/settings_cat_net">
|
||||||
|
<SwitchPreferenceCompat
|
||||||
|
app:iconSpaceReserved="false"
|
||||||
|
app:key="settings_cat_net_sw_use_cellar"
|
||||||
|
app:selectable="true"
|
||||||
|
app:summary="@string/settings_cat_net_sm_use_cellar"
|
||||||
|
app:title="@string/settings_cat_net_sw_use_cellar" />
|
||||||
<SwitchPreferenceCompat
|
<SwitchPreferenceCompat
|
||||||
app:iconSpaceReserved="false"
|
app:iconSpaceReserved="false"
|
||||||
app:key="settings_cat_net_sw_use_foreign"
|
app:key="settings_cat_net_sw_use_foreign"
|
||||||
@@ -49,6 +55,12 @@
|
|||||||
<PreferenceCategory
|
<PreferenceCategory
|
||||||
app:iconSpaceReserved="false"
|
app:iconSpaceReserved="false"
|
||||||
app:title="@string/settings_cat_vm">
|
app:title="@string/settings_cat_vm">
|
||||||
|
<SwitchPreferenceCompat
|
||||||
|
app:iconSpaceReserved="false"
|
||||||
|
app:key="settings_cat_vm_sw_hide_info"
|
||||||
|
app:selectable="true"
|
||||||
|
app:summary="@string/settings_cat_vm_sm_hide_info"
|
||||||
|
app:title="@string/settings_cat_vm_sw_hide_info" />
|
||||||
<SwitchPreferenceCompat
|
<SwitchPreferenceCompat
|
||||||
app:iconSpaceReserved="false"
|
app:iconSpaceReserved="false"
|
||||||
app:key="settings_cat_vm_sw_vol_turn"
|
app:key="settings_cat_vm_sw_vol_turn"
|
||||||
|
|||||||
Reference in New Issue
Block a user