1
0
mirror of https://github.com/fumiama/copymanga.git synced 2026-06-09 17:50:28 +08:00
修复
1. 漫画下载页加载不全
2. 高版本安卓(>=11)阅览漫画无法隐藏导航栏
3. 主页设置搜索类别永为暗色
4. 获取头像失败则闪退
优化
1. 恢复沉浸式状态栏
2. 升级组件库
This commit is contained in:
源文雨
2023-10-30 02:03:21 +09:00
parent 6819a87f1c
commit b4242e7e0a
26 changed files with 118 additions and 62 deletions

View File

@@ -4,12 +4,12 @@ apply plugin: 'kotlin-android-extensions'
android {
defaultConfig {
compileSdk 33
compileSdk 34
applicationId 'top.fumiama.copymanga'
minSdkVersion 23
targetSdkVersion 33
versionCode 36
versionName '2.0.0'
versionCode 37
versionName '2.0.1'
resConfigs 'zh', 'zh-rCN'
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
@@ -55,15 +55,15 @@ android {
}
dependencies {
implementation 'androidx.core:core-ktx:1.9.0'
implementation 'androidx.appcompat:appcompat:1.5.1'
implementation 'androidx.core:core-ktx:1.12.0'
implementation 'androidx.appcompat:appcompat:1.6.1'
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
implementation 'com.google.android.material:material:1.7.0'
implementation 'com.google.android.material:material:1.10.0'
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
implementation 'androidx.navigation:navigation-fragment-ktx:2.5.3'
implementation 'androidx.navigation:navigation-ui-ktx:2.5.3'
implementation 'androidx.navigation:navigation-fragment-ktx:2.7.4'
implementation 'androidx.navigation:navigation-ui-ktx:2.7.4'
testImplementation 'junit:junit:4.13.2'
implementation "androidx.preference:preference-ktx:1.2.0"
implementation "androidx.preference:preference-ktx:1.2.1"
implementation 'com.afollestad.material-dialogs:input:3.3.0'
implementation 'com.github.yalantis:ucrop:2.2.6'
implementation 'com.to.aboomy:pager2banner:1.0.1'

View File

@@ -23,8 +23,7 @@
</provider>
<activity
android:name="top.fumiama.copymanga.MainActivity"
android:label="@string/app_name"
android:theme="@style/AppTheme.Default"
android:theme="@style/AppTheme.NoActionBar"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

View File

@@ -41,9 +41,7 @@ import kotlinx.android.synthetic.main.activity_main.*
import kotlinx.android.synthetic.main.app_bar_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.copymanga.tools.api.UITools
import top.fumiama.copymanga.tools.ui.UITools
import top.fumiama.copymanga.ui.book.BookFragment.Companion.bookHandler
import top.fumiama.copymanga.ui.cardflow.rank.RankFragment
import top.fumiama.copymanga.ui.comicdl.ComicDlFragment
@@ -52,6 +50,7 @@ import top.fumiama.copymanga.ui.download.NewDownloadFragment
import top.fumiama.copymanga.update.Update
import top.fumiama.copymanga.user.Member
import top.fumiama.dmzj.copymanga.BuildConfig
import top.fumiama.dmzj.copymanga.R
import java.io.File
import java.io.FileInputStream
import java.lang.Thread.sleep

View File

@@ -4,7 +4,7 @@ import android.app.Activity
import android.os.Bundle
import android.view.View
import androidx.core.content.edit
import top.fumiama.copymanga.tools.api.UITools
import top.fumiama.copymanga.tools.ui.UITools
open class ActivityTemplate:Activity() {
lateinit var toolsBox: UITools

View File

@@ -5,7 +5,6 @@ import android.content.Context
import android.net.ConnectivityManager
import android.net.NetworkCapabilities
import android.os.Bundle
import android.util.JsonReader
import android.util.Log
import android.view.View
import androidx.fragment.app.Fragment
@@ -15,7 +14,7 @@ import kotlinx.android.synthetic.main.line_header.view.*
import kotlinx.android.synthetic.main.line_lazybooklines.*
import top.fumiama.copymanga.MainActivity
import top.fumiama.copymanga.template.ui.CardList
import top.fumiama.copymanga.tools.api.UITools
import top.fumiama.copymanga.tools.ui.UITools
import top.fumiama.dmzj.copymanga.R
import java.lang.Thread.sleep
import java.lang.ref.WeakReference

View File

@@ -14,7 +14,7 @@ import top.fumiama.copymanga.json.ShelfStructure
import top.fumiama.copymanga.json.TypeBookListStructure
import top.fumiama.copymanga.template.general.MangaPagesFragmentTemplate
import top.fumiama.copymanga.template.http.AutoDownloadThread
import top.fumiama.copymanga.tools.api.Navigate
import top.fumiama.copymanga.tools.ui.Navigate
import java.lang.ref.WeakReference
@ExperimentalStdlibApi

View File

@@ -1,4 +1,4 @@
package top.fumiama.copymanga.tools.api
package top.fumiama.copymanga.tools.ui
import android.graphics.Typeface
import androidx.core.content.res.ResourcesCompat

View File

@@ -1,4 +1,4 @@
package top.fumiama.copymanga.tools.api
package top.fumiama.copymanga.tools.ui
import android.content.Context
import android.graphics.Bitmap

View File

@@ -1,4 +1,4 @@
package top.fumiama.copymanga.tools.api
package top.fumiama.copymanga.tools.ui
import android.os.Bundle
import androidx.navigation.NavController

View File

@@ -1,4 +1,4 @@
package top.fumiama.copymanga.tools.api
package top.fumiama.copymanga.tools.ui
import android.app.Activity
import android.app.AlertDialog

View File

@@ -15,7 +15,7 @@ import top.fumiama.copymanga.MainActivity.Companion.mainWeakReference
import top.fumiama.copymanga.json.VolumeStructure
import top.fumiama.copymanga.manga.Reader
import top.fumiama.copymanga.template.general.NoBackRefreshFragment
import top.fumiama.copymanga.tools.api.Navigate
import top.fumiama.copymanga.tools.ui.Navigate
import top.fumiama.copymanga.ui.comicdl.ComicDlFragment
import top.fumiama.dmzj.copymanga.R
import java.io.File

View File

@@ -23,7 +23,6 @@ import kotlinx.android.synthetic.main.line_bookinfo.*
import kotlinx.android.synthetic.main.line_bookinfo_text.*
import kotlinx.android.synthetic.main.line_caption.view.*
import kotlinx.android.synthetic.main.line_chapter.view.*
import top.fumiama.copymanga.MainActivity
import top.fumiama.copymanga.MainActivity.Companion.mainWeakReference
import top.fumiama.copymanga.json.BookInfoStructure
import top.fumiama.copymanga.json.ChapterStructure
@@ -33,8 +32,8 @@ import top.fumiama.copymanga.manga.Reader
import top.fumiama.copymanga.template.http.AutoDownloadHandler
import top.fumiama.copymanga.template.http.AutoDownloadThread
import top.fumiama.copymanga.tools.api.CMApi
import top.fumiama.copymanga.tools.api.GlideBlurTransformation
import top.fumiama.copymanga.tools.api.Navigate
import top.fumiama.copymanga.tools.ui.GlideBlurTransformation
import top.fumiama.copymanga.tools.ui.Navigate
import top.fumiama.copymanga.ui.comicdl.ComicDlFragment
import top.fumiama.copymanga.ui.comicdl.ComicDlFragment.Companion.json
import top.fumiama.copymanga.ui.vm.ViewMangaActivity

View File

@@ -7,8 +7,7 @@ import kotlinx.android.synthetic.main.line_rank.view.*
import top.fumiama.copymanga.MainActivity
import top.fumiama.copymanga.template.ui.InfoCardLoader
import top.fumiama.copymanga.tools.api.CMApi
import top.fumiama.copymanga.tools.api.UITools
import top.fumiama.copymanga.ui.download.NewDownloadFragment
import top.fumiama.copymanga.tools.ui.UITools
import top.fumiama.dmzj.copymanga.R
import java.lang.Thread.sleep
import java.lang.ref.WeakReference

View File

@@ -26,7 +26,7 @@ import top.fumiama.copymanga.json.ComicStructureOld
import top.fumiama.copymanga.json.VolumeStructure
import top.fumiama.copymanga.tools.api.CMApi
import top.fumiama.copymanga.manga.MangaDlTools
import top.fumiama.copymanga.tools.api.UITools
import top.fumiama.copymanga.tools.ui.UITools
import top.fumiama.copymanga.ui.comicdl.ComicDlFragment.Companion.json
import top.fumiama.copymanga.ui.vm.ViewMangaActivity
import top.fumiama.copymanga.views.ChapterToggleButton

View File

@@ -12,7 +12,7 @@ import kotlinx.android.synthetic.main.app_bar_main.*
import kotlinx.android.synthetic.main.fragment_download.*
import top.fumiama.copymanga.MainActivity.Companion.mainWeakReference
import top.fumiama.copymanga.template.general.NoBackRefreshFragment
import top.fumiama.copymanga.tools.api.Navigate
import top.fumiama.copymanga.tools.ui.Navigate
import top.fumiama.copymanga.tools.file.FileUtils
import top.fumiama.copymanga.ui.comicdl.ComicDlFragment
import top.fumiama.copymanga.ui.vm.ViewMangaActivity
@@ -31,7 +31,7 @@ class DownloadFragment: NoBackRefreshFragment(R.layout.fragment_download) {
}
}
private fun scanFile(cd: File?){
private fun scanFile(cd: File?) {
val isRoot = cd == context?.getExternalFilesDir("")
val jsonFile = File(cd, "info.bin")
if(isRoot || !jsonFile.exists()) cd?.list()?.sortedArrayWith { o1, o2 ->

View File

@@ -1,20 +1,18 @@
package top.fumiama.copymanga.ui.download
import android.app.Activity
import android.app.AlertDialog
import android.os.Bundle
import android.util.Log
import android.view.View
import androidx.fragment.app.Fragment
import androidx.navigation.fragment.findNavController
import com.google.gson.Gson
import kotlinx.android.synthetic.main.line_lazybooklines.*
import top.fumiama.copymanga.MainActivity
import top.fumiama.copymanga.manga.Reader
import top.fumiama.copymanga.template.general.MangaPagesFragmentTemplate
import top.fumiama.copymanga.template.ui.CardList
import top.fumiama.copymanga.tools.api.Navigate
import top.fumiama.copymanga.tools.api.UITools
import top.fumiama.copymanga.tools.ui.Navigate
import top.fumiama.copymanga.tools.ui.UITools
import top.fumiama.copymanga.tools.file.FileUtils
import top.fumiama.copymanga.ui.comicdl.ComicDlFragment
import top.fumiama.dmzj.copymanga.R
@@ -53,6 +51,10 @@ class NewDownloadFragment: MangaPagesFragmentTemplate(R.layout.fragment_newdownl
override fun addPage() {
super.addPage()
if(isRefresh){
page = 0
isRefresh = false
}
if(!isEnd) {
if(sortedBookList == null || isContentChanged) {
Log.d("MyNDF", "Sorting books...")
@@ -67,6 +69,7 @@ class NewDownloadFragment: MangaPagesFragmentTemplate(R.layout.fragment_newdownl
}
Log.d("MyNDF", "Start drawing cards")
cardList?.addCard(oldDlCardName, path = oldDlCardName)
var cnt = 1
sortedBookList?.let {
for(i in it.listIterator(page)) {
if(cardList?.exitCardList != false) return
@@ -79,8 +82,10 @@ class NewDownloadFragment: MangaPagesFragmentTemplate(R.layout.fragment_newdownl
newJson.exists() -> {
if(cardList?.exitCardList != false) return
cardList?.addCard(i.name, "\n${bookSize}MB")
cnt++
}
}
if (cnt >= 21) break
}
if(page >= it.size) {
isEnd = true

View File

@@ -29,7 +29,7 @@ import top.fumiama.copymanga.json.BookListStructure
import top.fumiama.copymanga.template.general.NoBackRefreshFragment
import top.fumiama.copymanga.template.http.AutoDownloadThread
import top.fumiama.copymanga.tools.api.CMApi
import top.fumiama.copymanga.tools.api.Navigate
import top.fumiama.copymanga.tools.ui.Navigate
import top.fumiama.dmzj.copymanga.R
import java.lang.Thread.sleep
import java.lang.ref.WeakReference
@@ -91,7 +91,7 @@ class HomeFragment : NoBackRefreshFragment(R.layout.fragment_home) {
var i = 0
override fun onMicClick() {
val typeNames = resources.getStringArray(R.array.search_types)
AlertDialog.Builder(ContextThemeWrapper(context, R.style.AlertDialogTheme))
AlertDialog.Builder(context)
.setTitle(R.string.set_search_types)
.setIcon(R.mipmap.ic_launcher)
.setSingleChoiceItems(ArrayAdapter(context, R.layout.line_choice_list, typeNames), i){ d, p ->
@@ -137,7 +137,7 @@ class HomeFragment : NoBackRefreshFragment(R.layout.fragment_home) {
super.onCreate(savedInstanceState)
val tb = mainWeakReference?.get()?.toolsBox
val netInfo = tb?.netInfo
if(netInfo != null && netInfo != tb.transportStringNull && netInfo != tb.transportStringError)Thread {
if(netInfo != null && netInfo != tb.transportStringNull && netInfo != tb.transportStringError) Thread {
val l = MainActivity.member?.refreshAvatar()
if (l?.code != 200) {
MainActivity.member?.logout()

View File

@@ -12,7 +12,6 @@ import android.widget.LinearLayout
import android.widget.Toast
import androidx.cardview.widget.CardView
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.navigation.Navigation
import androidx.navigation.fragment.findNavController
import com.bumptech.glide.Glide
import com.bumptech.glide.load.model.GlideUrl
@@ -22,14 +21,13 @@ import com.to.aboomy.pager2banner.ScaleInTransformer
import kotlinx.android.synthetic.main.card_book.view.*
import kotlinx.android.synthetic.main.fragment_home.*
import kotlinx.android.synthetic.main.line_1bookline.view.*
import top.fumiama.copymanga.MainActivity.Companion.mainWeakReference
import top.fumiama.dmzj.copymanga.R
import top.fumiama.copymanga.json.ComicStructure
import top.fumiama.copymanga.json.IndexStructure
import top.fumiama.copymanga.template.http.AutoDownloadHandler
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.ui.Navigate
import top.fumiama.copymanga.tools.ui.UITools
import java.lang.Thread.sleep
import java.lang.ref.WeakReference

View File

@@ -1,13 +1,68 @@
package top.fumiama.copymanga.ui.settings
import android.content.SharedPreferences
import android.animation.ObjectAnimator
import android.graphics.Rect
import android.os.Bundle
import android.util.Log
import android.view.Window
import androidx.annotation.Keep
import androidx.preference.EditTextPreference
import androidx.preference.EditTextPreferenceDialogFragmentCompat
import androidx.preference.Preference
import androidx.preference.PreferenceFragmentCompat
import androidx.preference.PreferenceManager
import top.fumiama.dmzj.copymanga.R
import java.lang.Thread.sleep
class SettingsFragment: PreferenceFragmentCompat() {
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
setPreferencesFromResource(R.xml.pref_setting, rootKey)
}
override fun onDisplayPreferenceDialog(preference: Preference) {
if (preference is EditTextPreference) {
Log.d("MySF", "preference is EditTextPreference")
val f = EditTextPreferenceDialogFragmentCompat.newInstance(preference.key)
f.setTargetFragment(this, 0)
f.show(parentFragmentManager, null)
Thread {
var diff = 0
var cnt = 0
while (diff == 0 && cnt++ < 20) {
sleep(50)
if (f.dialog == null) continue
val v = view?:return@Thread
// https://github.com/mikepenz/MaterialDrawer/blob/aa9136fb4f5b3a80460fe5f47213985026d20c88/library/src/main/java/com/mikepenz/materialdrawer/util/KeyboardUtil.java
val r = Rect()
//r will be populated with the coordinates of your view that area still visible.
v.getWindowVisibleDisplayFrame(r)
//get screen height and calculate the difference with the useable area from the r
val height = v.context.resources.displayMetrics.heightPixels
diff = height - r.bottom
Log.d("MySF", "diff: $diff")
}
Log.d("MySF", "diff out while: $diff")
if (diff == 0) return@Thread
Log.d("MySF", "f.dialog is ${f.dialog}")
f.activity?.runOnUiThread {
f.dialog?.window?.apply {
val attr = attributes
Log.d("MySF", "animate from ${attr.y} to ${attr.y-diff/2}")
ObjectAnimator.ofInt(WindowAttributeSetter(this), "y", attr.y, attr.y-diff/2).setDuration(233).start()
}
}
}.start()
return
}
super.onDisplayPreferenceDialog(preference)
}
inner class WindowAttributeSetter(private val window: Window) {
@Keep
fun setY(y: Int) {
val attr = window.attributes
attr.y = y
Log.d("MySF", "set y to $y")
window.attributes = attr
}
}
}

View File

@@ -3,14 +3,11 @@ package top.fumiama.copymanga.ui.vm
import android.animation.ObjectAnimator
import android.annotation.SuppressLint
import android.app.Service
import android.content.Context
import android.content.res.Resources
import android.graphics.Bitmap
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.os.Bundle
import android.os.Handler
@@ -42,7 +39,7 @@ import top.fumiama.dmzj.copymanga.R
import top.fumiama.copymanga.template.general.TitleActivityTemplate
import top.fumiama.copymanga.template.http.AutoDownloadThread
import top.fumiama.copymanga.tools.api.CMApi
import top.fumiama.copymanga.tools.api.Font
import top.fumiama.copymanga.tools.ui.Font
import top.fumiama.copymanga.tools.http.DownloadTools
import top.fumiama.copymanga.tools.thread.TimeThread
import top.fumiama.copymanga.views.ScaleImageView
@@ -140,7 +137,7 @@ class ViewMangaActivity : TitleActivityTemplate() {
else {
window.setDecorFitsSystemWindows(false)
window.insetsController?.hide(WindowInsets.Type.statusBars())
//window.insetsController?.hide(WindowInsets.Type.navigationBars())
window.insetsController?.hide(WindowInsets.Type.navigationBars())
}
}

View File

@@ -10,7 +10,7 @@ import android.widget.Toast
import androidx.core.content.FileProvider
import androidx.core.content.edit
import kotlinx.android.synthetic.main.dialog_progress.view.*
import top.fumiama.copymanga.tools.api.UITools
import top.fumiama.copymanga.tools.ui.UITools
import top.fumiama.dmzj.copymanga.BuildConfig
import top.fumiama.dmzj.copymanga.R
import java.io.File

View File

@@ -41,13 +41,20 @@ class Member(private val pref: SharedPreferences, private val getString: (Int) -
}
fun refreshAvatar() : LoginInfoStructure {
DownloadTools.getHttpContent(getString(R.string.memberInfoApiUrl).format(
CMApi.myHostApiUrl))?.decodeToString()?.let {
val l = Gson().fromJson(it, LoginInfoStructure::class.java)
if(l.code == 200) pref.edit()?.apply {
putString("avatar", l.results.avatar)
apply()
try {
DownloadTools.getHttpContent(getString(R.string.memberInfoApiUrl).format(
CMApi.myHostApiUrl))?.decodeToString()?.let {
val l = Gson().fromJson(it, LoginInfoStructure::class.java)
if(l.code == 200) pref.edit()?.apply {
putString("avatar", l.results.avatar)
apply()
}
return l
}
} catch (e: Exception) {
val l = LoginInfoStructure()
l.code = 400
l.message = "${getString(R.string.login_get_avatar_failed)}: ${e.localizedMessage}"
return l
}
val l = LoginInfoStructure()

View File

@@ -646,7 +646,7 @@ class ScaleImageView : ImageView {
private val mGestureDetector =
GestureDetector(this.context, object : SimpleOnGestureListener() {
override fun onFling(
e1: MotionEvent,
e1: MotionEvent?,
e2: MotionEvent,
velocityX: Float,
velocityY: Float
@@ -657,7 +657,7 @@ class ScaleImageView : ImageView {
fling(velocityX, velocityY)
//parent.requestDisallowInterceptTouchEvent(false) //触摸事件请求取消拦截
}
return true
return super.onFling(e1, e2, velocityX, velocityY)
}
override fun onLongPress(e: MotionEvent) {

View File

@@ -17,7 +17,7 @@
android:layout_width="match_parent"
android:layout_height="16dp"
android:background="?attr/colorPrimarySurface"
android:visibility="gone"
android:visibility="visible"
app:layout_scrollFlags="scroll|enterAlways" />
<androidx.appcompat.widget.Toolbar

View File

@@ -3,4 +3,5 @@
android:id="@+id/mylv"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:nestedScrollingEnabled="true" />
android:nestedScrollingEnabled="true"
android:paddingBottom="@dimen/global_content_padding_bottom"/>

View File

@@ -33,6 +33,4 @@
<style name="Widget.MPM.Menu.Dark.CustomBackground">
<item name="android:colorBackground">?attr/colorSurface</item>
</style>
<style name="AlertDialogTheme" parent="Theme.MaterialComponents.Dialog.Alert"/>
</resources>