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">