diff --git a/app/src/main/java/io/legado/app/help/config/AppConfig.kt b/app/src/main/java/io/legado/app/help/config/AppConfig.kt index 9ee3fc903..0dca5b848 100644 --- a/app/src/main/java/io/legado/app/help/config/AppConfig.kt +++ b/app/src/main/java/io/legado/app/help/config/AppConfig.kt @@ -586,7 +586,7 @@ object AppConfig : SharedPreferences.OnSharedPreferenceChangeListener { get() = appCtx.getPrefBoolean(PreferKey.delayBookLoadEnable, true) val sharedElementEnterTransitionEnable - get() = appCtx.getPrefBoolean(PreferKey.sharedElementEnterTransitionEnable, true) + get() = appCtx.getPrefBoolean(PreferKey.sharedElementEnterTransitionEnable, false) var searchScope: String get() = appCtx.getPrefString("searchScope") ?: "" diff --git a/app/src/main/java/io/legado/app/help/config/ReadBookConfig.kt b/app/src/main/java/io/legado/app/help/config/ReadBookConfig.kt index 97d8d6496..246cb9bb5 100644 --- a/app/src/main/java/io/legado/app/help/config/ReadBookConfig.kt +++ b/app/src/main/java/io/legado/app/help/config/ReadBookConfig.kt @@ -61,7 +61,7 @@ object ReadBookConfig { var bgMeanColor: Int = 0 val textColor: Int get() = durConfig.curTextColor() val textShadowColor: Int get() = durConfig.curTextShadowColor() - + val menuColor: Int get() = durConfig.curMenuAc() init { initConfigs() initShareConfig() diff --git a/app/src/main/java/io/legado/app/ui/book/read/ReadBookActivity.kt b/app/src/main/java/io/legado/app/ui/book/read/ReadBookActivity.kt index 0126b8d40..6e85f146e 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/ReadBookActivity.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/ReadBookActivity.kt @@ -287,21 +287,21 @@ class ReadBookActivity : BaseReadBookActivity(), @SuppressLint("ClickableViewAccessibility") override fun onCreate(savedInstanceState: Bundle?) { - if (AppConfig.sharedElementEnterTransitionEnable) { - setEnterSharedElementCallback(MaterialContainerTransformSharedElementCallback()) - setExitSharedElementCallback(MaterialContainerTransformSharedElementCallback()) - val transform = MaterialContainerTransform().apply { - addTarget(binding.root) - scrimColor = Color.TRANSPARENT - duration = delayMillis - } - window.sharedElementEnterTransition = transform - window.sharedElementReturnTransition = transform + + setEnterSharedElementCallback(MaterialContainerTransformSharedElementCallback()) + setExitSharedElementCallback(MaterialContainerTransformSharedElementCallback()) + val transform = MaterialContainerTransform().apply { + addTarget(binding.root) + scrimColor = Color.TRANSPARENT + duration = delayMillis } + window.sharedElementEnterTransition = transform + window.sharedElementReturnTransition = transform + super.onCreate(savedInstanceState) - if (AppConfig.sharedElementEnterTransitionEnable){ - binding.rootView.transitionName = intent.getStringExtra("transitionName") - } + + binding.rootView.transitionName = intent.getStringExtra("transitionName") + upScreenTimeOut() ReadBook.register(this) binding.readMenu.colorSurfaceContainer = diff --git a/app/src/main/java/io/legado/app/ui/book/read/page/entities/TextLine.kt b/app/src/main/java/io/legado/app/ui/book/read/page/entities/TextLine.kt index 010957683..3c72f810f 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/page/entities/TextLine.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/page/entities/TextLine.kt @@ -18,7 +18,6 @@ import io.legado.app.ui.book.read.page.provider.ChapterProvider import io.legado.app.utils.canvasrecorder.CanvasRecorderFactory import io.legado.app.utils.canvasrecorder.recordIfNeededThenDraw import io.legado.app.utils.dpToPx -import io.legado.app.utils.themeColor /** * 行信息 @@ -178,7 +177,7 @@ data class TextLine( ChapterProvider.contentPaint } val textColor = if (isReadAloud) { - view.context.themeColor(androidx.appcompat.R.attr.colorPrimary) + ReadBookConfig.menuColor } else { ReadBookConfig.textColor } diff --git a/app/src/main/java/io/legado/app/ui/main/bookshelf/books/BooksFragment.kt b/app/src/main/java/io/legado/app/ui/main/bookshelf/books/BooksFragment.kt index 19b7393d5..a2d802c94 100644 --- a/app/src/main/java/io/legado/app/ui/main/bookshelf/books/BooksFragment.kt +++ b/app/src/main/java/io/legado/app/ui/main/bookshelf/books/BooksFragment.kt @@ -45,6 +45,8 @@ import io.legado.app.utils.bookshelfLayoutGrid import io.legado.app.utils.bookshelfLayoutMode import io.legado.app.utils.cnCompare import io.legado.app.utils.observeEvent +import io.legado.app.utils.startActivity +import io.legado.app.utils.startActivityForBook import io.legado.app.utils.viewbindingdelegate.viewBinding import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Job @@ -290,46 +292,60 @@ class BooksFragment() : BaseFragment(R.layout.fragment_books), } override fun open(book: Book, sharedView: View) { - val transitionName = "book_${book.bookUrl}" - sharedView.transitionName = transitionName + if (AppConfig.sharedElementEnterTransitionEnable){ + val transitionName = "book_${book.bookUrl}" + sharedView.transitionName = transitionName - val cls = when { - book.isAudio -> AudioPlayActivity::class.java - book.isImage && AppConfig.showMangaUi -> ReadMangaActivity::class.java - else -> ReadBookActivity::class.java + val cls = when { + book.isAudio -> AudioPlayActivity::class.java + book.isImage && AppConfig.showMangaUi -> ReadMangaActivity::class.java + else -> ReadBookActivity::class.java + } + + val intent = Intent(requireContext(), cls).apply { + putExtra("bookUrl", book.bookUrl) + putExtra("transitionName", transitionName) + } + + val options = ActivityOptionsCompat.makeSceneTransitionAnimation( + requireActivity(), + sharedView, + transitionName + ) + + startActivity(intent, options.toBundle()) + } else { + startActivityForBook(book) } - - val intent = Intent(requireContext(), cls).apply { - putExtra("bookUrl", book.bookUrl) - putExtra("transitionName", transitionName) - } - - val options = ActivityOptionsCompat.makeSceneTransitionAnimation( - requireActivity(), - sharedView, - transitionName - ) - - startActivity(intent, options.toBundle()) } override fun openBookInfo(book: Book, sharedView: View) { - val intent = Intent(requireContext(), BookInfoActivity::class.java).apply { - putExtra("name", book.name) - putExtra("author", book.author) - putExtra("bookUrl", book.bookUrl) - putExtra("transitionName", "book_${book.bookUrl}") // 给共享元素唯一标识 + if (AppConfig.sharedElementEnterTransitionEnable){ + val intent = Intent(requireContext(), BookInfoActivity::class.java).apply { + putExtra("name", book.name) + putExtra("author", book.author) + putExtra("bookUrl", book.bookUrl) + putExtra("transitionName", "book_${book.bookUrl}") + } + + sharedView.transitionName = "book_${book.bookUrl}" + + val options = ActivityOptionsCompat.makeSceneTransitionAnimation( + requireActivity(), + sharedView, + sharedView.transitionName + ) + + startActivity(intent, options.toBundle()) + } else { + startActivity { + putExtra("name", book.name) + putExtra("author", book.author) + putExtra("bookUrl", book.bookUrl) + } + } - sharedView.transitionName = "book_${book.bookUrl}" - - val options = ActivityOptionsCompat.makeSceneTransitionAnimation( - requireActivity(), - sharedView, - sharedView.transitionName - ) - - startActivity(intent, options.toBundle()) } diff --git a/app/src/main/java/io/legado/app/ui/main/bookshelf/books/BookshelfFragment2.kt b/app/src/main/java/io/legado/app/ui/main/bookshelf/books/BookshelfFragment2.kt index 3f570a7b9..7cca0c1e6 100644 --- a/app/src/main/java/io/legado/app/ui/main/bookshelf/books/BookshelfFragment2.kt +++ b/app/src/main/java/io/legado/app/ui/main/bookshelf/books/BookshelfFragment2.kt @@ -49,6 +49,8 @@ import io.legado.app.utils.cnCompare import io.legado.app.utils.flowWithLifecycleAndDatabaseChangeFirst import io.legado.app.utils.observeEvent import io.legado.app.utils.showDialogFragment +import io.legado.app.utils.startActivity +import io.legado.app.utils.startActivityForBook import io.legado.app.utils.viewbindingdelegate.viewBinding import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Job @@ -338,62 +340,86 @@ class BookshelfFragment2() : BaseBookshelfFragment(R.layout.fragment_bookshelf2) } override fun onItemClick(item: Any, sharedView: View) { - when (item) { - is Book -> { - val transitionName = "book_${item.bookUrl}" - sharedView.transitionName = transitionName + if (AppConfig.sharedElementEnterTransitionEnable){ + when (item) { + is Book -> { + val transitionName = "book_${item.bookUrl}" + sharedView.transitionName = transitionName - val cls = when { - item.isAudio -> AudioPlayActivity::class.java - item.isImage && AppConfig.showMangaUi -> ReadMangaActivity::class.java - else -> ReadBookActivity::class.java + val cls = when { + item.isAudio -> AudioPlayActivity::class.java + item.isImage && AppConfig.showMangaUi -> ReadMangaActivity::class.java + else -> ReadBookActivity::class.java + } + + val intent = Intent(requireContext(), cls).apply { + putExtra("bookUrl", item.bookUrl) + putExtra("transitionName", transitionName) + } + + val options = ActivityOptionsCompat.makeSceneTransitionAnimation( + requireActivity(), + sharedView, + transitionName + ) + + startActivity(intent, options.toBundle()) } - val intent = Intent(requireContext(), cls).apply { - putExtra("bookUrl", item.bookUrl) - putExtra("transitionName", transitionName) + is BookGroup -> { + groupId = item.groupId + initBooksData() + groupIdChangeListener?.onGroupIdChanged() + updateBackCallbackState() } - - val options = ActivityOptionsCompat.makeSceneTransitionAnimation( - requireActivity(), - sharedView, - transitionName - ) - - startActivity(intent, options.toBundle()) } + } else { + when (item) { + is Book -> startActivityForBook(item) - is BookGroup -> { - groupId = item.groupId - initBooksData() - groupIdChangeListener?.onGroupIdChanged() - updateBackCallbackState() + is BookGroup -> { + groupId = item.groupId + initBooksData() + } } } + } override fun onItemLongClick(item: Any, sharedView: View) { - when (item) { - is Book -> { - val intent = Intent(requireContext(), BookInfoActivity::class.java).apply { + if (AppConfig.sharedElementEnterTransitionEnable){ + when (item) { + is Book -> { + val intent = Intent(requireContext(), BookInfoActivity::class.java).apply { + putExtra("name", item.name) + putExtra("author", item.author) + putExtra("bookUrl", item.bookUrl) + putExtra("transitionName", "book_${item.bookUrl}") // 给共享元素唯一标识 + } + + sharedView.transitionName = "book_${item.bookUrl}" + + val options = ActivityOptionsCompat.makeSceneTransitionAnimation( + requireActivity(), + sharedView, + sharedView.transitionName + ) + + startActivity(intent, options.toBundle()) + } + + is BookGroup -> showDialogFragment(GroupEditDialog(item)) + } + } else { + when (item) { + is Book -> startActivity { putExtra("name", item.name) putExtra("author", item.author) putExtra("bookUrl", item.bookUrl) - putExtra("transitionName", "book_${item.bookUrl}") // 给共享元素唯一标识 } - sharedView.transitionName = "book_${item.bookUrl}" - - val options = ActivityOptionsCompat.makeSceneTransitionAnimation( - requireActivity(), - sharedView, - sharedView.transitionName - ) - - startActivity(intent, options.toBundle()) + is BookGroup -> showDialogFragment(GroupEditDialog(item)) } - - is BookGroup -> showDialogFragment(GroupEditDialog(item)) } } diff --git a/app/src/main/res/layout/dialog_read_book_style.xml b/app/src/main/res/layout/dialog_read_book_style.xml index 4db140d18..1f64f44f8 100644 --- a/app/src/main/res/layout/dialog_read_book_style.xml +++ b/app/src/main/res/layout/dialog_read_book_style.xml @@ -184,6 +184,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingHorizontal="16dp" + android:layout_marginVertical="8dp" app:singleLine="true" app:singleSelection="true" app:selectionRequired="true"> @@ -301,6 +302,7 @@ - + android:layout_height="wrap_content" + app:cardBackgroundColor="@android:color/transparent" + android:layout_marginBottom="4dp" + android:clickable="true" + android:focusable="true" + app:strokeWidth="0dp" + app:layout_constraintTop_toTopOf="parent"> - + android:orientation="vertical"> - + android:layout_height="match_parent" + app:cardCornerRadius="6dp" + android:layout_marginHorizontal="8dp" + android:layout_marginTop="8dp" + android:transitionName="img_cover" + app:strokeWidth="0dp"> - + android:layout_height="wrap_content"> - + android:layout_height="match_parent" + android:scaleType="centerCrop" + android:src="@drawable/image_cover_default" + tools:ignore="ImageContrastCheck" /> - + - + - + android:textColor="?attr/colorOnSecondary" + android:textSize="10sp" + android:padding="4dp" + android:textStyle="bold" + android:includeFontPadding="false" + tools:text="5" + tools:ignore="SmallSp" /> - + - + - + - + + + + - - - - - diff --git a/app/src/main/res/layout/item_bookshelf_grid_group.xml b/app/src/main/res/layout/item_bookshelf_grid_group.xml index 461ec512f..d26a54877 100644 --- a/app/src/main/res/layout/item_bookshelf_grid_group.xml +++ b/app/src/main/res/layout/item_bookshelf_grid_group.xml @@ -1,156 +1,151 @@ - + android:layout_height="wrap_content" + android:layout_marginBottom="4dp" + android:foreground="?attr/selectableItemBackground" + android:clickable="true" + android:focusable="true" + app:strokeWidth="0dp" + app:layout_constraintTop_toTopOf="parent"> - + android:orientation="vertical"> - + android:layout_height="match_parent" + app:cardCornerRadius="6dp" + android:layout_marginHorizontal="8dp" + android:layout_marginTop="8dp" + android:transitionName="img_cover" + app:strokeWidth="0dp"> - + android:layout_height="wrap_content"> - + android:layout_height="match_parent" + android:scaleType="centerCrop" + android:src="?attr/colorSurfaceVariant" + tools:ignore="ImageContrastCheck" /> - + - + - + android:textColor="?attr/colorSurface" + android:textSize="10sp" + android:padding="4dp" + android:textStyle="bold" + android:includeFontPadding="false" + tools:text="5" + tools:ignore="SmallSp" /> - + - + - + - + - + - + - + - - - - - - - + + + + diff --git a/app/src/main/res/layout/item_bookshelf_list.xml b/app/src/main/res/layout/item_bookshelf_list.xml index 123c2a8a4..78581d7b7 100644 --- a/app/src/main/res/layout/item_bookshelf_list.xml +++ b/app/src/main/res/layout/item_bookshelf_list.xml @@ -19,58 +19,69 @@ android:id="@+id/cd_cover" android:layout_width="wrap_content" android:layout_height="wrap_content" + app:cardCornerRadius="6dp" + app:strokeWidth="0dp" android:layout_margin="8dp" - app:strokeWidth="0dp" - app:cardCornerRadius="8dp" - app:layout_constraintTop_toTopOf="parent" + android:transitionName="img_cover" app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" app:layout_constraintBottom_toBottomOf="parent"> - - + android:layout_height="98dp"> - + - + - + + + + + + 隐私 通知权限 后台权限 - 从书架进入阅读界面时,优化动画效果。 + 从书架进入阅读界面时,优化动画效果。在某些设备上可能无法正常工作 使用共享元素动画 - 减少进入阅读界面时的卡顿,但加载书籍时间会延长。 + 减少进入阅读界面时的卡顿,但加载书籍时间会延长。仅在开启共享元素动画时生效 延缓书籍加载 紧凑列表 %s • %d章未读 diff --git a/app/src/main/res/xml/pref_config_other.xml b/app/src/main/res/xml/pref_config_other.xml index 77c46cbca..5c0a85063 100644 --- a/app/src/main/res/xml/pref_config_other.xml +++ b/app/src/main/res/xml/pref_config_other.xml @@ -162,7 +162,7 @@ app:layout="@layout/view_preference_category"> diff --git a/app/version.properties b/app/version.properties index 4b3e2d928..0041ddb65 100644 --- a/app/version.properties +++ b/app/version.properties @@ -1,4 +1,4 @@ VERSION_MAJOR=3 VERSION_MINOR=26 VERSION_PATCH=3 -VERSION_SUFFIX=-beta.6 \ No newline at end of file +VERSION_SUFFIX= \ No newline at end of file