mirror of
https://github.com/fumiama/copymanga.git
synced 2026-06-04 23:10:23 +08:00
v2.0.beta18
新增 1. 自定义API地址 2. 图片代理 修复 1. 文本编辑框不跟随输入法上移 2. 获取图书信息失败(#26)
This commit is contained in:
1
.idea/gradle.xml
generated
1
.idea/gradle.xml
generated
@@ -14,6 +14,7 @@
|
||||
<option value="$PROJECT_DIR$/app" />
|
||||
</set>
|
||||
</option>
|
||||
<option name="resolveExternalAnnotations" value="false" />
|
||||
</GradleProjectSettings>
|
||||
</option>
|
||||
</component>
|
||||
|
||||
1
.idea/misc.xml
generated
1
.idea/misc.xml
generated
@@ -1,4 +1,3 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="DesignSurface">
|
||||
<option name="filePathToZoomLevelMap">
|
||||
|
||||
@@ -9,8 +9,8 @@ android {
|
||||
applicationId 'top.fumiama.copymanga'
|
||||
minSdkVersion 23
|
||||
targetSdkVersion 33
|
||||
versionCode 29
|
||||
versionName '2.0.beta17'
|
||||
versionCode 30
|
||||
versionName '2.0.beta18'
|
||||
resConfigs 'zh', 'zh-rCN'
|
||||
|
||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
<activity
|
||||
android:name="top.fumiama.copymanga.MainActivity"
|
||||
android:label="@string/app_name"
|
||||
android:theme="@style/AppTheme.NoActionBar"
|
||||
android:theme="@style/AppTheme.Default"
|
||||
android:exported="true">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
@@ -43,7 +43,7 @@
|
||||
android:theme="@style/Theme.AppCompat.Light.NoActionBar"/>
|
||||
<activity
|
||||
android:name="top.fumiama.copymanga.ui.vm.ViewMangaActivity"
|
||||
android:theme="@style/AppTheme.NoActionBar"/>
|
||||
android:theme="@style/AppTheme.Default"/>
|
||||
</application>
|
||||
|
||||
</manifest>
|
||||
|
||||
@@ -33,7 +33,7 @@ class LoginActivity:Activity() {
|
||||
putString("username", it.results?.username)
|
||||
putString("nickname", it.results?.nickname)
|
||||
apply()
|
||||
DownloadTools.getHttpContent(getString(R.string.memberInfoApiUrl))?.decodeToString()?.let {
|
||||
DownloadTools.getHttpContent(getString(R.string.memberInfoApiUrl).format(CMApi.myHostApiUrl))?.decodeToString()?.let {
|
||||
val l = Gson().fromJson(it, LoginInfoStructure::class.java)
|
||||
if(l.code == 200) {
|
||||
putString("avatar", l.results.avatar)
|
||||
|
||||
@@ -58,10 +58,13 @@ class MainActivity : AppCompatActivity() {
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
|
||||
mainWeakReference = WeakReference(this)
|
||||
|
||||
setContentView(R.layout.activity_main)
|
||||
setSupportActionBar(toolbar)
|
||||
//translucentStatusBar()
|
||||
coordiv.layoutParams.height = getStatusBarHeight()
|
||||
//coordiv.layoutParams.height = getStatusBarHeight()
|
||||
|
||||
navController = findNavController(R.id.nav_host_fragment)
|
||||
appBarConfiguration = AppBarConfiguration(
|
||||
@@ -79,7 +82,6 @@ class MainActivity : AppCompatActivity() {
|
||||
nav_view.setupWithNavController(navController!!)
|
||||
|
||||
headPic = File(getExternalFilesDir(""), "headPic")
|
||||
mainWeakReference = WeakReference(this)
|
||||
drawer_layout.addDrawerListener(object : DrawerLayout.DrawerListener {
|
||||
override fun onDrawerClosed(drawerView: View) {
|
||||
Log.d("MyMain", "onDrawerClosed")
|
||||
@@ -290,14 +292,14 @@ class MainActivity : AppCompatActivity() {
|
||||
coordiv.layoutParams.height = getStatusBarHeight()
|
||||
}*/
|
||||
|
||||
private fun getStatusBarHeight() =
|
||||
/*private fun getStatusBarHeight() =
|
||||
resources.getDimensionPixelOffset(
|
||||
resources.getIdentifier(
|
||||
"status_bar_height",
|
||||
"dimen",
|
||||
"android"
|
||||
)
|
||||
)
|
||||
)*/
|
||||
|
||||
private fun checkUpdate(ignoreSkip: Boolean) {
|
||||
Thread{
|
||||
|
||||
@@ -2,6 +2,7 @@ package top.fumiama.copymanga.template.http
|
||||
|
||||
import top.fumiama.dmzj.copymanga.R
|
||||
import top.fumiama.copymanga.MainActivity.Companion.mainWeakReference
|
||||
import top.fumiama.copymanga.tools.api.CMApi
|
||||
import top.fumiama.copymanga.tools.http.DownloadTools
|
||||
|
||||
class AutoDownloadThread(private val url: String, private val whenFinish: (result: ByteArray?)->Unit): Thread() {
|
||||
@@ -12,7 +13,7 @@ class AutoDownloadThread(private val url: String, private val whenFinish: (resul
|
||||
var c = 0
|
||||
while (!exit && re == null && c++ < 3){
|
||||
re = DownloadTools.getHttpContent(url,
|
||||
mainWeakReference?.get()?.getString(R.string.referUrl)!!,
|
||||
mainWeakReference?.get()?.getString(R.string.referUrl)!!.format(CMApi.myHostApiUrl),
|
||||
mainWeakReference?.get()?.getString(R.string.pc_ua)!!
|
||||
)
|
||||
}
|
||||
|
||||
@@ -94,7 +94,10 @@ class CardList(
|
||||
it.tic.text = name
|
||||
if(!file.exists()){
|
||||
that?.context?.let { context ->
|
||||
if(!exitCardList) Glide.with(context).load(GlideUrl(head, CMApi.myGlideHeaders)).into(it.imic)
|
||||
if(!exitCardList && head != null)
|
||||
Glide.with(context).load(
|
||||
GlideUrl(CMApi.proxy?.wrap(head)?:head, CMApi.myGlideHeaders)
|
||||
).into(it.imic)
|
||||
}
|
||||
}else {
|
||||
val img = File(file, "head.jpg")
|
||||
|
||||
@@ -6,6 +6,7 @@ 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.tools.api.CMApi
|
||||
import top.fumiama.dmzj.copymanga.R
|
||||
|
||||
@ExperimentalStdlibApi
|
||||
@@ -14,13 +15,11 @@ open class StatusCardFlow(private val api: Int, nav: Int) : InfoCardLoader(R.lay
|
||||
var sortValue = 0
|
||||
|
||||
override fun getApiUrl() =
|
||||
getString(api).let {
|
||||
String.format(
|
||||
it,
|
||||
page * 21,
|
||||
sortWay[sortValue]
|
||||
)
|
||||
}
|
||||
getString(api).format(
|
||||
CMApi.myHostApiUrl,
|
||||
page * 21,
|
||||
sortWay[sortValue]
|
||||
)
|
||||
|
||||
override fun setListeners() {
|
||||
super.setListeners()
|
||||
|
||||
@@ -3,19 +3,18 @@ package top.fumiama.copymanga.template.ui
|
||||
import android.os.Bundle
|
||||
import kotlinx.android.synthetic.main.app_bar_main.*
|
||||
import top.fumiama.copymanga.MainActivity.Companion.mainWeakReference
|
||||
import top.fumiama.copymanga.tools.api.CMApi
|
||||
|
||||
@ExperimentalStdlibApi
|
||||
open class ThemeCardFlow(private val api: Int, nav: Int) : StatusCardFlow(0, nav) {
|
||||
private var theme = ""
|
||||
override fun getApiUrl() =
|
||||
getString(api).let {
|
||||
String.format(
|
||||
it,
|
||||
page * 21,
|
||||
sortWay[sortValue],
|
||||
theme
|
||||
)
|
||||
}
|
||||
getString(api).format(
|
||||
CMApi.myHostApiUrl,
|
||||
page * 21,
|
||||
sortWay[sortValue],
|
||||
theme
|
||||
)
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
|
||||
@@ -1,16 +1,17 @@
|
||||
package top.fumiama.copymanga.tools.api
|
||||
|
||||
import android.content.Context
|
||||
import android.util.Base64
|
||||
import androidx.preference.PreferenceManager
|
||||
import com.bumptech.glide.load.model.LazyHeaders
|
||||
import top.fumiama.dmzj.copymanga.R
|
||||
import top.fumiama.copymanga.MainActivity
|
||||
import top.fumiama.copymanga.tools.http.DownloadTools
|
||||
import top.fumiama.copymanga.tools.http.Proxy
|
||||
import java.io.File
|
||||
import java.net.URLEncoder
|
||||
|
||||
object CMApi {
|
||||
var proxy = if(Proxy.useProxy) Proxy() else null
|
||||
var myGlideHeaders: LazyHeaders? = null
|
||||
get() {
|
||||
MainActivity.mainWeakReference?.get()?.let {
|
||||
@@ -28,10 +29,30 @@ object CMApi {
|
||||
}
|
||||
return field
|
||||
}
|
||||
var myHostApiUrl: String = ""
|
||||
get() {
|
||||
if(field != "") return field
|
||||
MainActivity.mainWeakReference?.get()?.let {
|
||||
PreferenceManager.getDefaultSharedPreferences(it).apply {
|
||||
getString("settings_cat_net_et_api_url", "")?.let { host ->
|
||||
if(host != "") {
|
||||
field = host
|
||||
return host
|
||||
}
|
||||
}
|
||||
}
|
||||
field = it.getString(R.string.hostUrl)
|
||||
}
|
||||
return field
|
||||
}
|
||||
|
||||
fun getZipFile(exDir: File?, manga: String, caption: CharSequence, name: CharSequence) = File(exDir, "$manga/$caption/$name.zip")
|
||||
fun getApiUrl(id: Int, arg1: String?, arg2: String?) = MainActivity.mainWeakReference?.get()?.getString(id)?.let { String.format(it, arg1, arg2) }
|
||||
fun getApiUrl(id: Int, arg1: String?, arg2: String?, arg3: Int? = 0) = MainActivity.mainWeakReference?.get()?.getString(id)?.let { String.format(it, arg1, arg2, arg3) }
|
||||
fun getLoginConnection(username: String, pwd: String, salt: Int) = MainActivity.mainWeakReference?.get()?.getString(R.string.loginApiUrl)?.let {
|
||||
fun getChapterInfoApiUrl(arg1: String?, arg2: String?) =
|
||||
MainActivity.mainWeakReference?.get()?.getString(R.string.chapterInfoApiUrl)?.format(myHostApiUrl, arg1, arg2)
|
||||
fun getGroupInfoApiUrl(arg1: String?, arg2: String?, arg3: Int? = 0) =
|
||||
MainActivity.mainWeakReference?.get()?.getString(R.string.groupInfoApiUrl)?.format(myHostApiUrl, arg1, arg2, arg3)
|
||||
fun getLoginConnection(username: String, pwd: String, salt: Int) =
|
||||
MainActivity.mainWeakReference?.get()?.getString(R.string.loginApiUrl)?.format(myHostApiUrl)?.let {
|
||||
DownloadTools.getConnection(it, "POST")?.apply {
|
||||
MainActivity.mainWeakReference?.get()?.let {
|
||||
PreferenceManager.getDefaultSharedPreferences(it).apply {
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package top.fumiama.copymanga.tools.http
|
||||
|
||||
import android.util.Log
|
||||
import top.fumiama.copymanga.tools.api.CMApi
|
||||
import java.io.File
|
||||
import java.lang.Thread.sleep
|
||||
import java.util.zip.CRC32
|
||||
@@ -66,7 +67,8 @@ class DownloadPool(folder: String) {
|
||||
var tryTimes = 3
|
||||
var s = false
|
||||
while (!s && tryTimes-- > 0){
|
||||
s = (DownloadTools.getHttpContent(imgUrls[index], -1))?.let { zip.write(it); true }?:false
|
||||
val u = imgUrls[index]
|
||||
s = (DownloadTools.getHttpContent(CMApi.proxy?.wrap(u)?:u, -1))?.let { zip.write(it); true }?:false
|
||||
if (!s) sleep(2000)
|
||||
}
|
||||
if(!s && tryTimes <= 0) {
|
||||
|
||||
@@ -8,7 +8,6 @@ import java.net.HttpURLConnection
|
||||
import java.net.URL
|
||||
import java.util.concurrent.Callable
|
||||
import java.util.concurrent.FutureTask
|
||||
import javax.net.ssl.HttpsURLConnection
|
||||
|
||||
object DownloadTools {
|
||||
fun getConnection(url: String?, method: String = "GET", refer: String? = null, ua: String? = null) =
|
||||
@@ -37,7 +36,7 @@ object DownloadTools {
|
||||
}
|
||||
setRequestProperty("platform", "3")
|
||||
}
|
||||
Log.d("Mydl", "getHttp: ${connection.getRequestProperties().map({ "${it.key}: ${it.value}" }).joinToString("\n")}")
|
||||
Log.d("Mydl", "getHttp: ${connection.requestProperties.map { "${it.key}: ${it.value}" }.joinToString("\n")}")
|
||||
connection
|
||||
}
|
||||
|
||||
@@ -53,12 +52,12 @@ object DownloadTools {
|
||||
}
|
||||
}
|
||||
|
||||
fun getHttpContent(Url: String, refer: String? = null, ua: String? = null): ByteArray? {
|
||||
Log.d("Mydl", "getHttp: $Url")
|
||||
fun getHttpContent(u: String, refer: String? = null, ua: String? = null): ByteArray? {
|
||||
Log.d("Mydl", "getHttp: $u")
|
||||
var ret: ByteArray? = null
|
||||
val task = FutureTask(Callable {
|
||||
try {
|
||||
getConnection(Url, "GET", refer, ua)?.apply {
|
||||
getConnection(u, "GET", refer, ua)?.apply {
|
||||
ret = inputStream.readBytes()
|
||||
disconnect()
|
||||
}
|
||||
@@ -76,12 +75,12 @@ object DownloadTools {
|
||||
}
|
||||
}
|
||||
|
||||
fun getHttpContent(Url: String, readSize: Int): ByteArray? {
|
||||
Log.d("Mydl", "getHttp: $Url")
|
||||
fun getHttpContent(u: String, readSize: Int): ByteArray? {
|
||||
Log.d("Mydl", "getHttp: $u")
|
||||
var ret: ByteArray? = null
|
||||
val task = FutureTask(Callable {
|
||||
try {
|
||||
val connection = getNormalConnection(Url, "GET")
|
||||
val connection = getNormalConnection(u, "GET")
|
||||
val ci = connection?.inputStream
|
||||
if(readSize > 0) {
|
||||
ret = ByteArray(readSize)
|
||||
|
||||
38
app/src/main/java/top/fumiama/copymanga/tools/http/Proxy.kt
Normal file
38
app/src/main/java/top/fumiama/copymanga/tools/http/Proxy.kt
Normal file
@@ -0,0 +1,38 @@
|
||||
package top.fumiama.copymanga.tools.http
|
||||
|
||||
import android.util.Log
|
||||
import androidx.preference.PreferenceManager
|
||||
import top.fumiama.copymanga.MainActivity
|
||||
import top.fumiama.dmzj.copymanga.R
|
||||
import java.net.URLEncoder
|
||||
import java.nio.charset.Charset
|
||||
|
||||
class Proxy(private val code: String) {
|
||||
constructor(): this(
|
||||
MainActivity.mainWeakReference?.get()?.let {
|
||||
PreferenceManager.getDefaultSharedPreferences(it).let {sp ->
|
||||
sp.getString("settings_cat_net_et_img_proxy_code", "")
|
||||
}
|
||||
}?:""
|
||||
)
|
||||
|
||||
fun wrap(u: String): String {
|
||||
return MainActivity.mainWeakReference?.get()?.getString(R.string.imgProxyApiUrl)
|
||||
?.format(code, URLEncoder.encode(u, Charset.defaultCharset().name()))
|
||||
?:u
|
||||
}
|
||||
|
||||
companion object {
|
||||
val useProxy: Boolean
|
||||
get() {
|
||||
MainActivity.mainWeakReference?.get()?.let {
|
||||
PreferenceManager.getDefaultSharedPreferences(it).apply {
|
||||
val b = getBoolean("settings_cat_net_sw_use_img_proxy", false)
|
||||
Log.d("MyProxy", "use proxy: $b")
|
||||
return b
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -40,8 +40,7 @@ import java.lang.Thread.sleep
|
||||
import java.lang.ref.WeakReference
|
||||
|
||||
class BookHandler(private val th: WeakReference<BookFragment>, private val path: String)
|
||||
: AutoDownloadHandler(
|
||||
th.get()?.getString(R.string.bookInfoApiUrl)?.let { String.format(it, path) } ?: "",
|
||||
: AutoDownloadHandler(th.get()?.getString(R.string.bookInfoApiUrl)?.format(CMApi.myHostApiUrl, path)?: "",
|
||||
BookInfoStructure::class.java,
|
||||
Looper.myLooper()!!){
|
||||
private val that get() = th.get()
|
||||
@@ -132,13 +131,15 @@ class BookHandler(private val th: WeakReference<BookFragment>, private val path:
|
||||
(fbibinfo!!.parent as LinearLayout).removeAllViews()
|
||||
fbl.addView(fbibinfo)
|
||||
}
|
||||
val load = Glide.with(this).load(
|
||||
GlideUrl(book?.results?.comic?.cover, CMApi.myGlideHeaders)
|
||||
).timeout(10000)
|
||||
load.into(imic)
|
||||
context?.let { it1 -> GlideBlurTransformation(it1) }
|
||||
?.let { it2 -> RequestOptions.bitmapTransform(it2) }
|
||||
?.let { it3 -> load.apply(it3).into(lbibg) }
|
||||
book?.results?.comic?.cover?.let { cover ->
|
||||
val load = Glide.with(this).load(
|
||||
GlideUrl(CMApi.proxy?.wrap(cover)?:cover, CMApi.myGlideHeaders)
|
||||
).timeout(10000)
|
||||
load.into(imic)
|
||||
context?.let { it1 -> GlideBlurTransformation(it1) }
|
||||
?.let { it2 -> RequestOptions.bitmapTransform(it2) }
|
||||
?.let { it3 -> load.apply(it3).into(lbibg) }
|
||||
}
|
||||
imf.visibility = View.GONE
|
||||
fbl.addView(divider)
|
||||
}
|
||||
@@ -246,7 +247,10 @@ class BookHandler(private val th: WeakReference<BookFragment>, private val path:
|
||||
var line: View? = null
|
||||
val last = v.results.list.size - 1
|
||||
v.results.list.onEachIndexed { i, it ->
|
||||
ViewMangaActivity.urlArray += CMApi.getApiUrl(R.string.chapterInfoApiUrl, comic.path_word, it.uuid)?:""
|
||||
ViewMangaActivity.urlArray += CMApi.getChapterInfoApiUrl(
|
||||
comic.path_word,
|
||||
it.uuid
|
||||
)?:""
|
||||
ViewMangaActivity.fileArray += CMApi.getZipFile(context?.getExternalFilesDir(""), comic.name, keys[iv], it.name)
|
||||
chapterNames += it.name
|
||||
if(line == null) {
|
||||
@@ -301,7 +305,7 @@ class BookHandler(private val th: WeakReference<BookFragment>, private val path:
|
||||
Log.d("MyBFH", "${i}卷共${if(times == 0) 1 else times}次加载")
|
||||
do {
|
||||
counts[i] = counts[i] - 100
|
||||
CMApi.getApiUrl(R.string.groupInfoApiUrl, path, gpw, offset)?.let {
|
||||
CMApi.getGroupInfoApiUrl(path, gpw, offset)?.let {
|
||||
Log.d("MyBFH", "get api: $it")
|
||||
if(ComicDlFragment.exit) return
|
||||
val ad = AutoDownloadThread(it) { result ->
|
||||
|
||||
@@ -4,14 +4,13 @@ import android.view.View
|
||||
import kotlinx.android.synthetic.main.line_lazybooklines.*
|
||||
import top.fumiama.copymanga.MainActivity
|
||||
import top.fumiama.copymanga.template.ui.InfoCardLoader
|
||||
import top.fumiama.copymanga.tools.api.CMApi
|
||||
import top.fumiama.dmzj.copymanga.R
|
||||
|
||||
@OptIn(ExperimentalStdlibApi::class)
|
||||
class HistoryFragment : InfoCardLoader(R.layout.fragment_history, R.id.action_nav_history_to_nav_book, isHistoryBook = true) {
|
||||
override fun getApiUrl() =
|
||||
getString(R.string.historyApiUrl).let {
|
||||
String.format(it, page * 21)
|
||||
}
|
||||
getString(R.string.historyApiUrl).format(CMApi.myHostApiUrl, page * 21)
|
||||
|
||||
override fun onLoadFinish() {
|
||||
super.onLoadFinish()
|
||||
|
||||
@@ -4,14 +4,13 @@ import android.view.View
|
||||
import kotlinx.android.synthetic.main.line_lazybooklines.*
|
||||
import top.fumiama.copymanga.MainActivity.Companion.mainWeakReference
|
||||
import top.fumiama.copymanga.template.ui.InfoCardLoader
|
||||
import top.fumiama.copymanga.tools.api.CMApi
|
||||
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)
|
||||
}
|
||||
getString(R.string.newestApiUrl).format(CMApi.myHostApiUrl, page * 21)
|
||||
|
||||
override fun onLoadFinish() {
|
||||
super.onLoadFinish()
|
||||
|
||||
@@ -7,6 +7,7 @@ import kotlinx.android.synthetic.main.line_lazybooklines.*
|
||||
import kotlinx.android.synthetic.main.line_rank.view.*
|
||||
import top.fumiama.copymanga.MainActivity.Companion.mainWeakReference
|
||||
import top.fumiama.copymanga.template.ui.InfoCardLoader
|
||||
import top.fumiama.copymanga.tools.api.CMApi
|
||||
import top.fumiama.dmzj.copymanga.R
|
||||
import java.lang.Thread.sleep
|
||||
|
||||
@@ -16,13 +17,11 @@ class RankFragment : InfoCardLoader(R.layout.fragment_rank, R.id.action_nav_rank
|
||||
private var sortValue = 0
|
||||
|
||||
override fun getApiUrl() =
|
||||
getString(R.string.rankApiUrl).let {
|
||||
String.format(
|
||||
it,
|
||||
getString(R.string.rankApiUrl).format(
|
||||
CMApi.myHostApiUrl,
|
||||
page * 21,
|
||||
sortWay[sortValue]
|
||||
)
|
||||
}
|
||||
|
||||
override fun setListeners() {
|
||||
super.setListeners()
|
||||
|
||||
@@ -4,14 +4,13 @@ import android.view.View
|
||||
import kotlinx.android.synthetic.main.line_lazybooklines.*
|
||||
import top.fumiama.copymanga.MainActivity.Companion.mainWeakReference
|
||||
import top.fumiama.copymanga.template.ui.InfoCardLoader
|
||||
import top.fumiama.copymanga.tools.api.CMApi
|
||||
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)
|
||||
}
|
||||
getString(R.string.recommendApiUrl).format(CMApi.myHostApiUrl, page * 21)
|
||||
|
||||
override fun onLoadFinish() {
|
||||
super.onLoadFinish()
|
||||
|
||||
@@ -12,6 +12,7 @@ import top.fumiama.copymanga.MainActivity.Companion.mainWeakReference
|
||||
import top.fumiama.copymanga.json.FilterStructure
|
||||
import top.fumiama.copymanga.template.http.AutoDownloadThread
|
||||
import top.fumiama.copymanga.template.ui.InfoCardLoader
|
||||
import top.fumiama.copymanga.tools.api.CMApi
|
||||
import java.lang.Thread.sleep
|
||||
|
||||
@ExperimentalStdlibApi
|
||||
@@ -22,20 +23,18 @@ class SortFragment : InfoCardLoader(R.layout.fragment_sort, R.id.action_nav_sort
|
||||
private var filter: FilterStructure? = null
|
||||
|
||||
override fun getApiUrl() =
|
||||
getString(R.string.sortApiUrl).let {
|
||||
String.format(
|
||||
it,
|
||||
getString(R.string.sortApiUrl).format(
|
||||
CMApi.myHostApiUrl,
|
||||
page * 21,
|
||||
sortWay[sortValue],
|
||||
if(theme >= 0) (filter?.results?.theme?.get(theme)?.path_word ?: "") else ""
|
||||
)
|
||||
}
|
||||
|
||||
override fun setListeners() {
|
||||
super.setListeners()
|
||||
setUpdate()
|
||||
setHot()
|
||||
AutoDownloadThread(getString(R.string.filterApiUrl)) {
|
||||
AutoDownloadThread(getString(R.string.filterApiUrl).format(CMApi.myHostApiUrl)) {
|
||||
if(ad?.exit == true) return@AutoDownloadThread
|
||||
it?.let {
|
||||
filter = Gson().fromJson(it.inputStream().reader(), FilterStructure::class.java)
|
||||
|
||||
@@ -10,21 +10,18 @@ import top.fumiama.copymanga.MainActivity.Companion.mainWeakReference
|
||||
import top.fumiama.copymanga.json.TopicStructure
|
||||
import top.fumiama.copymanga.template.http.AutoDownloadThread
|
||||
import top.fumiama.copymanga.template.ui.InfoCardLoader
|
||||
import top.fumiama.copymanga.tools.api.CMApi
|
||||
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, offset)
|
||||
}
|
||||
getString(R.string.topicContentApiUrl).format(CMApi.myHostApiUrl, arguments?.getString("path"), type, offset)
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
AutoDownloadThread(getString(R.string.topicApiUrl).let {
|
||||
String.format(it, arguments?.getString("path"))
|
||||
}) {
|
||||
AutoDownloadThread(getString(R.string.topicApiUrl).format(CMApi.myHostApiUrl, arguments?.getString("path"))) {
|
||||
if(ad?.exit == true) return@AutoDownloadThread
|
||||
it?.apply {
|
||||
val r = inputStream().reader()
|
||||
|
||||
@@ -3,7 +3,6 @@ package top.fumiama.copymanga.ui.comicdl
|
||||
import android.os.Bundle
|
||||
import android.os.Looper
|
||||
import android.util.Log
|
||||
import android.view.Menu
|
||||
import android.view.View
|
||||
import com.google.gson.Gson
|
||||
import top.fumiama.copymanga.MainActivity.Companion.mainWeakReference
|
||||
@@ -97,7 +96,7 @@ class ComicDlFragment: NoBackRefreshFragment(R.layout.fragment_dlcomic) {
|
||||
Log.d("MyCDF", "${i}卷共${if(times == 0) 1 else times}次加载")
|
||||
do {
|
||||
counts?.set(i, counts[i] - 100)
|
||||
CMApi.getApiUrl(R.string.groupInfoApiUrl, pw, gpw, offset)?.let {
|
||||
CMApi.getGroupInfoApiUrl(pw, gpw, offset)?.let {
|
||||
if(exit) return
|
||||
val ad = AutoDownloadThread(it) { result ->
|
||||
Log.d("MyCDF", "第${i}卷返回")
|
||||
|
||||
@@ -8,7 +8,6 @@ import android.os.Handler
|
||||
import android.os.Looper
|
||||
import android.os.Message
|
||||
import android.util.Log
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.view.ViewTreeObserver
|
||||
import android.widget.Toast
|
||||
@@ -116,7 +115,7 @@ class ComicDlHandler(looper: Looper, private val th: WeakReference<ComicDlFragme
|
||||
data += chapter.name
|
||||
data += chapter.uuid
|
||||
data += caption
|
||||
data += CMApi.getApiUrl(R.string.chapterInfoApiUrl, chapter.comic_path_word, chapter.uuid)?:""
|
||||
data += CMApi.getChapterInfoApiUrl(chapter.comic_path_word, chapter.uuid)?:""
|
||||
obtainMessage(10, data).sendToTarget()
|
||||
}
|
||||
sendEmptyMessage(12) //addDiv
|
||||
@@ -407,7 +406,10 @@ class ComicDlHandler(looper: Looper, private val th: WeakReference<ComicDlFragme
|
||||
)
|
||||
isNewTitle = true
|
||||
for (chapter in group.chapters) {
|
||||
val newUrl = CMApi.getApiUrl(R.string.chapterInfoApiUrl, chapter.url.substringAfter("/comic/").substringBefore('/'), chapter.url.substringAfterLast('/'))?:""
|
||||
val newUrl = CMApi.getChapterInfoApiUrl(
|
||||
chapter.url.substringAfter("/comic/").substringBefore('/'),
|
||||
chapter.url.substringAfterLast('/')
|
||||
)?:""
|
||||
Log.d("MyCD", "Generate new url: $newUrl")
|
||||
obtainMessage(10, arrayOf(chapter.name, "", group.name, newUrl)).sendToTarget()
|
||||
}
|
||||
|
||||
@@ -152,7 +152,7 @@ class HomeFragment : NoBackRefreshFragment(R.layout.fragment_home) {
|
||||
thisBanner?.cover?.let {
|
||||
//Log.d("MyHomeFVP", "Load img: $it")
|
||||
Glide.with(this@HomeFragment).load(
|
||||
GlideUrl(it, CMApi.myGlideHeaders)
|
||||
GlideUrl(CMApi.proxy?.wrap(it)?:it, CMApi.myGlideHeaders)
|
||||
).timeout(10000).into(holder.itemView.vpi)
|
||||
}
|
||||
holder.itemView.vpt.text = thisBanner?.brief
|
||||
@@ -193,7 +193,7 @@ class HomeFragment : NoBackRefreshFragment(R.layout.fragment_home) {
|
||||
}
|
||||
holder.itemView.tb.text = popular.toString()
|
||||
context?.let {
|
||||
Glide.with(it).load(GlideUrl(cover, CMApi.myGlideHeaders)).into(holder.itemView.imic)
|
||||
Glide.with(it).load(GlideUrl(CMApi.proxy?.wrap(cover)?:cover, CMApi.myGlideHeaders)).into(holder.itemView.imic)
|
||||
}
|
||||
holder.itemView.lwc.setOnClickListener {
|
||||
val bundle = Bundle()
|
||||
@@ -208,7 +208,7 @@ class HomeFragment : NoBackRefreshFragment(R.layout.fragment_home) {
|
||||
|
||||
fun refresh(query: CharSequence) {
|
||||
mainWeakReference?.get()?.apply {
|
||||
AutoDownloadThread(String.format(getString(R.string.searchApiUrl), 0, query, type)) {
|
||||
AutoDownloadThread(getString(R.string.searchApiUrl).format(CMApi.myHostApiUrl, 0, query, type)) {
|
||||
results = Gson().fromJson(it?.decodeToString(), BookListStructure::class.java)
|
||||
runOnUiThread { notifyDataSetChanged() }
|
||||
}.start()
|
||||
|
||||
@@ -33,7 +33,7 @@ import java.lang.Thread.sleep
|
||||
import java.lang.ref.WeakReference
|
||||
|
||||
class HomeHandler(private val that: WeakReference<HomeFragment>) : AutoDownloadHandler(
|
||||
that.get()?.getString(R.string.mainPageApiUrl) ?: "",
|
||||
that.get()?.getString(R.string.mainPageApiUrl)!!.format(CMApi.myHostApiUrl),
|
||||
IndexStructure::class.java,
|
||||
Looper.myLooper()!!,
|
||||
9
|
||||
@@ -310,7 +310,7 @@ class HomeHandler(private val that: WeakReference<HomeFragment>) : AutoDownloadH
|
||||
cv.tic.text = name
|
||||
homeF?.let {
|
||||
if(img.startsWith("http")) {
|
||||
Glide.with(it).load(GlideUrl(img, CMApi.myGlideHeaders)).timeout(20000).into(cv.imic)
|
||||
Glide.with(it).load(GlideUrl(CMApi.proxy?.wrap(img)?:img, CMApi.myGlideHeaders)).timeout(20000).into(cv.imic)
|
||||
}
|
||||
}
|
||||
if (isFinal) cv.sgnic.visibility = View.VISIBLE
|
||||
|
||||
@@ -170,8 +170,10 @@ class ViewMangaActivity : TitleActivityTemplate() {
|
||||
for (i in right until it.size) {
|
||||
if(destroy) break
|
||||
tasks?.let { tasks ->
|
||||
tasks[i] = DownloadTools.touch(it[i])
|
||||
Thread.sleep(1000)
|
||||
it[i]?.let { u ->
|
||||
tasks[i] = DownloadTools.touch(CMApi.proxy?.wrap(u)?:u)
|
||||
Thread.sleep(1000)
|
||||
}
|
||||
}
|
||||
}
|
||||
}.start()
|
||||
@@ -180,8 +182,10 @@ class ViewMangaActivity : TitleActivityTemplate() {
|
||||
for (i in left downTo 0) {
|
||||
if(destroy) break
|
||||
tasks?.let { tasks ->
|
||||
tasks[i] = DownloadTools.touch(it[i])
|
||||
Thread.sleep(1000)
|
||||
it[i]?.let { u ->
|
||||
tasks[i] = DownloadTools.touch(CMApi.proxy?.wrap(u)?:u)
|
||||
Thread.sleep(1000)
|
||||
}
|
||||
}
|
||||
}
|
||||
}.start()
|
||||
@@ -198,7 +202,7 @@ class ViewMangaActivity : TitleActivityTemplate() {
|
||||
forEachIndexed{ i, it ->
|
||||
if(it != null) {
|
||||
Thread{
|
||||
DownloadTools.getHttpContent(it, 1024)?.inputStream()?.let {
|
||||
DownloadTools.getHttpContent(CMApi.proxy?.wrap(it)?:it, 1024)?.inputStream()?.let {
|
||||
isCut[i] = canCut(it)
|
||||
analyzedCnt[i] = true
|
||||
}
|
||||
@@ -635,12 +639,12 @@ class ViewMangaActivity : TitleActivityTemplate() {
|
||||
val thisOneI = holder.itemView.onei
|
||||
Glide.with(this@ViewMangaActivity)
|
||||
.asBitmap()
|
||||
.load(GlideUrl(it, CMApi.myGlideHeaders)
|
||||
.load(GlideUrl(CMApi.proxy?.wrap(it)?:it, CMApi.myGlideHeaders)
|
||||
).into(object : SimpleTarget<Bitmap>() {
|
||||
override fun onResourceReady(resource: Bitmap, transition: Transition<in Bitmap>?) {
|
||||
thisOneI.setImageBitmap(cutBitmap(resource, isLeft))
|
||||
} })
|
||||
} else Glide.with(this@ViewMangaActivity).load(GlideUrl(it, CMApi.myGlideHeaders)).into(holder.itemView.onei)
|
||||
} else Glide.with(this@ViewMangaActivity).load(GlideUrl(CMApi.proxy?.wrap(it)?:it, CMApi.myGlideHeaders)).into(holder.itemView.onei)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -18,7 +18,7 @@ import java.security.MessageDigest
|
||||
|
||||
object Update {
|
||||
fun checkUpdate(activity: Activity, toolsBox: UITools, ignoreSkip: Boolean = false) = activity.apply{
|
||||
val client = Client("copymanga.v6.army", 12316)
|
||||
val client = Client("reilia.fumiama.top", 13212)
|
||||
val progressBar = layoutInflater.inflate(R.layout.dialog_progress, null, false)
|
||||
val progressHandler = object : Client.Progress{
|
||||
override fun notify(progressPercentage: Int) {
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="16dp"
|
||||
android:background="?attr/colorPrimarySurface"
|
||||
android:visibility="gone"
|
||||
app:layout_scrollFlags="scroll|enterAlways" />
|
||||
|
||||
<androidx.appcompat.widget.Toolbar
|
||||
|
||||
@@ -1,3 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE resources [
|
||||
<!ENTITY hosturl "api.mangacopy.com">
|
||||
]>
|
||||
<resources>
|
||||
<string name="app_name">拷贝漫画</string>
|
||||
<string name="action_settings">设定</string>
|
||||
@@ -8,7 +12,7 @@
|
||||
<string name="menu_home">主页</string>
|
||||
<string name="menu_sort">分类</string>
|
||||
<string name="menu_rank">排行</string>
|
||||
<string name="app_description">©2022源文雨\n本应用为拷贝漫画的第三方客户端,数据均来源于网络,作者不对其中所呈现的任何内容负责。</string>
|
||||
<string name="app_description">©2022–2023源文雨\n本应用为拷贝漫画的第三方客户端,数据均来源于网络,作者不对其中所呈现的任何内容负责。</string>
|
||||
<string name="menu_history">浏览历史</string>
|
||||
<string name="menu_sub">我的订阅</string>
|
||||
<string name="menu_download">我的下载</string>
|
||||
@@ -31,26 +35,28 @@
|
||||
<string name="null_book">获取图书信息失败</string>
|
||||
<string name="web_error">网络错误</string>
|
||||
|
||||
<string name="mainPageApiUrl">https://api.copymanga.info/api/v3/h5/homeIndex?platform=3</string>
|
||||
<string name="referUrl">"https://api.copymanga.info"</string>
|
||||
<string name="hostUrl">"api.copymanga.info"</string>
|
||||
<string name="rankApiUrl">https://api.copymanga.info/api/v3/ranks?limit=21&offset=%1$d&date_type=%2$s&platform=3</string>
|
||||
<string name="searchApiUrl">https://api.copymanga.info/api/v3/search/comic?limit=21&offset=%1$d&q=%2$s&q_type=%3$s&platform=3</string>
|
||||
<string name="filterApiUrl">https://api.copymanga.info/api/v3/h5/filterIndex/comic/tags?platform=3</string>
|
||||
<string name="sortApiUrl">https://api.copymanga.info/api/v3/comics?limit=21&offset=%1$d&ordering=%2$s&theme=%3$s&platform=3</string>
|
||||
<string name="bookInfoApiUrl">https://api.copymanga.info/api/v3/comic2/%1$s?platform=3</string>
|
||||
<string name="groupInfoApiUrl">https://api.copymanga.info/api/v3/comic/%1$s/group/%2$s/chapters?limit=100&offset=%3$d&platform=3</string>
|
||||
<string name="chapterInfoApiUrl">https://api.copymanga.info/api/v3/comic/%1$s/chapter2/%2$s?platform=3</string>
|
||||
<string name="topicApiUrl">https://api.copymanga.info/api/v3/topic/%1$s?platform=3</string>
|
||||
<string name="topicContentApiUrl">https://api.copymanga.info/api/v3/topic/%1$s/contents?type=%2$d&limit=21&offset=%3$d&platform=3</string>
|
||||
<string name="recommendApiUrl">https://api.copymanga.info/api/v3/recs?pos=3200102&limit=21&offset=%1$d&platform=3</string>
|
||||
<string name="newestApiUrl">https://api.copymanga.info/api/v3/update/newest?limit=21&offset=%1$d&platform=3</string>
|
||||
<string name="finishApiUrl">https://api.copymanga.info/api/v3/comics?limit=21&offset=%1$d&ordering=%2$s&top=finish&platform=3</string>
|
||||
<string name="authorApiUrl">https://api.copymanga.info/api/v3/comics?limit=21&offset=%1$d&ordering=%2$s&author=%3$s&platform=3</string>
|
||||
<string name="captionApiUrl">https://api.copymanga.info/api/v3/comics?limit=21&offset=%1$d&ordering=%2$s&theme=%3$s&platform=3</string>
|
||||
<string name="loginApiUrl">https://api.copymanga.info/api/v3/login?platform=3</string>
|
||||
<string name="memberInfoApiUrl">https://api.copymanga.info/api/v3/member/info?platform=3</string>
|
||||
<string name="historyApiUrl">https://api.copymanga.info/api/v3/member/browse/comics?limit=21&offset=%1$d&platform=3</string>
|
||||
<string name="mainPageApiUrl">https://%1$s/api/v3/h5/homeIndex?platform=3</string>
|
||||
<string name="referUrl">https://%1$s</string>
|
||||
<string name="hostUrl">&hosturl;</string>
|
||||
<string name="rankApiUrl">https://%1$s/api/v3/ranks?limit=21&offset=%2$d&date_type=%3$s&platform=3</string>
|
||||
<string name="searchApiUrl">https://%1$s/api/v3/search/comic?limit=21&offset=%2$d&q=%3$s&q_type=%4$s&platform=3</string>
|
||||
<string name="filterApiUrl">https://%1$s/api/v3/h5/filterIndex/comic/tags?platform=3</string>
|
||||
<string name="sortApiUrl">https://%1$s/api/v3/comics?limit=21&offset=%2$d&ordering=%3$s&theme=%4$s&platform=3</string>
|
||||
<string name="bookInfoApiUrl">https://%1$s/api/v3/comic2/%2$s?platform=3</string>
|
||||
<string name="groupInfoApiUrl">https://%1$s/api/v3/comic/%2$s/group/%3$s/chapters?limit=100&offset=%4$d&platform=3</string>
|
||||
<string name="chapterInfoApiUrl">https://%1$s/api/v3/comic/%2$s/chapter2/%3$s?platform=3</string>
|
||||
<string name="topicApiUrl">https://%1$s/api/v3/topic/%2$s?platform=3</string>
|
||||
<string name="topicContentApiUrl">https://%1$s/api/v3/topic/%2$s/contents?type=%3$d&limit=21&offset=%4$d&platform=3</string>
|
||||
<string name="recommendApiUrl">https://%1$s/api/v3/recs?pos=3200102&limit=21&offset=%2$d&platform=3</string>
|
||||
<string name="newestApiUrl">https://%1$s/api/v3/update/newest?limit=21&offset=%2$d&platform=3</string>
|
||||
<string name="finishApiUrl">https://%1$s/api/v3/comics?limit=21&offset=%2$d&ordering=%3$s&top=finish&platform=3</string>
|
||||
<string name="authorApiUrl">https://%1$s/api/v3/comics?limit=21&offset=%2$d&ordering=%3$s&author=%4$s&platform=3</string>
|
||||
<string name="captionApiUrl">https://%1$s/api/v3/comics?limit=21&offset=%2$d&ordering=%3$s&theme=%4$s&platform=3</string>
|
||||
<string name="loginApiUrl">https://%1$s/api/v3/login?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="imgProxyApiUrl">https://copymanga.azurewebsites.net/api/img?code=%1$s&url=%2$s</string>
|
||||
|
||||
<string name="complete">已完结</string>
|
||||
|
||||
@@ -90,7 +96,13 @@
|
||||
|
||||
<string name="settings_cat_net">网络</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_summary_api_url">一般无需更改,除非拷贝漫画官方更改网址,默认:&hosturl;</string>
|
||||
<string name="settings_cat_net_sw_use_img_proxy">使用图床代理(重启生效)</string>
|
||||
<string name="settings_cat_net_sm_use_img_proxy">作者自建的图床代理,可缓解国内图片无法加载问题,但不保证100%解决,也不保证一直可用</string>
|
||||
<string name="settings_cat_net_et_title_img_proxy">图床代理密钥(重启生效)</string>
|
||||
<string name="settings_cat_net_et_summary_img_proxy">为避免滥用,代理密钥需加群(559748702)获得,且随时可能会刷新</string>
|
||||
|
||||
<string name="settings_cat_vm">漫画浏览</string>
|
||||
<string name="settings_cat_vm_sw_vol_turn">音量键翻页</string>
|
||||
|
||||
@@ -4,6 +4,18 @@
|
||||
<!-- Customize your theme here. -->
|
||||
</style>
|
||||
|
||||
<style name="AppTheme.Default" parent="Theme.MaterialComponents.DayNight">
|
||||
<item name="windowActionBar">false</item>
|
||||
<item name="windowNoTitle">true</item>
|
||||
<item name="colorPrimary">@color/colorPrimary</item>
|
||||
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
|
||||
<item name="colorAccent">@color/colorAccent</item>
|
||||
<!--
|
||||
<item name="android:windowTranslucentStatus">true</item>
|
||||
<item name="android:windowTranslucentNavigation">true</item>
|
||||
-->
|
||||
</style>
|
||||
|
||||
<style name="AppTheme.NoActionBar" parent="Theme.MaterialComponents.DayNight">
|
||||
<item name="windowActionBar">false</item>
|
||||
<item name="windowNoTitle">true</item>
|
||||
|
||||
@@ -10,6 +10,33 @@
|
||||
app:selectable="true"
|
||||
app:summary="@string/settings_cat_net_sm_use_foreign"
|
||||
app:title="@string/settings_cat_net_sw_use_foreign" />
|
||||
<EditTextPreference
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:defaultValue="@string/hostUrl"
|
||||
android:selectAllOnFocus="false"
|
||||
android:singleLine="true"
|
||||
android:title="@string/settings_cat_net_et_title_api_url"
|
||||
android:summary="@string/settings_cat_net_et_summary_api_url"
|
||||
app:enableCopying="true"
|
||||
app:iconSpaceReserved="false"
|
||||
app:key="settings_cat_net_et_api_url" />
|
||||
<SwitchPreferenceCompat
|
||||
app:iconSpaceReserved="false"
|
||||
app:key="settings_cat_net_sw_use_img_proxy"
|
||||
app:selectable="true"
|
||||
app:summary="@string/settings_cat_net_sm_use_img_proxy"
|
||||
app:title="@string/settings_cat_net_sw_use_img_proxy" />
|
||||
<EditTextPreference
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:selectAllOnFocus="false"
|
||||
android:singleLine="true"
|
||||
android:title="@string/settings_cat_net_et_title_img_proxy"
|
||||
android:summary="@string/settings_cat_net_et_summary_img_proxy"
|
||||
app:enableCopying="true"
|
||||
app:iconSpaceReserved="false"
|
||||
app:key="settings_cat_net_et_img_proxy_code" />
|
||||
</PreferenceCategory>
|
||||
<PreferenceCategory
|
||||
app:iconSpaceReserved="false"
|
||||
|
||||
@@ -10,7 +10,7 @@ buildscript {
|
||||
maven { url "https://jitpack.io" }
|
||||
}
|
||||
dependencies {
|
||||
classpath 'com.android.tools.build:gradle:8.1.0'
|
||||
classpath 'com.android.tools.build:gradle:8.1.1'
|
||||
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
|
||||
|
||||
// NOTE: Do not place your application dependencies here; they belong
|
||||
|
||||
Reference in New Issue
Block a user