Quellcode durchsuchen

修复漫画阅读点击翻页的一些问题
新增设置某漫画阅读模式为默认值的功能
新增长按保存图片的开关

HapeLee vor 1 Jahr
Ursprung
Commit
3615c84619

+ 1 - 2
app/src/main/java/io/legato/kazusa/constant/PreferKey.kt

@@ -191,7 +191,7 @@ object PreferKey {
     const val mangaClickActionBL = "mangaClickActionBottomLeft"
     const val mangaClickActionBL = "mangaClickActionBottomLeft"
     const val mangaClickActionBC = "mangaClickActionBottomCenter"
     const val mangaClickActionBC = "mangaClickActionBottomCenter"
     const val mangaClickActionBR = "mangaClickActionBottomRight"
     const val mangaClickActionBR = "mangaClickActionBottomRight"
-
+    const val mangaLongClick = "mangaLongClick"
     const val permissionChecked = "permissionChecked"
     const val permissionChecked = "permissionChecked"
     const val notificationsPost = "notificationsPost"
     const val notificationsPost = "notificationsPost"
     const val ignoreBatteryPermission = "ignoreBatteryPermission"
     const val ignoreBatteryPermission = "ignoreBatteryPermission"
@@ -205,6 +205,5 @@ object PreferKey {
     const val pureBlack = "pure_black"
     const val pureBlack = "pure_black"
     const val labelVisibilityMode = "labelVisibilityMode"
     const val labelVisibilityMode = "labelVisibilityMode"
     const val menuAlpha = "menuAlpha"
     const val menuAlpha = "menuAlpha"
-
     const val colorImage = "colorImage"
     const val colorImage = "colorImage"
 }
 }

+ 7 - 1
app/src/main/java/io/legato/kazusa/help/config/AppConfig.kt

