From 4de28ce14dc0f001ba94a23f7f806668b2b88438 Mon Sep 17 00:00:00 2001 From: Damontecres <154766448+damontecres@users.noreply.github.com> Date: Mon, 19 Feb 2024 18:39:11 -0500 Subject: [PATCH] Add option to scroll long scene details text --- .../damontecres/stashapp/PerformerFragment.kt | 10 ++------ .../presenters/DetailsDescriptionPresenter.kt | 14 +++++++++++ .../damontecres/stashapp/util/Constants.kt | 20 +++++++++++++++ .../res/layout/lb_details_description.xml | 25 +++++++++++++------ app/src/main/res/values/dimens.xml | 2 +- app/src/main/res/xml/root_preferences.xml | 9 +++++-- 6 files changed, 61 insertions(+), 19 deletions(-) diff --git a/app/src/main/java/com/github/damontecres/stashapp/PerformerFragment.kt b/app/src/main/java/com/github/damontecres/stashapp/PerformerFragment.kt index 03cd9f3e..a4782195 100644 --- a/app/src/main/java/com/github/damontecres/stashapp/PerformerFragment.kt +++ b/app/src/main/java/com/github/damontecres/stashapp/PerformerFragment.kt @@ -21,6 +21,7 @@ import com.github.damontecres.stashapp.presenters.StashPresenter import com.github.damontecres.stashapp.util.QueryEngine import com.github.damontecres.stashapp.util.ageInYears import com.github.damontecres.stashapp.util.createGlideUrl +import com.github.damontecres.stashapp.util.onlyScrollIfNeeded import kotlinx.coroutines.CoroutineExceptionHandler import kotlinx.coroutines.launch import kotlin.math.floor @@ -130,14 +131,7 @@ class PerformerFragment : Fragment(R.layout.performer_view) { override fun onResume() { super.onResume() val scrollView = requireView().findViewById(R.id.performer_scrollview) - - scrollView.viewTreeObserver.addOnGlobalLayoutListener { - val childHeight = scrollView.getChildAt(0).height - val isScrollable = - scrollView.height < childHeight + scrollView.paddingTop + scrollView.paddingBottom - Log.v(TAG, "isScrollable=$isScrollable") - scrollView.isFocusable = isScrollable - } + scrollView.onlyScrollIfNeeded() } private fun addRow( diff --git a/app/src/main/java/com/github/damontecres/stashapp/presenters/DetailsDescriptionPresenter.kt b/app/src/main/java/com/github/damontecres/stashapp/presenters/DetailsDescriptionPresenter.kt index 717ac503..e8ed7f0f 100644 --- a/app/src/main/java/com/github/damontecres/stashapp/presenters/DetailsDescriptionPresenter.kt +++ b/app/src/main/java/com/github/damontecres/stashapp/presenters/DetailsDescriptionPresenter.kt @@ -5,13 +5,16 @@ import android.view.View import android.widget.RatingBar import android.widget.SeekBar import android.widget.TextView +import androidx.core.widget.NestedScrollView import androidx.leanback.widget.AbstractDetailsDescriptionPresenter +import androidx.preference.PreferenceManager import com.github.damontecres.stashapp.R import com.github.damontecres.stashapp.StashOnFocusChangeListener import com.github.damontecres.stashapp.api.fragment.SlimSceneData import com.github.damontecres.stashapp.util.Constants import com.github.damontecres.stashapp.util.ServerPreferences import com.github.damontecres.stashapp.util.concatIfNotBlank +import com.github.damontecres.stashapp.util.onlyScrollIfNeeded import com.github.damontecres.stashapp.util.titleOrFilename class DetailsDescriptionPresenter(val ratingCallback: RatingCallback) : @@ -25,6 +28,17 @@ class DetailsDescriptionPresenter(val ratingCallback: RatingCallback) : viewHolder.title.text = scene.titleOrFilename viewHolder.body.text = scene.details + val scrollView = viewHolder.view.findViewById(R.id.description_scrollview) + val useScrollbar = + PreferenceManager.getDefaultSharedPreferences(viewHolder.view.context) + .getBoolean("scrollSceneDetails", true) + if (useScrollbar) { + scrollView.onlyScrollIfNeeded() + } else { + scrollView.isFocusable = false + scrollView.isVerticalScrollBarEnabled = false + } + val file = scene.files.firstOrNull() if (file != null) { val resolution = "${file.videoFileData.height}P" diff --git a/app/src/main/java/com/github/damontecres/stashapp/util/Constants.kt b/app/src/main/java/com/github/damontecres/stashapp/util/Constants.kt index 1025d857..65cf4497 100644 --- a/app/src/main/java/com/github/damontecres/stashapp/util/Constants.kt +++ b/app/src/main/java/com/github/damontecres/stashapp/util/Constants.kt @@ -7,9 +7,11 @@ import android.os.Build import android.text.TextUtils import android.util.Log import android.util.TypedValue +import android.widget.ScrollView import android.widget.TextView import android.widget.Toast import androidx.annotation.RequiresApi +import androidx.core.widget.NestedScrollView import androidx.preference.PreferenceManager import com.apollographql.apollo3.ApolloClient import com.apollographql.apollo3.api.Optional @@ -394,3 +396,21 @@ val PerformerData.ageInYears: Int? } else { null } + +fun ScrollView.onlyScrollIfNeeded() { + viewTreeObserver.addOnGlobalLayoutListener { + val childHeight = getChildAt(0).height + val isScrollable = + height < childHeight + paddingTop + paddingBottom + isFocusable = isScrollable + } +} + +fun NestedScrollView.onlyScrollIfNeeded() { + viewTreeObserver.addOnGlobalLayoutListener { + val childHeight = getChildAt(0).height + val isScrollable = + height < childHeight + paddingTop + paddingBottom + isFocusable = isScrollable + } +} diff --git a/app/src/main/res/layout/lb_details_description.xml b/app/src/main/res/layout/lb_details_description.xml index 52546651..efeeb043 100644 --- a/app/src/main/res/layout/lb_details_description.xml +++ b/app/src/main/res/layout/lb_details_description.xml @@ -1,7 +1,7 @@ @@ -45,13 +45,22 @@ android:id="@+id/lb_details_description_subtitle" android:layout_width="wrap_content" android:layout_height="wrap_content" - style="?attr/detailsDescriptionSubtitleStyle" - /> + style="?attr/detailsDescriptionSubtitleStyle" /> - + android:paddingBottom="25dp" + android:fadeScrollbars="false" + android:scrollbars="vertical" + android:scrollbarAlwaysDrawVerticalTrack="true" + android:scrollbarThumbVertical="@color/focus_color"> + + + diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index 59a99cdd..ae160e92 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -1,5 +1,5 @@ - 18 + 1000 60dp 10dp 13sp diff --git a/app/src/main/res/xml/root_preferences.xml b/app/src/main/res/xml/root_preferences.xml index 28a09bf1..0fed2a03 100644 --- a/app/src/main/res/xml/root_preferences.xml +++ b/app/src/main/res/xml/root_preferences.xml @@ -81,8 +81,13 @@ app:key="scrollToNextResult" app:title="Scroll to next on View All" app:summary="Automatically scroll down to the 'next' results when clicking View All on main page" - app:defaultValue="true" - /> + app:defaultValue="true" /> +