|
|
|
@ -14,69 +14,37 @@ import androidx.lifecycle.Lifecycle |
|
|
|
import androidx.lifecycle.LifecycleOwner |
|
|
|
import androidx.lifecycle.lifecycleScope |
|
|
|
import androidx.lifecycle.repeatOnLifecycle |
|
|
|
import androidx.recyclerview.widget.RecyclerView |
|
|
|
import kotlinx.coroutines.launch |
|
|
|
import org.yuzu.yuzu_emu.R |
|
|
|
import org.yuzu.yuzu_emu.databinding.CardHomeOptionBinding |
|
|
|
import org.yuzu.yuzu_emu.fragments.MessageDialogFragment |
|
|
|
import org.yuzu.yuzu_emu.model.HomeSetting |
|
|
|
import org.yuzu.yuzu_emu.viewholder.AbstractViewHolder |
|
|
|
|
|
|
|
class HomeSettingAdapter( |
|
|
|
private val activity: AppCompatActivity, |
|
|
|
private val viewLifecycle: LifecycleOwner, |
|
|
|
var options: List<HomeSetting> |
|
|
|
) : |
|
|
|
RecyclerView.Adapter<HomeSettingAdapter.HomeOptionViewHolder>(), |
|
|
|
View.OnClickListener { |
|
|
|
options: List<HomeSetting> |
|
|
|
) : AbstractListAdapter<HomeSetting, HomeSettingAdapter.HomeOptionViewHolder>(options) { |
|
|
|
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): HomeOptionViewHolder { |
|
|
|
val binding = |
|
|
|
CardHomeOptionBinding.inflate(LayoutInflater.from(parent.context), parent, false) |
|
|
|
binding.root.setOnClickListener(this) |
|
|
|
return HomeOptionViewHolder(binding) |
|
|
|
} |
|
|
|
|
|
|
|
override fun getItemCount(): Int { |
|
|
|
return options.size |
|
|
|
} |
|
|
|
|
|
|
|
override fun onBindViewHolder(holder: HomeOptionViewHolder, position: Int) { |
|
|
|
holder.bind(options[position]) |
|
|
|
} |
|
|
|
|
|
|
|
override fun onClick(view: View) { |
|
|
|
val holder = view.tag as HomeOptionViewHolder |
|
|
|
if (holder.option.isEnabled.invoke()) { |
|
|
|
holder.option.onClick.invoke() |
|
|
|
} else { |
|
|
|
MessageDialogFragment.newInstance( |
|
|
|
activity, |
|
|
|
titleId = holder.option.disabledTitleId, |
|
|
|
descriptionId = holder.option.disabledMessageId |
|
|
|
).show(activity.supportFragmentManager, MessageDialogFragment.TAG) |
|
|
|
} |
|
|
|
CardHomeOptionBinding.inflate(LayoutInflater.from(parent.context), parent, false) |
|
|
|
.also { return HomeOptionViewHolder(it) } |
|
|
|
} |
|
|
|
|
|
|
|
inner class HomeOptionViewHolder(val binding: CardHomeOptionBinding) : |
|
|
|
RecyclerView.ViewHolder(binding.root) { |
|
|
|
lateinit var option: HomeSetting |
|
|
|
|
|
|
|
init { |
|
|
|
itemView.tag = this |
|
|
|
} |
|
|
|
|
|
|
|
fun bind(option: HomeSetting) { |
|
|
|
this.option = option |
|
|
|
binding.optionTitle.text = activity.resources.getString(option.titleId) |
|
|
|
binding.optionDescription.text = activity.resources.getString(option.descriptionId) |
|
|
|
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, |
|
|
|
option.iconId, |
|
|
|
model.iconId, |
|
|
|
activity.theme |
|
|
|
) |
|
|
|
) |
|
|
|
|
|
|
|
when (option.titleId) { |
|
|
|
when (model.titleId) { |
|
|
|
R.string.get_early_access -> |
|
|
|
binding.optionLayout.background = |
|
|
|
ContextCompat.getDrawable( |
|
|
|
@ -85,7 +53,7 @@ class HomeSettingAdapter( |
|
|
|
) |
|
|
|
} |
|
|
|
|
|
|
|
if (!option.isEnabled.invoke()) { |
|
|
|
if (!model.isEnabled.invoke()) { |
|
|
|
binding.optionTitle.alpha = 0.5f |
|
|
|
binding.optionDescription.alpha = 0.5f |
|
|
|
binding.optionIcon.alpha = 0.5f |
|
|
|
@ -93,7 +61,7 @@ class HomeSettingAdapter( |
|
|
|
|
|
|
|
viewLifecycle.lifecycleScope.launch { |
|
|
|
viewLifecycle.repeatOnLifecycle(Lifecycle.State.CREATED) { |
|
|
|
option.details.collect { updateOptionDetails(it) } |
|
|
|
model.details.collect { updateOptionDetails(it) } |
|
|
|
} |
|
|
|
} |
|
|
|
binding.optionDetail.postDelayed( |
|
|
|
@ -103,6 +71,20 @@ class HomeSettingAdapter( |
|
|
|
}, |
|
|
|
3000 |
|
|
|
) |
|
|
|
|
|
|
|
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) { |
|
|
|
|