diff --git a/.idea/dictionaries/fumiama.xml b/.idea/dictionaries/fumiama.xml index 64540c6..bfb54f4 100644 --- a/.idea/dictionaries/fumiama.xml +++ b/.idea/dictionaries/fumiama.xml @@ -1,6 +1,7 @@ + alphae downloaders grps imgs diff --git a/app/build.gradle b/app/build.gradle index afcfbc8..834819b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -8,8 +8,8 @@ android { applicationId 'top.fumiama.copymanga' minSdkVersion 23 targetSdkVersion 34 - versionCode 54 - versionName '2.2.6' + versionCode 55 + versionName '2.2.7' resourceConfigurations += ['zh', 'zh-rCN'] testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" diff --git a/app/src/main/java/top/fumiama/copymanga/template/general/MangaPagesFragmentTemplate.kt b/app/src/main/java/top/fumiama/copymanga/template/general/MangaPagesFragmentTemplate.kt index 840a153..ec226f9 100644 --- a/app/src/main/java/top/fumiama/copymanga/template/general/MangaPagesFragmentTemplate.kt +++ b/app/src/main/java/top/fumiama/copymanga/template/general/MangaPagesFragmentTemplate.kt @@ -90,7 +90,7 @@ open class MangaPagesFragmentTemplate(inflateRes:Int, private val isLazy: Boolea cardPerRow = widthData?.get(0) ?: 3 cardWidth = widthData?.get(2) ?: 128 cardHeight = (cardWidth / 0.75 + 0.5).toInt() - withContext(Dispatchers.Main){ + withContext(Dispatchers.Main) { mysp.footerView.lht.text = "加载" mysp.headerView.lht.text = "刷新" mydll?.setPadding(0, 0, 0, navBarHeight) @@ -102,8 +102,8 @@ open class MangaPagesFragmentTemplate(inflateRes:Int, private val isLazy: Boolea setListeners() } - private fun managePage() { - lifecycleScope.launch { addPage() } + private suspend fun managePage() { + addPage() if (isLazy) { mysp.apply { post { @@ -118,8 +118,8 @@ open class MangaPagesFragmentTemplate(inflateRes:Int, private val isLazy: Boolea withContext(Dispatchers.IO) { reset() delay(600) + addPage() } - addPage() } } }) diff --git a/app/src/main/java/top/fumiama/copymanga/tools/ui/UITools.kt b/app/src/main/java/top/fumiama/copymanga/tools/ui/UITools.kt index d0b57c0..0e3f57b 100644 --- a/app/src/main/java/top/fumiama/copymanga/tools/ui/UITools.kt +++ b/app/src/main/java/top/fumiama/copymanga/tools/ui/UITools.kt @@ -8,6 +8,7 @@ import android.net.ConnectivityManager import android.net.NetworkCapabilities import android.view.View import android.widget.Toast +import androidx.preference.PreferenceManager import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext import top.fumiama.dmzj.copymanga.R @@ -94,11 +95,15 @@ class UITools(that: Context?, w: WeakReference? = null) { private fun px2dp(px:Int):Int?{ return zis?.resources?.displayMetrics?.density?.let { (px.toDouble() / it + 0.5).toInt()} } - fun calcWidthFromDp(marginLeftDp:Int, widthDp:Int):List{ + fun calcWidthFromDp(marginLeftDp:Int, widthDp:Int): List { val margin = marginLeftDp.toDouble() val marginPx = dp2px(marginLeftDp)?:16 val screenWidth = zis?.resources?.displayMetrics?.widthPixels?:1080 - val numPerRow = ((px2dp(screenWidth)?:400).toDouble() / (widthDp + 2 * margin) + 0.5).toInt() + val numPerRow = ((px2dp(screenWidth)?:400).toDouble() / (widthDp + 2 * margin) + 0.5).toInt().let { + it + (zis?.let { + a -> PreferenceManager.getDefaultSharedPreferences(a).getInt("settings_cat_general_sb_card_per_row", 0) + } ?: 0) + }.let { if(it <= 0) 3 else it } val w = (screenWidth - marginPx*numPerRow*2)/numPerRow val totalWidth = screenWidth/numPerRow return listOf(numPerRow, w, totalWidth) diff --git a/app/src/main/java/top/fumiama/copymanga/ui/cardflow/rank/RankFragment.kt b/app/src/main/java/top/fumiama/copymanga/ui/cardflow/rank/RankFragment.kt index f91be92..c49501a 100644 --- a/app/src/main/java/top/fumiama/copymanga/ui/cardflow/rank/RankFragment.kt +++ b/app/src/main/java/top/fumiama/copymanga/ui/cardflow/rank/RankFragment.kt @@ -56,7 +56,7 @@ class RankFragment : InfoCardLoader(R.layout.fragment_rank, R.id.action_nav_rank override fun setListeners() { super.setListeners() - frlai.lrt.addOnTabSelectedListener(object: TabLayout.OnTabSelectedListener { + frlai.lrt.apply { post { addOnTabSelectedListener(object: TabLayout.OnTabSelectedListener { override fun onTabReselected(tab: TabLayout.Tab?) {} override fun onTabSelected(tab: TabLayout.Tab?) { @@ -68,7 +68,7 @@ class RankFragment : InfoCardLoader(R.layout.fragment_rank, R.id.action_nav_rank } override fun onTabUnselected(tab: TabLayout.Tab?) {} - }) + }) } } } fun showSexInfo(toolsBox: UITools) { diff --git a/app/src/main/java/top/fumiama/copymanga/ui/cardflow/shelf/ShelfFragment.kt b/app/src/main/java/top/fumiama/copymanga/ui/cardflow/shelf/ShelfFragment.kt index 5593aa2..8b2ea29 100644 --- a/app/src/main/java/top/fumiama/copymanga/ui/cardflow/shelf/ShelfFragment.kt +++ b/app/src/main/java/top/fumiama/copymanga/ui/cardflow/shelf/ShelfFragment.kt @@ -48,36 +48,42 @@ class ShelfFragment : InfoCardLoader(R.layout.fragment_shelf, R.id.action_nav_su } private fun setUpdate() { - if (ad?.exit == true) return - line_shelf_updated.apt.setText(R.string.menu_update_time) - line_shelf_updated.setOnClickListener { - val same = sortValue in 0..1 - sortValue = rotate(it.apim, same, 0) - if (!same) fade() - delayedRefresh(400) - } + line_shelf_updated.apply { post { + if (ad?.exit == true) return@post + apt.setText(R.string.menu_update_time) + setOnClickListener { + val same = sortValue in 0..1 + sortValue = rotate(it.apim, same, 0) + if (!same) fade() + delayedRefresh(400) + } + } } } private fun setModify() { - if (ad?.exit == true) return - line_shelf_modifier.apt.setText(R.string.menu_add_time) - line_shelf_modifier.setOnClickListener { - val same = sortValue in 2..3 - sortValue = rotate(it.apim, same, 2) - if (!same) fade() - delayedRefresh(400) - } + line_shelf_modifier.apply { post { + if (ad?.exit == true) return@post + apt.setText(R.string.menu_add_time) + setOnClickListener { + val same = sortValue in 2..3 + sortValue = rotate(it.apim, same, 2) + if (!same) fade() + delayedRefresh(400) + } + } } } private fun setBrowse() { - if (ad?.exit == true) return - line_shelf_browse.apt.setText(R.string.menu_read_time) - line_shelf_browse.setOnClickListener { - val same = sortValue>=4 - sortValue = rotate(it.apim, same, 4) - if (!same) fade() - delayedRefresh(400) - } + line_shelf_browse.apply { post { + if (ad?.exit == true) return@post + apt.setText(R.string.menu_read_time) + setOnClickListener { + val same = sortValue>=4 + sortValue = rotate(it.apim, same, 4) + if (!same) fade() + delayedRefresh(400) + } + } } } private fun rotate(img: View, isSameSlot: Boolean, offset: Int): Int { @@ -99,22 +105,14 @@ class ShelfFragment : InfoCardLoader(R.layout.fragment_shelf, R.id.action_nav_su } private fun fade() { - when(sortValue) { - 0, 1 -> { - line_shelf_updated.alpha = 1f - line_shelf_modifier.alpha = 0.5f - line_shelf_browse.alpha = 0.5f - } - 2, 3 -> { - line_shelf_updated.alpha = 0.5f - line_shelf_modifier.alpha = 1f - line_shelf_browse.alpha = 0.5f - } - 4, 5 -> { - line_shelf_updated.alpha = 0.5f - line_shelf_modifier.alpha = 0.5f - line_shelf_browse.alpha = 1f - } + val alphae = when(sortValue) { + 0, 1 -> listOf(1f, 0.5f, 0.5f) + 2, 3 -> listOf(0.5f, 1f, 0.5f) + 4, 5 -> listOf(0.5f, 0.5f, 1f) + else -> listOf(1f, 1f, 1f) } + line_shelf_updated.apply { post { alpha = alphae[0] } } + line_shelf_modifier.apply { post { alpha = alphae[1] } } + line_shelf_browse.apply { post { alpha = alphae[2] } } } } \ No newline at end of file diff --git a/app/src/main/java/top/fumiama/copymanga/ui/settings/SettingsFragment.kt b/app/src/main/java/top/fumiama/copymanga/ui/settings/SettingsFragment.kt index 0ce286d..8ec1bd8 100644 --- a/app/src/main/java/top/fumiama/copymanga/ui/settings/SettingsFragment.kt +++ b/app/src/main/java/top/fumiama/copymanga/ui/settings/SettingsFragment.kt @@ -13,13 +13,11 @@ import androidx.preference.EditTextPreferenceDialogFragmentCompat import androidx.preference.Preference import androidx.preference.PreferenceFragmentCompat import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.async import kotlinx.coroutines.delay import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import top.fumiama.copymanga.tools.ui.UITools import top.fumiama.dmzj.copymanga.R -import java.lang.Thread.sleep class SettingsFragment: PreferenceFragmentCompat() { override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { @@ -36,7 +34,7 @@ class SettingsFragment: PreferenceFragmentCompat() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) context?.let { c -> - view.setPadding(0, 0, 0, UITools.getNavigationBarHeight(c)) + view.apply { post { setPadding(0, 0, 0, UITools.getNavigationBarHeight(c)) } } } } @@ -46,33 +44,35 @@ class SettingsFragment: PreferenceFragmentCompat() { 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() + lifecycleScope.launch { + withContext(Dispatchers.IO) { + var diff = 0 + var cnt = 0 + while (diff == 0 && cnt++ < 20) { + delay(50) + if (f.dialog == null) continue + val v = view?:return@withContext + // 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 usable 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@withContext + Log.d("MySF", "f.dialog is ${f.dialog}") + withContext(Dispatchers.Main) { + 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) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 6f6133d..b7d77eb 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -135,6 +135,8 @@ 通用 启动时显示 默认主页 + 每行加载卡片数偏移 + 默认为0表示无偏移, 在此基础上加减 网络 图片分辨率 diff --git a/app/src/main/res/xml/pref_setting.xml b/app/src/main/res/xml/pref_setting.xml index cdf4f16..61a235e 100644 --- a/app/src/main/res/xml/pref_setting.xml +++ b/app/src/main/res/xml/pref_setting.xml @@ -14,6 +14,15 @@ app:entries="@array/menus" app:entryValues="@array/menu_ids" android:defaultValue="0"/> +