@@ -749,11 +749,17 @@ object AppConfig : SharedPreferences.OnSharedPreferenceChangeListener {
 
 
     //漫画滚动方式
     //漫画滚动方式
     var mangaScrollMode: Int
     var mangaScrollMode: Int
-        get() = appCtx.getPrefInt(PreferKey.mangaScrollMode, MangaScrollMode.PAGE_RIGHT_TO_LEFT)
+        get() = appCtx.getPrefInt(PreferKey.mangaScrollMode, MangaScrollMode.WEBTOON)
         set(value) {
         set(value) {
             appCtx.putPrefInt(PreferKey.mangaScrollMode, value)
             appCtx.putPrefInt(PreferKey.mangaScrollMode, value)
         }
         }
 
 
+    var mangaLongClick
+        get() = appCtx.getPrefBoolean(PreferKey.mangaLongClick, true)
+        set(value) {
+            appCtx.putPrefBoolean(PreferKey.mangaLongClick, value)
+        }
+
     //漫画滤镜
     //漫画滤镜
     var mangaColorFilter
     var mangaColorFilter
         get() = appCtx.getPrefString(PreferKey.mangaColorFilter, "")
         get() = appCtx.getPrefString(PreferKey.mangaColorFilter, "")

+ 17 - 14
app/src/main/java/io/legato/kazusa/ui/book/manga/ReadMangaActivity.kt

@@ -24,6 +24,7 @@ import com.bumptech.glide.integration.recyclerview.RecyclerViewPreloader
 import com.bumptech.glide.request.target.Target.SIZE_ORIGINAL
 import com.bumptech.glide.request.target.Target.SIZE_ORIGINAL
 import com.bumptech.glide.util.FixedPreloadSizeProvider
 import com.bumptech.glide.util.FixedPreloadSizeProvider
 import com.google.android.material.transition.platform.MaterialContainerTransform
 import com.google.android.material.transition.platform.MaterialContainerTransform
+import com.google.android.material.transition.platform.MaterialContainerTransformSharedElementCallback
 import io.legato.kazusa.BuildConfig
 import io.legato.kazusa.BuildConfig
 import io.legato.kazusa.R
 import io.legato.kazusa.R
 import io.legato.kazusa.base.VMBaseActivity
 import io.legato.kazusa.base.VMBaseActivity
@@ -163,6 +164,8 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, ReadMangaViewMode
     }
     }
 
 
     override fun onCreate(savedInstanceState: Bundle?) {
     override fun onCreate(savedInstanceState: Bundle?) {
+        setEnterSharedElementCallback(MaterialContainerTransformSharedElementCallback())
+        setExitSharedElementCallback(MaterialContainerTransformSharedElementCallback())
         val transform = MaterialContainerTransform().apply {
         val transform = MaterialContainerTransform().apply {
             addTarget(binding.rootView)
             addTarget(binding.rootView)
             scrimColor = Color.TRANSPARENT
             scrimColor = Color.TRANSPARENT
@@ -195,9 +198,6 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, ReadMangaViewMode
             GSON.fromJsonObject<MangaFooterConfig>(AppConfig.mangaFooterConfig).getOrNull()
             GSON.fromJsonObject<MangaFooterConfig>(AppConfig.mangaFooterConfig).getOrNull()
                 ?: MangaFooterConfig()
                 ?: MangaFooterConfig()
 
 
-        onBackPressedDispatcher.addCallback(this) {
-            finish()
-        }
     }
     }
 
 
     override fun observeLiveBus() {
     override fun observeLiveBus() {
@@ -228,7 +228,6 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, ReadMangaViewMode
             itemAnimator = null
             itemAnimator = null
             layoutManager = mLayoutManager
             layoutManager = mLayoutManager
             setHasFixedSize(true)
             setHasFixedSize(true)
-            setDisableClickScroll(AppConfig.disableClickScroll)
             setDisableMangaScale(AppConfig.disableMangaScale)
             setDisableMangaScale(AppConfig.disableMangaScale)
             setRecyclerViewPreloader(AppConfig.mangaPreDownloadNum)
             setRecyclerViewPreloader(AppConfig.mangaPreDownloadNum)
             setPreScrollListener { _, _, _, position ->
             setPreScrollListener { _, _, _, position ->
@@ -622,7 +621,6 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, ReadMangaViewMode
     //点击滑动
     //点击滑动
     override fun onClickScrollDisabledChanged(disabled: Boolean) {
     override fun onClickScrollDisabledChanged(disabled: Boolean) {
         AppConfig.disableClickScroll = disabled
         AppConfig.disableClickScroll = disabled
-        setDisableClickScroll(disabled)
     }
     }
 
 
     //双击缩放
     //双击缩放
@@ -671,6 +669,10 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, ReadMangaViewMode
 //        }
 //        }
     }
     }
 
 
+    override fun onMangaLongClickChanged(checked: Boolean) {
+        AppConfig.mangaLongClick = checked
+    }
+
     override fun onVolumeKeyPageChanged(enable: Boolean) {
     override fun onVolumeKeyPageChanged(enable: Boolean) {
         AppConfig.MangaVolumeKeyPage = enable
         AppConfig.MangaVolumeKeyPage = enable
     }
     }
@@ -715,7 +717,6 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, ReadMangaViewMode
         }
         }
     }
     }
 
 
-
     override fun upSystemUiVisibility(menuIsVisible: Boolean) {
     override fun upSystemUiVisibility(menuIsVisible: Boolean) {
         toggleSystemBar(menuIsVisible)
         toggleSystemBar(menuIsVisible)
         if (enableAutoScroll) {
         if (enableAutoScroll) {
@@ -726,7 +727,6 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, ReadMangaViewMode
         }
         }
     }
     }
 
 
