skyline/app/src/main/java/emu/skyline/adapter/appdialog/GameInfoViewItem.kt

73 lines
3.1 KiB
Kotlin

/*
* SPDX-License-Identifier: MPL-2.0
* Copyright © 2022 Skyline Team and Contributors (https://github.com/skyline-emu/)
*/
package emu.skyline.adapter.appdialog
import android.content.ComponentName
import android.content.Context
import android.content.Intent
import android.content.pm.ShortcutInfo
import android.content.pm.ShortcutManager
import android.graphics.drawable.Icon
import android.view.View
import android.view.ViewGroup
import androidx.core.content.getSystemService
import androidx.core.graphics.drawable.toBitmap
import emu.skyline.EmulationActivity
import emu.skyline.R
import emu.skyline.adapter.GenericListItem
import emu.skyline.adapter.ViewBindingFactory
import emu.skyline.adapter.inflater
import emu.skyline.data.AppItem
import emu.skyline.databinding.AppDialogGameInfoBinding
import emu.skyline.loader.LoaderResult
import emu.skyline.network.TitleRating
object ControllerBindingFactory : ViewBindingFactory {
override fun createBinding(parent : ViewGroup) = AppDialogGameInfoBinding.inflate(parent.inflater(), parent, false)
}
class GameInfoViewItem(private val context : Context, private val item : AppItem, private val testedVersion : String?, private val rating : TitleRating?) : GenericListItem<AppDialogGameInfoBinding>() {
override fun getViewBindingFactory() = ControllerBindingFactory
override fun bind(binding : AppDialogGameInfoBinding, position : Int) {
val missingIcon = context.getDrawable(R.drawable.default_icon)!!.toBitmap(256, 256)
binding.gameIcon.setImageBitmap(item.icon ?: missingIcon)
binding.gameTitle.text = item.title
binding.gameSubtitle.text = item.subTitle ?: item.loaderResultString(context)
// Make the title text view selected for marquee to work
binding.gameTitle.isSelected = true
binding.gameSubtitle.isSelected = true
binding.flex.visibility = if (rating == null && testedVersion == null) View.INVISIBLE else View.VISIBLE
binding.ratingBar.rating = (rating ?: TitleRating.None).ordinal.toFloat()
binding.testedVersion.text = testedVersion?.let { context.getString(R.string.tested_on, it) } ?: context.getString(R.string.not_tested)
binding.gamePlay.isEnabled = item.loaderResult == LoaderResult.Success
binding.gamePlay.setOnClickListener {
context.startActivity(Intent(context, EmulationActivity::class.java).apply { data = item.uri })
}
val shortcutManager = context.getSystemService<ShortcutManager>()!!
binding.gamePin.isEnabled = shortcutManager.isRequestPinShortcutSupported
binding.gamePin.setOnClickListener {
val info = ShortcutInfo.Builder(context, item.title)
info.setShortLabel(item.title)
info.setActivity(ComponentName(context, EmulationActivity::class.java))
info.setIcon(Icon.createWithAdaptiveBitmap(item.icon ?: missingIcon))
val intent = Intent(context, EmulationActivity::class.java)
intent.data = item.uri
intent.action = Intent.ACTION_VIEW
info.setIntent(intent)
shortcutManager.requestPinShortcut(info.build(), null)
}
}
}