diff --git a/.github/komako.jpg b/.github/komako.jpg deleted file mode 100644 index ca6d215..0000000 Binary files a/.github/komako.jpg and /dev/null differ diff --git a/.idea/dictionaries/fumiama.xml b/.idea/dictionaries/fumiama.xml index bfb54f4..51ac377 100644 --- a/.idea/dictionaries/fumiama.xml +++ b/.idea/dictionaries/fumiama.xml @@ -5,6 +5,7 @@ downloaders grps imgs + kohima lowpan mangacopy mangafuna diff --git a/README.md b/README.md index ebf4224..9189e5f 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@
- Komako
+ Kohima

copymanga 拷贝漫画

拷贝漫画的第三方APP,优化阅读/下载体验

diff --git a/app/build.gradle b/app/build.gradle index ba214d9..2134a1c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -8,8 +8,8 @@ android { applicationId 'top.fumiama.copymanga' minSdkVersion 23 targetSdkVersion 34 - versionCode 56 - versionName '2.2.8' + versionCode 57 + versionName '2.2.9' resourceConfigurations += ['zh', 'zh-rCN'] testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" diff --git a/app/src/main/java/top/fumiama/copymanga/MainActivity.kt b/app/src/main/java/top/fumiama/copymanga/MainActivity.kt index 8ad4883..8cea2fe 100644 --- a/app/src/main/java/top/fumiama/copymanga/MainActivity.kt +++ b/app/src/main/java/top/fumiama/copymanga/MainActivity.kt @@ -53,7 +53,6 @@ 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 -import top.fumiama.copymanga.ui.download.DownloadFragment import top.fumiama.copymanga.ui.download.NewDownloadFragment import top.fumiama.copymanga.update.Update import top.fumiama.copymanga.user.Member @@ -98,22 +97,6 @@ class MainActivity : AppCompatActivity() { ) setupActionBarWithNavController(navController!!, appBarConfiguration) nav_view.setupWithNavController(navController!!) - PreferenceManager.getDefaultSharedPreferences(this)?.apply { - if (contains("settings_cat_general_sb_startup_menu")) getString("settings_cat_general_sb_startup_menu", "0")?.toInt()?.let { - if (it > 0) { - Log.d("MyMain", "nav 2 dest $it") - navController!!.navigate(listOf( - R.id.nav_home, - R.id.nav_sort, - R.id.nav_rank, - R.id.nav_sub, - R.id.nav_history, - R.id.nav_new_download, - R.id.nav_settings - )[it]) - } - } - } headPic = File(getExternalFilesDir(""), "headPic") drawer_layout.addDrawerListener(object : DrawerLayout.DrawerListener { @@ -161,6 +144,26 @@ class MainActivity : AppCompatActivity() { } } + override fun onPostCreate(savedInstanceState: Bundle?) { + super.onPostCreate(savedInstanceState) + PreferenceManager.getDefaultSharedPreferences(this)?.apply { + if (contains("settings_cat_general_sb_startup_menu")) getString("settings_cat_general_sb_startup_menu", "0")?.toInt()?.let { + if (it > 0) { + Log.d("MyMain", "nav 2 dest $it") + navController!!.navigate(listOf( + R.id.nav_home, + R.id.nav_sort, + R.id.nav_rank, + R.id.nav_sub, + R.id.nav_history, + R.id.nav_new_download, + R.id.nav_settings + )[it]) + } + } + } + } + override fun onCreateOptionsMenu(menu: Menu): Boolean { // Inflate the menu; this adds items to the action bar if it is present. menuInflater.inflate(R.menu.main, menu) 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 ec226f9..fc29a61 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 @@ -69,6 +69,7 @@ open class MangaPagesFragmentTemplate(inflateRes:Int, private val isLazy: Boolea return } lifecycleScope.launch { + showKanban() withContext(Dispatchers.IO) { delay(600) setLayouts() @@ -100,6 +101,7 @@ open class MangaPagesFragmentTemplate(inflateRes:Int, private val isLazy: Boolea initCardList(WeakReference(this@MangaPagesFragmentTemplate)) managePage() setListeners() + hideKanban() } private suspend fun managePage() { @@ -116,9 +118,11 @@ open class MangaPagesFragmentTemplate(inflateRes:Int, private val isLazy: Boolea override fun onRefresh() { lifecycleScope.launch { withContext(Dispatchers.IO) { + showKanban() reset() delay(600) addPage() + hideKanban() } } } diff --git a/app/src/main/java/top/fumiama/copymanga/template/general/NoBackRefreshFragment.kt b/app/src/main/java/top/fumiama/copymanga/template/general/NoBackRefreshFragment.kt index 29b338d..b3aaaff 100644 --- a/app/src/main/java/top/fumiama/copymanga/template/general/NoBackRefreshFragment.kt +++ b/app/src/main/java/top/fumiama/copymanga/template/general/NoBackRefreshFragment.kt @@ -1,18 +1,30 @@ package top.fumiama.copymanga.template.general +import android.animation.ObjectAnimator import android.os.Bundle import android.util.Log import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import androidx.core.animation.doOnEnd import androidx.fragment.app.Fragment +import androidx.preference.PreferenceManager +import kotlinx.android.synthetic.main.content_main.* +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.runBlocking +import kotlinx.coroutines.withContext +import top.fumiama.copymanga.MainActivity import top.fumiama.copymanga.tools.ui.UITools +import java.util.concurrent.atomic.AtomicBoolean open class NoBackRefreshFragment(private val layoutToLoad: Int): Fragment() { private var _rootView: View? = null val rootView: View get() = _rootView!! var isFirstInflate = true var navBarHeight = 0 + private val disableAnimation = MainActivity.mainWeakReference?.get()?.let { + PreferenceManager.getDefaultSharedPreferences(it) + }?.getBoolean("settings_cat_general_sw_disable_kanban_animation", false)?:false override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, @@ -31,7 +43,40 @@ open class NoBackRefreshFragment(private val layoutToLoad: Int): Fragment() { } override fun onDestroy() { super.onDestroy() + Thread { runBlocking { hideKanban() } }.start() _rootView = null isFirstInflate = true + Log.d("MyNBRF", "destroyed") + } + suspend fun showKanban() = withContext(Dispatchers.Main) { + if (disableAnimation) return@withContext + (activity?:(MainActivity.mainWeakReference?.get()))?.apply {cmaini?.post { + if(cmaini?.visibility == View.GONE) { + Log.d("MyNBRF", "show: start, set h: ${window?.decorView?.height}") + cmaini?.translationY = window?.decorView?.height?.toFloat()?:0f + cmaini?.visibility = View.VISIBLE + ObjectAnimator.ofFloat(cmaini, "translationY", cmaini?.translationY?:0f, 0f).setDuration(300).start() + } + } + }?:Log.d("MyNBRF", "show: null kanban ImgView") + Log.d("MyNBRF", "show: end") + } + private var isHideRunning = AtomicBoolean() + suspend fun hideKanban() = withContext(Dispatchers.Main) { + if (disableAnimation) return@withContext + (activity?:(MainActivity.mainWeakReference?.get()))?.apply { cmaini?.post { + if(!isHideRunning.get() && cmaini?.visibility == View.VISIBLE) { + isHideRunning.set(true) + Log.d("MyNBRF", "hide: start, set h: ${window?.decorView?.height}") + ObjectAnimator.ofFloat(cmaini, "translationY", 0f, window?.decorView?.height?.toFloat()?:0f).setDuration(300).also { + it.doOnEnd { + cmaini?.visibility = View.GONE + isHideRunning.set(false) + Log.d("MyNBRF", "hide: set gone") + } + }.start() + } + } }?:Log.d("MyNBRF", "hide: null kanban ImgView") + Log.d("MyNBRF", "hide: end") } } diff --git a/app/src/main/java/top/fumiama/copymanga/template/ui/InfoCardLoader.kt b/app/src/main/java/top/fumiama/copymanga/template/ui/InfoCardLoader.kt index 89ec32c..fe24712 100644 --- a/app/src/main/java/top/fumiama/copymanga/template/ui/InfoCardLoader.kt +++ b/app/src/main/java/top/fumiama/copymanga/template/ui/InfoCardLoader.kt @@ -180,8 +180,10 @@ open class InfoCardLoader(inflateRes:Int, private val navId:Int, private val isT lifecycleScope.launch { withContext(Dispatchers.IO) { delay(timeMillis) + showKanban() reset() addPage() + hideKanban() } } } diff --git a/app/src/main/java/top/fumiama/copymanga/template/ui/ThemeCardFlow.kt b/app/src/main/java/top/fumiama/copymanga/template/ui/ThemeCardFlow.kt index e26a2f5..2759573 100644 --- a/app/src/main/java/top/fumiama/copymanga/template/ui/ThemeCardFlow.kt +++ b/app/src/main/java/top/fumiama/copymanga/template/ui/ThemeCardFlow.kt @@ -4,7 +4,6 @@ import android.os.Bundle import android.view.View import kotlinx.android.synthetic.main.app_bar_main.* import kotlinx.android.synthetic.main.line_finish.* -import top.fumiama.copymanga.MainActivity.Companion.mainWeakReference import top.fumiama.copymanga.tools.api.CMApi import top.fumiama.dmzj.copymanga.R @@ -24,7 +23,7 @@ open class ThemeCardFlow(private val api: Int, nav: Int) : StatusCardFlow(0, nav arguments?.apply { getString("path")?.apply { theme = this } getString("name")?.apply { - mainWeakReference?.get()?.toolbar?.title = this + activity?.toolbar?.title = this } } } @@ -38,7 +37,7 @@ open class ThemeCardFlow(private val api: Int, nav: Int) : StatusCardFlow(0, nav override fun onResume() { super.onResume() arguments?.getString("name")?.apply { - mainWeakReference?.get()?.toolbar?.title = this + activity?.toolbar?.title = this } } } \ No newline at end of file diff --git a/app/src/main/java/top/fumiama/copymanga/ui/book/BookHandler.kt b/app/src/main/java/top/fumiama/copymanga/ui/book/BookHandler.kt index 67e5a89..10d55a7 100644 --- a/app/src/main/java/top/fumiama/copymanga/ui/book/BookHandler.kt +++ b/app/src/main/java/top/fumiama/copymanga/ui/book/BookHandler.kt @@ -35,14 +35,12 @@ import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.delay import kotlinx.coroutines.launch import kotlinx.coroutines.withContext -import top.fumiama.copymanga.MainActivity.Companion.mainWeakReference import top.fumiama.copymanga.json.ThemeStructure import top.fumiama.copymanga.manga.Reader import top.fumiama.copymanga.tools.api.CMApi import top.fumiama.copymanga.tools.ui.GlideBlurTransformation import top.fumiama.copymanga.tools.ui.GlideHideLottieViewListener import top.fumiama.copymanga.tools.ui.Navigate -import top.fumiama.copymanga.ui.vm.ViewMangaActivity import top.fumiama.dmzj.copymanga.R import java.lang.ref.WeakReference @@ -123,7 +121,7 @@ class BookHandler(private val th: WeakReference): Handler(Looper.m that?.apply { // tic?.text = book?.name // tic?.visibility = View.GONE - mainWeakReference?.get()?.toolbar?.title = book?.name + activity?.toolbar?.title = book?.name btauth?.text = that?.getString(R.string.text_format_region)?.format(book?.region?:"未知") bttag?.text = that?.getString(R.string.text_format_img_type)?.format(book?.imageType?:"未知") bthit?.text = that?.getString(R.string.text_format_hit)?.format(book?.popular?:-1) diff --git a/app/src/main/java/top/fumiama/copymanga/ui/comicdl/ComicDlFragment.kt b/app/src/main/java/top/fumiama/copymanga/ui/comicdl/ComicDlFragment.kt index be8749d..3f5789b 100644 --- a/app/src/main/java/top/fumiama/copymanga/ui/comicdl/ComicDlFragment.kt +++ b/app/src/main/java/top/fumiama/copymanga/ui/comicdl/ComicDlFragment.kt @@ -16,7 +16,6 @@ import top.fumiama.copymanga.json.VolumeStructure import top.fumiama.copymanga.template.general.NoBackRefreshFragment import top.fumiama.dmzj.copymanga.R import java.io.File -import java.lang.Thread.sleep import java.lang.ref.WeakReference class ComicDlFragment: NoBackRefreshFragment(R.layout.fragment_dlcomic) { diff --git a/app/src/main/java/top/fumiama/copymanga/ui/comicdl/ComicDlHandler.kt b/app/src/main/java/top/fumiama/copymanga/ui/comicdl/ComicDlHandler.kt index 7cdd949..9798a22 100644 --- a/app/src/main/java/top/fumiama/copymanga/ui/comicdl/ComicDlHandler.kt +++ b/app/src/main/java/top/fumiama/copymanga/ui/comicdl/ComicDlHandler.kt @@ -23,7 +23,6 @@ import kotlinx.android.synthetic.main.widget_downloadbar.* import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import kotlinx.coroutines.withContext -import top.fumiama.copymanga.MainActivity.Companion.mainWeakReference import top.fumiama.copymanga.json.ChapterStructure import top.fumiama.copymanga.json.ComicStructureOld import top.fumiama.copymanga.json.VolumeStructure @@ -126,6 +125,7 @@ class ComicDlHandler(looper: Looper, private val th: WeakReference? = null - private val oldDlCardName = MainActivity.mainWeakReference?.get()?.getString(R.string.old_download_card_name)!! - private val extDir = MainActivity.mainWeakReference?.get()?.getExternalFilesDir("") + private val oldDlCardName = mainWeakReference?.get()?.getString(R.string.old_download_card_name)!! + private val extDir = mainWeakReference?.get()?.getExternalFilesDir("") private var isReverse = false private var isContentChanged = false private var exit = false @@ -35,8 +35,9 @@ class NewDownloadFragment: MangaPagesFragmentTemplate(R.layout.fragment_newdownl override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) wn = WeakReference(this) - val settingsPref = MainActivity.mainWeakReference?.get()?.let { PreferenceManager.getDefaultSharedPreferences(it) } - showAll = settingsPref?.getBoolean("settings_cat_md_sw_show_0m_manga", false)?:false + showAll = activity?.let { + PreferenceManager.getDefaultSharedPreferences(it) + }?.getBoolean("settings_cat_md_sw_show_0m_manga", false)?:false } override fun onPause() { @@ -221,9 +222,11 @@ class NewDownloadFragment: MangaPagesFragmentTemplate(R.layout.fragment_newdownl isContentChanged = true lifecycleScope.launch { withContext(Dispatchers.IO) { + showKanban() reset() delay(600) addPage() + hideKanban() } } } diff --git a/app/src/main/java/top/fumiama/copymanga/ui/home/HomeFragment.kt b/app/src/main/java/top/fumiama/copymanga/ui/home/HomeFragment.kt index 53020c7..7b6fd5d 100644 --- a/app/src/main/java/top/fumiama/copymanga/ui/home/HomeFragment.kt +++ b/app/src/main/java/top/fumiama/copymanga/ui/home/HomeFragment.kt @@ -26,10 +26,10 @@ import kotlinx.android.synthetic.main.viewpage_horizonal.view.* import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.delay import kotlinx.coroutines.launch +import kotlinx.coroutines.runBlocking import kotlinx.coroutines.withContext import top.fumiama.copymanga.MainActivity import top.fumiama.copymanga.MainActivity.Companion.ime -import top.fumiama.copymanga.MainActivity.Companion.mainWeakReference import top.fumiama.copymanga.json.BookListStructure import top.fumiama.copymanga.template.general.NoBackRefreshFragment import top.fumiama.copymanga.template.http.PausableDownloader @@ -46,9 +46,9 @@ class HomeFragment : NoBackRefreshFragment(R.layout.fragment_home) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) if(isFirstInflate) { - val tb = mainWeakReference?.get()?.toolsBox - val netInfo = tb?.netInfo - if(netInfo != null && netInfo != tb.transportStringNull && netInfo != tb.transportStringError) + val tb = (activity as MainActivity).toolsBox + val netInfo = tb.netInfo + if(netInfo != tb.transportStringNull && netInfo != tb.transportStringError) MainActivity.member?.apply { lifecycleScope.launch { info().let { l -> if (l.code != 200 && l.code != 449) { @@ -163,7 +163,7 @@ class HomeFragment : NoBackRefreshFragment(R.layout.fragment_home) { setOnTouchListener { _, e -> Log.d("MyHF", "fhns on touch") if (e.action == MotionEvent.ACTION_UP && mSearchEditText?.text?.isNotEmpty() == true) { - ime?.hideSoftInputFromWindow(mainWeakReference?.get()?.window?.decorView?.windowToken, 0) + ime?.hideSoftInputFromWindow(activity?.window?.decorView?.windowToken, 0) } false } diff --git a/app/src/main/java/top/fumiama/copymanga/ui/home/HomeHandler.kt b/app/src/main/java/top/fumiama/copymanga/ui/home/HomeHandler.kt index 370648d..4716bd1 100644 --- a/app/src/main/java/top/fumiama/copymanga/ui/home/HomeHandler.kt +++ b/app/src/main/java/top/fumiama/copymanga/ui/home/HomeHandler.kt @@ -60,7 +60,12 @@ class HomeHandler(private val that: WeakReference) : AutoDownloadH override fun handleMessage(msg: Message) { super.handleMessage(msg) when (msg.what) { - -1 -> homeF?.swiperefresh?.isRefreshing = msg.obj as Boolean + -1 -> { + homeF?.apply { + swiperefresh?.isRefreshing = msg.obj as Boolean + lifecycleScope.launch { if(msg.obj as Boolean) showKanban() else hideKanban() } + } + } //0 -> setLayouts() 1 -> inflateCardLines() 2 -> homeF?.swiperefresh?.let { setSwipe(it) } @@ -274,6 +279,7 @@ class HomeHandler(private val that: WeakReference) : AutoDownloadH Log.d("MyHFH", "Refresh items.") homeF?.lifecycleScope?.launch { withContext(Dispatchers.IO) { + homeF?.showKanban() fhib?.isAutoPlay = false fhib?.adapter?.notifyDataSetChanged() index = null 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 8ec1bd8..b5f1c14 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 @@ -1,15 +1,10 @@ package top.fumiama.copymanga.ui.settings -import android.animation.ObjectAnimator -import android.graphics.Rect import android.os.Bundle import android.util.Log import android.view.View -import android.view.Window -import androidx.annotation.Keep import androidx.lifecycle.lifecycleScope import androidx.preference.EditTextPreference -import androidx.preference.EditTextPreferenceDialogFragmentCompat import androidx.preference.Preference import androidx.preference.PreferenceFragmentCompat import kotlinx.coroutines.Dispatchers @@ -17,6 +12,7 @@ import kotlinx.coroutines.delay import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import top.fumiama.copymanga.tools.ui.UITools +import top.fumiama.copymanga.views.AutoHideEditTextPreferenceDialogFragmentCompat import top.fumiama.dmzj.copymanga.R class SettingsFragment: PreferenceFragmentCompat() { @@ -41,50 +37,11 @@ class SettingsFragment: PreferenceFragmentCompat() { override fun onDisplayPreferenceDialog(preference: Preference) { if (preference is EditTextPreference) { Log.d("MySF", "preference is EditTextPreference") - val f = EditTextPreferenceDialogFragmentCompat.newInstance(preference.key) + val f = view?.let { AutoHideEditTextPreferenceDialogFragmentCompat.newInstance(it, preference.key) }?:return f.setTargetFragment(this, 0) f.show(parentFragmentManager, null) - 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() - } - } - } - } 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 - } - } } diff --git a/app/src/main/java/top/fumiama/copymanga/views/AutoHideEditTextPreferenceDialogFragmentCompat.kt b/app/src/main/java/top/fumiama/copymanga/views/AutoHideEditTextPreferenceDialogFragmentCompat.kt new file mode 100644 index 0000000..8312b21 --- /dev/null +++ b/app/src/main/java/top/fumiama/copymanga/views/AutoHideEditTextPreferenceDialogFragmentCompat.kt @@ -0,0 +1,81 @@ +package top.fumiama.copymanga.views + +import android.animation.ObjectAnimator +import android.graphics.Rect +import android.os.Bundle +import android.util.Log +import android.view.View +import android.view.Window +import androidx.annotation.Keep +import androidx.fragment.app.FragmentManager +import androidx.lifecycle.lifecycleScope +import androidx.preference.EditTextPreferenceDialogFragmentCompat +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.delay +import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext + +class AutoHideEditTextPreferenceDialogFragmentCompat(private val settingsFragmentView: View): EditTextPreferenceDialogFragmentCompat() { + var exit = false + override fun show(manager: FragmentManager, tag: String?) { + super.show(manager, tag) + lifecycleScope.launch { goUp() } + } + override fun onDestroy() { + super.onDestroy() + exit = true + } + private suspend fun goUp() = withContext(Dispatchers.IO) { + var round = 0 + while(!exit) { + var diff = round + while (!exit && ((round == 0 && diff == 0) || (round > 0 && diff != 0))) { + delay(200) + if (dialog == null) continue + // 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. + settingsFragmentView.getWindowVisibleDisplayFrame(r) + //get screen height and calculate the difference with the usable area from the r + val height = settingsFragmentView.context.resources.displayMetrics.heightPixels + diff = height - r.bottom + Log.d("MySF", "diff: $diff") + } + Log.d("MySF", "diff out while: $diff") + if (diff <= 0 && round == 0) return@withContext + Log.d("MySF", "f.dialog is $dialog") + withContext(Dispatchers.Main) { + dialog?.window?.apply { + val attr = attributes + if (diff != 0) { + 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() + } else { + Log.d("MySF", "animate from ${attr.y} to 0") + ObjectAnimator.ofInt(WindowAttributeSetter(this), "y", attr.y, 0).setDuration(233).start() + round = -1 + } + } + } + round++ + } + } + 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 + } + } + companion object { + fun newInstance(view: View, key: String?): AutoHideEditTextPreferenceDialogFragmentCompat { + val fragment = AutoHideEditTextPreferenceDialogFragmentCompat(view) + val b = Bundle(1) + b.putString(ARG_KEY, key) + fragment.setArguments(b) + return fragment + } + } +} diff --git a/app/src/main/res/drawable-nodpi/kohima.webp b/app/src/main/res/drawable-nodpi/kohima.webp new file mode 100644 index 0000000..c0f6728 Binary files /dev/null and b/app/src/main/res/drawable-nodpi/kohima.webp differ diff --git a/app/src/main/res/layout/content_main.xml b/app/src/main/res/layout/content_main.xml index 04b67fd..a420ac5 100644 --- a/app/src/main/res/layout/content_main.xml +++ b/app/src/main/res/layout/content_main.xml @@ -7,14 +7,30 @@ app:layout_behavior="@string/appbar_scrolling_view_behavior" tools:showIn="@layout/app_bar_main"> + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_book.xml b/app/src/main/res/layout/fragment_book.xml index c45f5c2..4ac99bf 100644 --- a/app/src/main/res/layout/fragment_book.xml +++ b/app/src/main/res/layout/fragment_book.xml @@ -26,7 +26,10 @@ android:id="@+id/fbtab" android:layout_width="match_parent" android:layout_height="match_parent" - app:layout_scrollFlags="scroll"/> + android:background="@android:color/transparent" + android:backgroundTint="@android:color/transparent" + app:layout_scrollFlags="scroll" + app:tabBackground="@android:color/transparent" /> 默认&appver; 每行加载卡片数偏移 默认为0表示无偏移, 在此基础上加减 + 不显示看板娘动画 + 如加载卡顿可考虑开启此选项 网络 图片分辨率 diff --git a/app/src/main/res/xml/pref_setting.xml b/app/src/main/res/xml/pref_setting.xml index 07ff662..86bc984 100644 --- a/app/src/main/res/xml/pref_setting.xml +++ b/app/src/main/res/xml/pref_setting.xml @@ -14,15 +14,12 @@ app:entries="@array/menus" app:entryValues="@array/menu_ids" android:defaultValue="0"/> - + app:key="settings_cat_general_sw_disable_kanban_animation" + app:selectable="true" + app:summary="@string/settings_cat_general_sm_disable_kanban_animation" + app:title="@string/settings_cat_general_sw_disable_kanban_animation" /> +