Remove header rom filter

This commit is contained in:
Dima 2023-04-07 18:11:52 +03:00 committed by Billy Laws
parent d3d36c6fa0
commit 1841727c56
8 changed files with 16 additions and 138 deletions

View File

@ -16,9 +16,7 @@ import androidx.activity.result.contract.ActivityResultContracts
import androidx.activity.viewModels import androidx.activity.viewModels
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.app.AppCompatDelegate import androidx.appcompat.app.AppCompatDelegate
import androidx.core.content.ContextCompat
import androidx.core.content.res.use import androidx.core.content.res.use
import androidx.core.graphics.drawable.toBitmap
import androidx.core.view.WindowCompat import androidx.core.view.WindowCompat
import androidx.core.view.isInvisible import androidx.core.view.isInvisible
import androidx.core.view.isVisible import androidx.core.view.isVisible
@ -32,7 +30,6 @@ import emu.skyline.adapter.*
import emu.skyline.data.AppItem import emu.skyline.data.AppItem
import emu.skyline.data.AppItemTag import emu.skyline.data.AppItemTag
import emu.skyline.data.DataItem import emu.skyline.data.DataItem
import emu.skyline.data.HeaderItem
import emu.skyline.databinding.MainActivityBinding import emu.skyline.databinding.MainActivityBinding
import emu.skyline.loader.AppEntry import emu.skyline.loader.AppEntry
import emu.skyline.loader.LoaderResult import emu.skyline.loader.LoaderResult
@ -117,12 +114,6 @@ class MainActivity : AppCompatActivity() {
PreferenceManager.setDefaultValues(this, R.xml.emulation_preferences, false) PreferenceManager.setDefaultValues(this, R.xml.emulation_preferences, false)
adapter.apply { adapter.apply {
setHeaderItems(listOf(HeaderRomFilterItem(formatOrder, if (appSettings.romFormatFilter == 0) null else formatOrder[appSettings.romFormatFilter - 1]) { romFormat ->
appSettings.romFormatFilter = romFormat?.let { formatOrder.indexOf(romFormat) + 1 } ?: 0
formatFilter = romFormat
populateAdapter()
}))
setOnFilterPublishedListener { setOnFilterPublishedListener {
binding.appList.post { binding.appList.smoothScrollToPosition(0) } binding.appList.post { binding.appList.smoothScrollToPosition(0) }
} }
@ -230,7 +221,6 @@ class MainActivity : AppCompatActivity() {
val formats = formatFilter?.let { listOf(it) } ?: formatOrder val formats = formatFilter?.let { listOf(it) } ?: formatOrder
for (format in formats) { for (format in formats) {
entries[format]?.let { entries[format]?.let {
add(HeaderItem(format.name))
for (entry in sortGameList(it)) { for (entry in sortGameList(it)) {
add(AppItem(entry)) add(AppItem(entry))
} }
@ -304,14 +294,18 @@ class MainActivity : AppCompatActivity() {
} }
private fun populateAdapter() { private fun populateAdapter() {
binding.textTitle.text = null
binding.textTitle.visibility = View.GONE
val items = getDataItems() val items = getDataItems()
adapter.setItems(items.map { adapter.setItems(items.map {
when (it) { when (it) {
is HeaderItem -> HeaderViewItem(it.title)
is AppItem -> it.toViewItem() is AppItem -> it.toViewItem()
} }
}) })
if (items.isEmpty()) adapter.setItems(listOf(HeaderViewItem(getString(R.string.no_rom)))) if (items.isEmpty()) {
binding.textTitle.visibility = View.VISIBLE
binding.textTitle.text = getString(R.string.no_rom)
}
} }
override fun onStart() { override fun onStart() {

View File

@ -1,44 +0,0 @@
/*
* SPDX-License-Identifier: MPL-2.0
* Copyright © 2021 Skyline Team and Contributors (https://github.com/skyline-emu/)
*/
package emu.skyline.adapter
import android.view.ViewGroup
import com.google.android.material.chip.Chip
import emu.skyline.R
import emu.skyline.databinding.HeaderRomFilterBinding
import emu.skyline.loader.RomFormat
object HeaderRomFilterBindingFactory : ViewBindingFactory {
override fun createBinding(parent : ViewGroup) = HeaderRomFilterBinding.inflate(parent.inflater(), parent, false)
}
typealias OnFilterClickedListener = (format : RomFormat?) -> Unit
class HeaderRomFilterItem(private val formats : List<RomFormat>, selectedFormat : RomFormat?, private val onFilterClickedListener : OnFilterClickedListener) : GenericListItem<HeaderRomFilterBinding>() {
private var selection = selectedFormat?.let { formats.indexOf(it) + 1 } ?: 0
override fun getViewBindingFactory() = HeaderRomFilterBindingFactory
override fun bind(holder : GenericViewHolder<HeaderRomFilterBinding>, position : Int) {
val binding = holder.binding
binding.chipGroup.removeViews(1, binding.chipGroup.childCount - 1)
for (format in formats) {
binding.chipGroup.addView(Chip(binding.root.context, null, R.attr.chipChoiceStyle).apply { text = format.name })
}
binding.chipGroup.setOnCheckedChangeListener { group, checkedId ->
for (i in 0 until group.childCount) {
if (group.getChildAt(i).id == checkedId) {
selection = i
onFilterClickedListener(if (i == 0) null else formats[i - 1])
break
}
}
}
binding.chipGroup.check(binding.chipGroup.getChildAt(selection).id)
}
override val fullSpan = true
}

View File

@ -1,27 +0,0 @@
/*
* SPDX-License-Identifier: MPL-2.0
* Copyright © 2020 Skyline Team and Contributors (https://github.com/skyline-emu/)
*/
package emu.skyline.adapter
import android.view.ViewGroup
import emu.skyline.databinding.SectionItemBinding
object HeaderBindingFactory : ViewBindingFactory {
override fun createBinding(parent : ViewGroup) = SectionItemBinding.inflate(parent.inflater(), parent, false)
}
class HeaderViewItem(private val text : String) : GenericListItem<SectionItemBinding>() {
override fun getViewBindingFactory() = HeaderBindingFactory
override fun bind(holder : GenericViewHolder<SectionItemBinding>, position : Int) {
holder.binding.textTitle.text = text
}
override fun toString() = ""
override fun areItemsTheSame(other : GenericListItem<SectionItemBinding>) = other is HeaderViewItem && text == other.text
override val fullSpan = true
}

View File

@ -25,8 +25,6 @@ private val missingIcon by lazy { ContextCompat.getDrawable(SkylineApplication.i
sealed class DataItem : Serializable sealed class DataItem : Serializable
class HeaderItem(val title : String) : DataItem()
/** /**
* This class is a wrapper around [AppEntry], it is used for passing around game metadata * This class is a wrapper around [AppEntry], it is used for passing around game metadata
*/ */

View File

@ -7,13 +7,11 @@ package emu.skyline.input
import android.content.Intent import android.content.Intent
import android.graphics.Canvas import android.graphics.Canvas
import android.graphics.Color
import android.os.Bundle import android.os.Bundle
import android.view.KeyEvent import android.view.KeyEvent
import android.view.ViewTreeObserver import android.view.ViewTreeObserver
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.coordinatorlayout.widget.CoordinatorLayout import androidx.coordinatorlayout.widget.CoordinatorLayout
import androidx.core.content.res.use
import androidx.core.view.WindowCompat import androidx.core.view.WindowCompat
import androidx.core.view.marginTop import androidx.core.view.marginTop
import androidx.recyclerview.widget.DividerItemDecoration import androidx.recyclerview.widget.DividerItemDecoration

View File

@ -1,40 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<HorizontalScrollView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:scrollbars="none"
tools:ignore="MissingConstraints">
<com.google.android.material.chip.ChipGroup
android:id="@+id/chip_group"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingStart="16dp"
android:paddingTop="16dp"
android:paddingEnd="16dp"
android:paddingBottom="4dp"
app:checkedChip="@id/all_chip"
app:chipSpacingHorizontal="16dp"
app:selectionRequired="true"
app:singleLine="true"
app:singleSelection="true">
<com.google.android.material.chip.Chip
android:id="@+id/all_chip"
style="?attr/chipChoiceStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/all" />
</com.google.android.material.chip.ChipGroup>
</HorizontalScrollView>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@ -113,6 +113,16 @@
app:cardUseCompatPadding="true" app:cardUseCompatPadding="true"
app:layout_constraintTop_toBottomOf="@id/sub_text" app:layout_constraintTop_toBottomOf="@id/sub_text"
app:shapeAppearance="@style/ShapeAppearance.Material3.Corner.ExtraLarge" /> app:shapeAppearance="@style/ShapeAppearance.Material3.Corner.ExtraLarge" />
<TextView
android:id="@+id/text_title"
style="?attr/textAppearanceTitleLarge"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="16dp"
android:layout_marginVertical="8dp"
android:textAlignment="viewStart"
app:layout_constraintTop_toBottomOf="@id/search_bar"/>
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>
</com.google.android.material.appbar.CollapsingToolbarLayout> </com.google.android.material.appbar.CollapsingToolbarLayout>
</com.google.android.material.appbar.AppBarLayout> </com.google.android.material.appbar.AppBarLayout>

View File

@ -1,11 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/text_title"
style="?attr/textAppearanceTitleLarge"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="16dp"
android:layout_marginVertical="8dp"
android:textAlignment="viewStart"
tools:text="NSP" />