Skip to content

Commit

Permalink
Customize card sizes (#130)
Browse files Browse the repository at this point in the history
Add a preference to set the size of cards. This replaces the number of
columns preference.
  • Loading branch information
damontecres authored Feb 22, 2024
1 parent f2c265e commit 0614596
Show file tree
Hide file tree
Showing 9 changed files with 88 additions and 18 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -15,13 +15,16 @@ import androidx.appcompat.widget.ListPopupWindow
import androidx.fragment.app.FragmentActivity
import androidx.leanback.widget.ClassPresenterSelector
import androidx.lifecycle.lifecycleScope
import androidx.preference.PreferenceManager
import com.apollographql.apollo3.api.Query
import com.github.damontecres.stashapp.api.fragment.MarkerData
import com.github.damontecres.stashapp.api.fragment.SavedFilterData
import com.github.damontecres.stashapp.api.type.FindFilterType
import com.github.damontecres.stashapp.api.type.SortDirectionEnum
import com.github.damontecres.stashapp.data.DataType
import com.github.damontecres.stashapp.presenters.MarkerPresenter
import com.github.damontecres.stashapp.presenters.PerformerPresenter
import com.github.damontecres.stashapp.presenters.ScenePresenter
import com.github.damontecres.stashapp.presenters.StashPresenter
import com.github.damontecres.stashapp.suppliers.MarkerDataSupplier
import com.github.damontecres.stashapp.suppliers.MovieDataSupplier
Expand All @@ -38,6 +41,7 @@ import com.github.damontecres.stashapp.util.SceneComparator
import com.github.damontecres.stashapp.util.StudioComparator
import com.github.damontecres.stashapp.util.TagComparator
import com.github.damontecres.stashapp.util.convertFilter
import com.github.damontecres.stashapp.util.getInt
import com.github.damontecres.stashapp.util.toPx
import kotlinx.coroutines.CoroutineExceptionHandler
import kotlinx.coroutines.launch
Expand Down Expand Up @@ -231,6 +235,12 @@ class FilterListActivity : FragmentActivity() {
findFilter: FindFilterType?,
objectFilter: Any?,
): StashGridFragment<out Query.Data, out Any> {
val cardSize =
PreferenceManager.getDefaultSharedPreferences(this)
.getInt("cardSize", getString(R.string.card_size_default))
val performerCardSize =
(cardSize * (ScenePresenter.CARD_WIDTH.toDouble() / PerformerPresenter.CARD_WIDTH)).toInt()
// TODO other sizes
return when (dataType) {
DataType.SCENE -> {
val sceneFilter =
Expand All @@ -250,6 +260,7 @@ class FilterListActivity : FragmentActivity() {
StashGridFragment(
PerformerComparator,
PerformerDataSupplier(findFilter, performerFilter),
performerCardSize,
)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ import com.github.damontecres.stashapp.util.StashCoroutineExceptionHandler
import com.github.damontecres.stashapp.util.Version
import com.github.damontecres.stashapp.util.convertFilter
import com.github.damontecres.stashapp.util.getCaseInsensitive
import com.github.damontecres.stashapp.util.getInt
import com.github.damontecres.stashapp.util.supportedFilterModes
import com.github.damontecres.stashapp.util.testStashConnection
import kotlinx.coroutines.CoroutineExceptionHandler
Expand All @@ -62,7 +63,8 @@ class MainFragment : BrowseSupportFragment() {
val apiKey = manager.getString("stashApiKey", null)
val maxSearchResults = manager.getInt("maxSearchResults", 0)
val playVideoPreviews = manager.getBoolean("playVideoPreviews", true)
return Objects.hash(url, apiKey, maxSearchResults, playVideoPreviews)
val columns = manager.getInt("cardSize", getString(R.string.card_size_default))
return Objects.hash(url, apiKey, maxSearchResults, playVideoPreviews, columns)
}

override fun onCreate(savedInstanceState: Bundle?) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package com.github.damontecres.stashapp
import android.os.Bundle
import androidx.fragment.app.FragmentActivity
import androidx.leanback.widget.ObjectAdapter
import androidx.preference.PreferenceManager
import com.apollographql.apollo3.api.Optional
import com.github.damontecres.stashapp.api.FindScenesQuery
import com.github.damontecres.stashapp.api.fragment.SlimSceneData
Expand All @@ -14,6 +15,7 @@ import com.github.damontecres.stashapp.api.type.SortDirectionEnum
import com.github.damontecres.stashapp.data.Performer
import com.github.damontecres.stashapp.suppliers.SceneDataSupplier
import com.github.damontecres.stashapp.util.SceneComparator
import com.github.damontecres.stashapp.util.getInt

class PerformerActivity : FragmentActivity() {
private lateinit var sceneFragment: StashGridFragment<FindScenesQuery.Data, SlimSceneData>
Expand All @@ -24,6 +26,12 @@ class PerformerActivity : FragmentActivity() {
if (savedInstanceState == null) {
val performer = this.intent.getParcelableExtra<Performer>("performer")

val cardSize =
PreferenceManager.getDefaultSharedPreferences(this)
.getInt("cardSize", getString(R.string.card_size_default))
// At medium size, 3 scenes fit in the space vs 5 normally
val columns = cardSize * 3 / 5

sceneFragment =
StashGridFragment(
SceneComparator,
Expand All @@ -42,7 +50,7 @@ class PerformerActivity : FragmentActivity() {
),
),
),
3,
columns,
)

supportFragmentManager.beginTransaction()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -305,7 +305,6 @@ class SettingsFragment : LeanbackSettingsFragmentCompat() {
findPreference<SeekBarPreference>("maxSearchResults")?.min = 5
findPreference<SeekBarPreference>("skip_back_time")?.min = 5
findPreference<SeekBarPreference>("skip_forward_time")?.min = 5
findPreference<SeekBarPreference>("numberOfColumns")?.min = 1
findPreference<SeekBarPreference>("searchDelay")?.min = 50
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import com.apollographql.apollo3.api.Query
import com.github.damontecres.stashapp.api.fragment.SavedFilterData
import com.github.damontecres.stashapp.presenters.StashPresenter
import com.github.damontecres.stashapp.suppliers.StashPagingSource
import com.github.damontecres.stashapp.util.getInt
import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.launch

Expand All @@ -28,23 +29,25 @@ class StashGridFragment<T : Query.Data, D : Any>(
comparator: DiffUtil.ItemCallback<D>,
private val dataSupplier: StashPagingSource.DataSupplier<T, D>,
val filter: SavedFilterData?,
private val numberOfColumns: Int? = null,
private val cardSize: Int? = null,
) : VerticalGridSupportFragment() {
constructor(
comparator: DiffUtil.ItemCallback<D>,
dataSupplier: StashPagingSource.DataSupplier<T, D>,
numberOfColumns: Int? = null,
) : this(StashPresenter.SELECTOR, comparator, dataSupplier, null, numberOfColumns)
cardSize: Int? = null,
) : this(StashPresenter.SELECTOR, comparator, dataSupplier, null, cardSize)

val mAdapter = PagingDataAdapter(presenter, comparator)

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)

val gridPresenter = StashGridPresenter()
gridPresenter.numberOfColumns =
numberOfColumns ?: PreferenceManager.getDefaultSharedPreferences(requireContext())
.getInt("numberOfColumns", 5)
val columns =
cardSize ?: PreferenceManager.getDefaultSharedPreferences(requireContext())
.getInt("cardSize", requireContext().getString(R.string.card_size_default))

gridPresenter.numberOfColumns = columns
setGridPresenter(gridPresenter)

adapter = mAdapter
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ import androidx.preference.PreferenceManager
import com.github.damontecres.stashapp.R
import com.github.damontecres.stashapp.StashExoPlayer
import com.github.damontecres.stashapp.data.DataType
import com.github.damontecres.stashapp.util.getInt
import com.github.damontecres.stashapp.util.isNotNullOrBlank
import java.util.EnumMap

Expand Down Expand Up @@ -110,9 +111,14 @@ class StashImageCardView(context: Context) : ImageCardView(context) {
width: Int,
height: Int,
) {
val cardSize =
PreferenceManager.getDefaultSharedPreferences(context)
.getInt("cardSize", context.getString(R.string.card_size_default))
val scaledWidth = (width * 5.0 / cardSize).toInt()
val scaledHeight = (height * 5.0 / cardSize).toInt()
val lp = mainView.layoutParams
lp.width = width
lp.height = height
lp.width = scaledWidth
lp.height = scaledHeight
mainView.layoutParams = lp
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package com.github.damontecres.stashapp.util

import android.annotation.SuppressLint
import android.content.Context
import android.content.SharedPreferences
import android.net.Uri
import android.os.Build
import android.text.TextUtils
Expand Down Expand Up @@ -418,3 +419,17 @@ fun NestedScrollView.onlyScrollIfNeeded() {
isFocusable = isScrollable
}
}

fun SharedPreferences.getStringNotNull(
key: String,
defValue: String,
): String {
return getString(key, defValue)!!
}

fun SharedPreferences.getInt(
key: String,
defValue: String,
): Int {
return getStringNotNull(key, defValue).toInt()
}
26 changes: 26 additions & 0 deletions app/src/main/res/values/arrays.xml
Original file line number Diff line number Diff line change
Expand Up @@ -15,4 +15,30 @@
<item>@string/playback_finished_return</item>
</string-array>

<string name="card_size_extra_small">Extra small</string>
<string name="card_size_small">Small</string>
<string name="card_size_medium">Medium</string>
<string name="card_size_large">Large</string>
<string name="card_size_extra_large">Extra Large</string>
<string-array name="card_sizes">
<item>@string/card_size_extra_small</item>
<item>@string/card_size_small</item>
<item>@string/card_size_medium</item>
<item>@string/card_size_large</item>
<item>@string/card_size_extra_large</item>
</string-array>

<string name="card_size_default">5</string>
<string-array name="card_size_cols">
<item>7</item>
<item>6</item>
<item>5</item>
<item>4</item>
<item>3</item>
</string-array>

<fraction name="card_zoom_extra_large">100%</fraction>
<fraction name="card_zoom_large">110%</fraction>
<fraction name="card_zoom">120%</fraction>

</resources>
14 changes: 7 additions & 7 deletions app/src/main/res/xml/root_preferences.xml
Original file line number Diff line number Diff line change
Expand Up @@ -69,13 +69,13 @@
app:summary="Submit PIN automatically when typed"
app:defaultValue="false" />

<SeekBarPreference
app:key="numberOfColumns"
app:title="Number of Columns"
app:seekBarIncrement="1"
app:showSeekBarValue="true"
android:max="12"
app:defaultValue="5" />
<ListPreference
app:key="cardSize"
app:title="Card size"
app:useSimpleSummaryProvider="true"
app:defaultValue="@string/card_size_default"
app:entries="@array/card_sizes"
app:entryValues="@array/card_size_cols" />

<SwitchPreference
app:key="scrollToNextResult"
Expand Down

0 comments on commit 0614596

Please sign in to comment.