-
     /**
     /**
      * 调整漫画类型
      * 调整漫画类型
      * @param mode 漫画类型
      * @param mode 漫画类型
@@ -820,10 +820,6 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, ReadMangaViewMode
         }
         }
     }
     }
 
 
-    private fun setDisableClickScroll(disable: Boolean) {
-        binding.webtoonFrame.disabledClickScroll = disable
-    }
-
     private fun upLayoutInDisplayCutoutMode() {
     private fun upLayoutInDisplayCutoutMode() {
         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
             window.attributes = window.attributes.apply {
             window.attributes = window.attributes.apply {
@@ -834,11 +830,18 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, ReadMangaViewMode
     }
     }
 
 
     private fun scrollToNext() {
     private fun scrollToNext() {
-        scrollPageTo(1)
+        if (!AppConfig.disableClickScroll)
+            scrollPageTo(1)
     }
     }
 
 
     private fun scrollToPrev() {
     private fun scrollToPrev() {
-        scrollPageTo(-1)
+        if (!AppConfig.disableClickScroll)
+            scrollPageTo(-1)
+    }
+
+    private fun isHorizontalScroll(): Boolean {
+        return scrollMode == MangaScrollMode.PAGE_LEFT_TO_RIGHT ||
+                scrollMode == MangaScrollMode.PAGE_RIGHT_TO_LEFT
     }
     }
 
 
     private fun scrollPageTo(direction: Int) {
     private fun scrollPageTo(direction: Int) {
@@ -847,7 +850,7 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, ReadMangaViewMode
         }
         }
         var dx = 0
         var dx = 0
         var dy = 0
         var dy = 0
-        if (AppConfig.enableMangaHorizontalScroll) {
+        if (isHorizontalScroll()) {
             dx = binding.recyclerView.run {
             dx = binding.recyclerView.run {
                 width - paddingStart - paddingEnd
                 width - paddingStart - paddingEnd
             }
             }

+ 15 - 2
app/src/main/java/io/legato/kazusa/ui/book/manga/config/MangaFooterSettingDialog.kt

@@ -17,6 +17,7 @@ import io.legato.kazusa.ui.widget.ReaderInfoBarView
 import io.legato.kazusa.utils.GSON
 import io.legato.kazusa.utils.GSON
 import io.legato.kazusa.utils.fromJsonObject
 import io.legato.kazusa.utils.fromJsonObject
 import io.legato.kazusa.utils.postEvent
 import io.legato.kazusa.utils.postEvent
+import io.legato.kazusa.utils.toastOnUi
 import io.legato.kazusa.utils.viewbindingdelegate.viewBinding
 import io.legato.kazusa.utils.viewbindingdelegate.viewBinding
 
 
 class MangaFooterSettingDialog :
 class MangaFooterSettingDialog :
@@ -26,7 +27,7 @@ class MangaFooterSettingDialog :
         ?: MangaFooterConfig()
         ?: MangaFooterConfig()
 
 
     var initialWebtoonSidePadding: Int = 0
     var initialWebtoonSidePadding: Int = 0
-    var initialScrollMode: Int = MangaScrollMode.PAGE_RIGHT_TO_LEFT
+    var initialScrollMode: Int = MangaScrollMode.WEBTOON
 
 
     var callback: Callback? = null
     var callback: Callback? = null
 
 
@@ -53,13 +54,17 @@ class MangaFooterSettingDialog :
                     binding.llWebtoon.isVisible = mode == MangaScrollMode.WEBTOON ||
                     binding.llWebtoon.isVisible = mode == MangaScrollMode.WEBTOON ||
                             mode == MangaScrollMode.WEBTOON_WITH_GAP
                             mode == MangaScrollMode.WEBTOON_WITH_GAP
                 }
                 }
+                setOnLongClickListener {
+                    AppConfig.mangaScrollMode = mode
+                    toastOnUi("已设置为全局默认模式")
+                    true
+                }
             })
             })
         }
         }
 
 
         binding.llWebtoon.isVisible = initialScrollMode == MangaScrollMode.WEBTOON ||
         binding.llWebtoon.isVisible = initialScrollMode == MangaScrollMode.WEBTOON ||
                 initialScrollMode == MangaScrollMode.WEBTOON_WITH_GAP
                 initialScrollMode == MangaScrollMode.WEBTOON_WITH_GAP
 
 
-
         binding.scvPadding.apply {
         binding.scvPadding.apply {
             valueFormat = { "$it %" }
             valueFormat = { "$it %" }
             progress = initialWebtoonSidePadding
             progress = initialWebtoonSidePadding
@@ -96,6 +101,13 @@ class MangaFooterSettingDialog :
             }
             }
         }
         }
 
 
+        binding.checkboxMangaLongClick.apply {
+            isChecked = AppConfig.mangaLongClick
+            setOnCheckedChangeListener { _, isChecked ->
+                callback?.onMangaLongClickChanged(isChecked)
+            }
+        }
+
         binding.cbChapterLabel.run {
         binding.cbChapterLabel.run {
             isChecked = !config.hideChapterLabel
             isChecked = !config.hideChapterLabel
             setOnCheckedChangeListener { _, isChecked ->
             setOnCheckedChangeListener { _, isChecked ->
@@ -256,6 +268,7 @@ class MangaFooterSettingDialog :
         fun onMangaScaleDisabledChanged(disabled: Boolean)
         fun onMangaScaleDisabledChanged(disabled: Boolean)
         fun onHideMangaTitleChanged(hide: Boolean)
         fun onHideMangaTitleChanged(hide: Boolean)
         fun onVolumeKeyPageChanged(enable: Boolean)
         fun onVolumeKeyPageChanged(enable: Boolean)
+        fun onMangaLongClickChanged(checked: Boolean)
     }
     }
 
 
 }
 }

+ 7 - 5
app/src/main/java/io/legato/kazusa/ui/book/manga/recyclerview/WebtoonFrame.kt

@@ -41,16 +41,18 @@ class WebtoonFrame : FrameLayout {
     private val recycler: WebtoonRecyclerView?
     private val recycler: WebtoonRecyclerView?
         get() = getChildAt(0) as? WebtoonRecyclerView
         get() = getChildAt(0) as? WebtoonRecyclerView
 
 
-    var disabledClickScroll = false
     var actionHandler: ClickActionHandler? = null
     var actionHandler: ClickActionHandler? = null
 
 
     private val gestureDetector =
     private val gestureDetector =
         GestureDetector(context, object : GestureDetector.SimpleOnGestureListener() {
         GestureDetector(context, object : GestureDetector.SimpleOnGestureListener() {
             override fun onLongPress(e: MotionEvent) {
             override fun onLongPress(e: MotionEvent) {
-                recycler?.let {
-                    val centerPos = it.findCenterViewPosition()
-                    if (centerPos != RecyclerView.NO_POSITION) {
-                        longPressListener?.invoke(centerPos)
+                if (AppConfig.mangaLongClick)
+                {
+                    recycler?.let {
+                        val centerPos = it.findCenterViewPosition()
+                        if (centerPos != RecyclerView.NO_POSITION) {
+                            longPressListener?.invoke(centerPos)
+                        }
                     }
                     }
                 }
                 }
             }
             }

+ 2 - 2
app/src/main/res/layout/activity_manga.xml

@@ -71,7 +71,7 @@
             android:layout_height="match_parent"
             android:layout_height="match_parent"
             android:gravity="center"
             android:gravity="center"
             android:orientation="vertical"
             android:orientation="vertical"
-            android:visibility="visible">
+            android:visibility="gone">
 
 
             <io.legato.kazusa.ui.widget.EmptyMessageView
             <io.legato.kazusa.ui.widget.EmptyMessageView
                 android:id="@+id/tv_msg2"
                 android:id="@+id/tv_msg2"
@@ -89,7 +89,7 @@
                 android:layout_margin="16dp"
                 android:layout_margin="16dp"
                 app:iconPadding="4dp"
                 app:iconPadding="4dp"
                 android:text="@string/load_error_retry"
                 android:text="@string/load_error_retry"
-                tools:visibility="visible" />
+                />
         </LinearLayout>
         </LinearLayout>
 
 
     </FrameLayout>
     </FrameLayout>

+ 18 - 1
app/src/main/res/layout/dialog_manga_footer_setting.xml

@@ -1,5 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <?xml version="1.0" encoding="utf-8"?>
 <androidx.core.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android"
 <androidx.core.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="match_parent"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:layout_height="match_parent"
     xmlns:app="http://schemas.android.com/apk/res-auto"
     xmlns:app="http://schemas.android.com/apk/res-auto"
@@ -40,10 +41,20 @@
             android:layout_width="match_parent"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:layout_height="wrap_content"
             android:paddingHorizontal="16dp"
             android:paddingHorizontal="16dp"
-            android:paddingVertical="8dp"
+            android:paddingTop="8dp"
             android:text="@string/read_type"
             android:text="@string/read_type"
             android:textStyle="bold" />
             android:textStyle="bold" />
 
 
+        <TextView
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:paddingHorizontal="16dp"
+            android:paddingBottom="8dp"
+            android:textSize="9sp"
+            android:text="@string/read_type_long"
+            android:textStyle="bold"
+            tools:ignore="SmallSp" />
+
         <com.google.android.material.chip.ChipGroup
         <com.google.android.material.chip.ChipGroup
             android:id="@+id/chipGroupScrollMode"
             android:id="@+id/chipGroupScrollMode"
             android:layout_width="match_parent"
             android:layout_width="match_parent"
@@ -250,6 +261,12 @@
                 android:layout_width="match_parent"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:layout_height="wrap_content"
                 android:text="@string/volume_key_page" />
                 android:text="@string/volume_key_page" />
+
+            <com.google.android.material.checkbox.MaterialCheckBox
+                android:id="@+id/checkboxMangaLongClick"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:text="@string/manga_long_click" />
         </LinearLayout>
         </LinearLayout>
 
 
         <com.google.android.material.button.MaterialButtonGroup
         <com.google.android.material.button.MaterialButtonGroup

+ 5 - 2
app/src/main/res/layout/view_detail_seek_bar.xml

@@ -3,6 +3,7 @@
     android:layout_width="match_parent"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:layout_height="wrap_content"
     xmlns:app="http://schemas.android.com/apk/res-auto"
     xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools"
     android:layout_marginVertical="8dp"
     android:layout_marginVertical="8dp"
     android:orientation="vertical">
     android:orientation="vertical">
 
 
@@ -38,10 +39,12 @@
                 android:id="@+id/tv_seek_value"
                 android:id="@+id/tv_seek_value"
                 android:layout_width="wrap_content"
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
                 android:layout_height="wrap_content"
-                android:paddingHorizontal="12dp"
+                android:textStyle="bold"
+                android:textSize="11sp"
+                android:paddingHorizontal="8dp"
                 android:paddingVertical="4dp"
                 android:paddingVertical="4dp"
                 android:singleLine="true"
                 android:singleLine="true"
-                android:text="" />
+                tools:text="123" />
         </com.google.android.material.card.MaterialCardView>
         </com.google.android.material.card.MaterialCardView>
 
 
     </LinearLayout>
     </LinearLayout>

+ 2 - 0
app/src/main/res/values-zh/strings.xml

@@ -1301,4 +1301,6 @@
     <string name="restart_later_message">更改将在下次启动应用时生效</string>
     <string name="restart_later_message">更改将在下次启动应用时生效</string>
     <string name="search_select_group">选择书源分组</string>
     <string name="search_select_group">选择书源分组</string>
     <string name="day_night_switch">深浅色模式开关</string>
     <string name="day_night_switch">深浅色模式开关</string>
+    <string name="manga_long_click">长按保存图片</string>
+    <string name="read_type_long">长按设置为全局默认模式</string>
 </resources>
 </resources>

+ 2 - 0
app/src/main/res/values/strings.xml

@@ -1302,4 +1302,6 @@
     <string name="restart_later_message">稍后重启</string>
     <string name="restart_later_message">稍后重启</string>
     <string name="search_select_group">选择书源分组</string>
     <string name="search_select_group">选择书源分组</string>
     <string name="day_night_switch">深浅色模式开关</string>
     <string name="day_night_switch">深浅色模式开关</string>
+    <string name="manga_long_click">长按保存图片</string>
+    <string name="read_type_long">长按设置为全局默认模式</string>
 </resources>
 </resources>