mirror of
https://github.com/skyline-emu/skyline.git
synced 2024-06-01 07:58:46 +02:00
80 lines
2.9 KiB
Kotlin
80 lines
2.9 KiB
Kotlin
/*
|
|
* SPDX-License-Identifier: MPL-2.0
|
|
* Copyright © 2023 Skyline Team and Contributors (https://github.com/skyline-emu/)
|
|
*/
|
|
|
|
package emu.skyline.emulation
|
|
|
|
import android.annotation.SuppressLint
|
|
import android.graphics.RenderEffect
|
|
import android.graphics.Shader
|
|
import android.os.Build
|
|
import android.os.Bundle
|
|
import android.view.LayoutInflater
|
|
import android.view.View
|
|
import android.view.ViewGroup
|
|
import androidx.fragment.app.Fragment
|
|
import com.google.android.renderscript.Toolkit
|
|
import emu.skyline.data.AppItem
|
|
import emu.skyline.data.AppItemTag
|
|
import emu.skyline.databinding.PipelineLoadingBinding
|
|
import emu.skyline.utils.serializable
|
|
|
|
private const val TotalPipelineCountTag = "PipelineLoadingFragment::TotalCount"
|
|
private const val PipelineProgressTag = "PipelineLoadingFragment::Progress"
|
|
|
|
class PipelineLoadingFragment : Fragment() {
|
|
private val item by lazy { requireArguments().serializable<AppItem>(AppItemTag)!! }
|
|
private val totalPipelineCount by lazy { requireArguments().getInt(TotalPipelineCountTag) }
|
|
|
|
private lateinit var binding : PipelineLoadingBinding
|
|
|
|
override fun onCreateView(inflater : LayoutInflater, container : ViewGroup?, savedInstanceState : Bundle?) = PipelineLoadingBinding.inflate(inflater).also { binding = it }.root
|
|
|
|
@SuppressLint("SetTextI18n")
|
|
override fun onViewCreated(view : View, savedInstanceState : Bundle?) {
|
|
super.onViewCreated(view, savedInstanceState)
|
|
|
|
binding.gameTitle.apply {
|
|
text = item.title
|
|
isSelected = true
|
|
}
|
|
binding.gameVersion.text = item.version
|
|
binding.gameIcon.setImageBitmap(item.bitmapIcon)
|
|
|
|
val progress = savedInstanceState?.getInt(PipelineProgressTag) ?: 0
|
|
binding.progressBar.max = totalPipelineCount
|
|
updateProgress(progress)
|
|
|
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
|
|
binding.backgroundImage.setImageBitmap(item.bitmapIcon)
|
|
binding.backgroundImage.setRenderEffect(RenderEffect.createBlurEffect(75f, 75f, Shader.TileMode.MIRROR))
|
|
} else {
|
|
binding.backgroundImage.setImageBitmap(Toolkit.blur(item.bitmapIcon, 15))
|
|
}
|
|
}
|
|
|
|
override fun onSaveInstanceState(outState : Bundle) {
|
|
super.onSaveInstanceState(outState)
|
|
outState.putInt(PipelineProgressTag, binding.progressBar.progress)
|
|
}
|
|
|
|
@SuppressLint("SetTextI18n")
|
|
fun updateProgress(progress : Int) {
|
|
if (!this::binding.isInitialized)
|
|
return
|
|
|
|
binding.progressBar.progress = progress
|
|
binding.progressLabel.text = "$progress/$totalPipelineCount (${(progress.toFloat() / totalPipelineCount * 100).toInt()}%)"
|
|
}
|
|
|
|
companion object {
|
|
fun newInstance(item : AppItem, totalPipelineCount : Int) = PipelineLoadingFragment().apply {
|
|
arguments = Bundle().apply {
|
|
putSerializable(AppItemTag, item)
|
|
putInt(TotalPipelineCountTag, totalPipelineCount)
|
|
}
|
|
}
|
|
}
|
|
}
|