diff --git a/app/src/main/java/org/koitharu/kotatsu/details/ui/DetailsActivity.kt b/app/src/main/java/org/koitharu/kotatsu/details/ui/DetailsActivity.kt
index ac747eb9b..923c7faf6 100644
--- a/app/src/main/java/org/koitharu/kotatsu/details/ui/DetailsActivity.kt
+++ b/app/src/main/java/org/koitharu/kotatsu/details/ui/DetailsActivity.kt
@@ -5,8 +5,13 @@ import android.content.Context
import android.content.Intent
import android.content.IntentFilter
import android.os.Bundle
+import android.transition.Slide
+import android.transition.TransitionManager
+import android.view.Gravity
import android.view.Menu
import android.view.View
+import android.view.ViewGroup
+import android.view.animation.AccelerateDecelerateInterpolator
import android.widget.Toast
import androidx.appcompat.widget.PopupMenu
import androidx.core.graphics.Insets
@@ -18,6 +23,7 @@ import com.google.android.material.badge.BadgeDrawable
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import com.google.android.material.snackbar.Snackbar
import dagger.hilt.android.AndroidEntryPoint
+import javax.inject.Inject
import kotlinx.coroutines.launch
import org.koitharu.kotatsu.R
import org.koitharu.kotatsu.base.domain.MangaIntent
@@ -36,7 +42,6 @@ import org.koitharu.kotatsu.parsers.model.Manga
import org.koitharu.kotatsu.reader.ui.ReaderActivity
import org.koitharu.kotatsu.reader.ui.ReaderState
import org.koitharu.kotatsu.utils.ext.*
-import javax.inject.Inject
@AndroidEntryPoint
class DetailsActivity :
@@ -159,8 +164,11 @@ class DetailsActivity :
private fun onMangaUpdated(manga: Manga) {
title = manga.title
- binding.buttonRead.isEnabled = !manga.chapters.isNullOrEmpty()
+ val hasChapters = !manga.chapters.isNullOrEmpty()
+ binding.buttonRead.isEnabled = hasChapters
invalidateOptionsMenu()
+ showBottomSheet(hasChapters)
+ binding.groupHeader?.isVisible = hasChapters
}
private fun onMangaRemoved(manga: Manga) {
@@ -192,7 +200,9 @@ class DetailsActivity :
Snackbar.LENGTH_LONG
},
)
- snackbar.anchorView = binding.headerChapters
+ if (binding.layoutBottom?.isVisible == true) {
+ snackbar.anchorView = binding.headerChapters
+ }
if (e.isReportable()) {
snackbar.setAction(R.string.details) {
MangaErrorDialog.show(supportFragmentManager, manga, e)
@@ -293,6 +303,16 @@ class DetailsActivity :
private fun isTabletLayout() = binding.layoutBottom == null
+ private fun showBottomSheet(isVisible: Boolean) {
+ val view = binding.layoutBottom ?: return
+ if (view.isVisible == isVisible) return
+ val transition = Slide(Gravity.BOTTOM)
+ transition.addTarget(view)
+ transition.interpolator = AccelerateDecelerateInterpolator()
+ TransitionManager.beginDelayedTransition(binding.root as ViewGroup, transition)
+ view.isVisible = isVisible
+ }
+
companion object {
fun newIntent(context: Context, manga: Manga): Intent {
diff --git a/app/src/main/java/org/koitharu/kotatsu/details/ui/DetailsFragment.kt b/app/src/main/java/org/koitharu/kotatsu/details/ui/DetailsFragment.kt
index 201a6a761..c3de6fa13 100644
--- a/app/src/main/java/org/koitharu/kotatsu/details/ui/DetailsFragment.kt
+++ b/app/src/main/java/org/koitharu/kotatsu/details/ui/DetailsFragment.kt
@@ -70,6 +70,7 @@ class DetailsFragment :
super.onViewCreated(view, savedInstanceState)
binding.textViewAuthor.setOnClickListener(this)
binding.imageViewCover.setOnClickListener(this)
+ binding.infoLayout.textViewSource.setOnClickListener(this)
binding.textViewDescription.movementMethod = LinkMovementMethod.getInstance()
binding.chipsTags.onChipClickListener = this
viewModel.manga.observe(viewLifecycleOwner, ::onMangaUpdated)
@@ -228,6 +229,14 @@ class DetailsFragment :
),
)
}
+ R.id.textView_source -> {
+ startActivity(
+ MangaListActivity.newIntent(
+ context = v.context,
+ source = manga.source,
+ ),
+ )
+ }
R.id.imageView_cover -> {
startActivity(
ImageActivity.newIntent(v.context, manga.largeCoverUrl.ifNullOrEmpty { manga.coverUrl }),
diff --git a/app/src/main/res/layout-w600dp/fragment_details.xml b/app/src/main/res/layout-w600dp/fragment_details.xml
index a9f6926dc..0244030a2 100644
--- a/app/src/main/res/layout-w600dp/fragment_details.xml
+++ b/app/src/main/res/layout-w600dp/fragment_details.xml
@@ -181,11 +181,11 @@
android:id="@+id/textView_description"
android:layout_width="0dp"
android:layout_height="wrap_content"
- android:layout_marginStart="16dp"
- android:layout_marginTop="8dp"
- android:layout_marginEnd="16dp"
- android:layout_marginBottom="16dp"
+ android:layout_marginStart="@dimen/margin_normal"
+ android:layout_marginTop="@dimen/margin_small"
+ android:layout_marginEnd="@dimen/margin_normal"
android:lineSpacingMultiplier="1.2"
+ android:paddingBottom="@dimen/margin_normal"
android:textAppearance="?attr/textAppearanceBodyMedium"
android:textIsSelectable="true"
app:layout_constraintEnd_toEndOf="parent"
diff --git a/app/src/main/res/layout-w720dp/activity_details.xml b/app/src/main/res/layout-w720dp/activity_details.xml
index 2fae1012e..91234ae5d 100644
--- a/app/src/main/res/layout-w720dp/activity_details.xml
+++ b/app/src/main/res/layout-w720dp/activity_details.xml
@@ -63,56 +63,66 @@
app:layout_constraintWidth_percent="0.5"
tools:layout="@layout/fragment_details" />
-
-
-
+ app:layout_constraintTop_toBottomOf="@id/appbar">
-
+
-
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/activity_details.xml b/app/src/main/res/layout/activity_details.xml
index 42d944b1b..13d34ca0d 100644
--- a/app/src/main/res/layout/activity_details.xml
+++ b/app/src/main/res/layout/activity_details.xml
@@ -42,9 +42,11 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
+ android:visibility="gone"
app:behavior_hideable="false"
app:layout_behavior="com.google.android.material.bottomsheet.BottomSheetBehavior"
- app:shapeAppearanceOverlay="@style/ShapeAppearanceOverlay.Kotatsu.BottomSheet">
+ app:shapeAppearanceOverlay="@style/ShapeAppearanceOverlay.Kotatsu.BottomSheet"
+ tools:visibility="visible">