miroir de https://git.suyu.dev/suyu/suyu.git
85 lignes
3.2 KiB
Kotlin
85 lignes
3.2 KiB
Kotlin
// SPDX-FileCopyrightText: 2023 yuzu Emulator Project
|
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
|
|
|
package dev.suyu.suyu_emu.adapters
|
|
|
|
import android.view.LayoutInflater
|
|
import android.view.ViewGroup
|
|
import androidx.appcompat.app.AppCompatActivity
|
|
import androidx.core.content.ContextCompat
|
|
import androidx.core.content.res.ResourcesCompat
|
|
import androidx.lifecycle.LifecycleOwner
|
|
import dev.suyu.suyu_emu.R
|
|
import dev.suyu.suyu_emu.databinding.CardHomeOptionBinding
|
|
import dev.suyu.suyu_emu.fragments.MessageDialogFragment
|
|
import dev.suyu.suyu_emu.model.HomeSetting
|
|
import dev.suyu.suyu_emu.utils.ViewUtils.marquee
|
|
import dev.suyu.suyu_emu.utils.ViewUtils.setVisible
|
|
import dev.suyu.suyu_emu.utils.collect
|
|
import dev.suyu.suyu_emu.viewholder.AbstractViewHolder
|
|
|
|
class HomeSettingAdapter(
|
|
private val activity: AppCompatActivity,
|
|
private val viewLifecycle: LifecycleOwner,
|
|
options: List<HomeSetting>
|
|
) : AbstractListAdapter<HomeSetting, HomeSettingAdapter.HomeOptionViewHolder>(options) {
|
|
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): HomeOptionViewHolder {
|
|
CardHomeOptionBinding.inflate(LayoutInflater.from(parent.context), parent, false)
|
|
.also { return HomeOptionViewHolder(it) }
|
|
}
|
|
|
|
inner class HomeOptionViewHolder(val binding: CardHomeOptionBinding) :
|
|
AbstractViewHolder<HomeSetting>(binding) {
|
|
override fun bind(model: HomeSetting) {
|
|
binding.optionTitle.text = activity.resources.getString(model.titleId)
|
|
binding.optionDescription.text = activity.resources.getString(model.descriptionId)
|
|
binding.optionIcon.setImageDrawable(
|
|
ResourcesCompat.getDrawable(
|
|
activity.resources,
|
|
model.iconId,
|
|
activity.theme
|
|
)
|
|
)
|
|
|
|
when (model.titleId) {
|
|
R.string.get_early_access ->
|
|
binding.optionLayout.background =
|
|
ContextCompat.getDrawable(
|
|
binding.optionCard.context,
|
|
R.drawable.premium_background
|
|
)
|
|
}
|
|
|
|
if (!model.isEnabled.invoke()) {
|
|
binding.optionTitle.alpha = 0.5f
|
|
binding.optionDescription.alpha = 0.5f
|
|
binding.optionIcon.alpha = 0.5f
|
|
}
|
|
|
|
model.details.collect(viewLifecycle) { updateOptionDetails(it) }
|
|
binding.optionDetail.marquee()
|
|
|
|
binding.root.setOnClickListener { onClick(model) }
|
|
}
|
|
|
|
private fun onClick(model: HomeSetting) {
|
|
if (model.isEnabled.invoke()) {
|
|
model.onClick.invoke()
|
|
} else {
|
|
MessageDialogFragment.newInstance(
|
|
activity,
|
|
titleId = model.disabledTitleId,
|
|
descriptionId = model.disabledMessageId
|
|
).show(activity.supportFragmentManager, MessageDialogFragment.TAG)
|
|
}
|
|
}
|
|
|
|
private fun updateOptionDetails(detailString: String) {
|
|
if (detailString.isNotEmpty()) {
|
|
binding.optionDetail.text = detailString
|
|
binding.optionDetail.setVisible(true)
|
|
}
|
|
}
|
|
}
|
|
}
|