OpenEUICC/app-unpriv/src/main/java/im/angry/openeuicc/ui/CompatibilityCheckActivity.kt
Peter Cai 3a0d805eb2
All checks were successful
/ build-debug (push) Successful in 4m48s
treewide: Nullability fixes for AOSP 14 r29
Mainly a treewide `findViewById` -> `requireViewById`, with
miscellaneous fixes.
2024-03-11 18:55:32 -04:00

94 lines
3.8 KiB
Kotlin

package im.angry.openeuicc.ui
import android.os.Bundle
import android.util.Log
import android.view.MenuItem
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.children
import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.DividerItemDecoration
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import im.angry.easyeuicc.R
import im.angry.openeuicc.util.*
import kotlinx.coroutines.launch
class CompatibilityCheckActivity: AppCompatActivity() {
private lateinit var compatibilityCheckList: RecyclerView
private val compatibilityChecks: List<CompatibilityCheck> by lazy { getCompatibilityChecks(this) }
private val adapter = CompatibilityChecksAdapter()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_compatibility_check)
setSupportActionBar(requireViewById(R.id.toolbar))
supportActionBar!!.setDisplayHomeAsUpEnabled(true)
compatibilityCheckList = requireViewById(R.id.recycler_view)
compatibilityCheckList.layoutManager =
LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false)
compatibilityCheckList.addItemDecoration(DividerItemDecoration(this, LinearLayoutManager.VERTICAL))
compatibilityCheckList.adapter = adapter
}
override fun onStart() {
super.onStart()
lifecycleScope.launch {
compatibilityChecks.executeAll { adapter.notifyDataSetChanged() }
}
}
override fun onOptionsItemSelected(item: MenuItem): Boolean =
when (item.itemId) {
android.R.id.home -> {
finish()
true
}
else -> super.onOptionsItemSelected(item)
}
inner class ViewHolder(private val root: View): RecyclerView.ViewHolder(root) {
private val titleView: TextView = root.requireViewById(R.id.compatibility_check_title)
private val descView: TextView = root.requireViewById(R.id.compatibility_check_desc)
private val statusContainer: ViewGroup = root.requireViewById(R.id.compatibility_check_status_container)
fun bindItem(item: CompatibilityCheck) {
titleView.text = item.title
descView.text = item.description
statusContainer.children.forEach {
it.visibility = View.GONE
}
when (item.state) {
CompatibilityCheck.State.SUCCESS -> {
root.requireViewById<View>(R.id.compatibility_check_checkmark).visibility = View.VISIBLE
}
CompatibilityCheck.State.FAILURE -> {
root.requireViewById<View>(R.id.compatibility_check_error).visibility = View.VISIBLE
}
CompatibilityCheck.State.FAILURE_UNKNOWN -> {
root.requireViewById<View>(R.id.compatibility_check_unknown).visibility = View.VISIBLE
}
else -> {
root.requireViewById<View>(R.id.compatibility_check_progress_bar).visibility = View.VISIBLE
}
}
}
}
inner class CompatibilityChecksAdapter: RecyclerView.Adapter<ViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder =
ViewHolder(layoutInflater.inflate(R.layout.compatibility_check_item, parent, false))
override fun getItemCount(): Int =
compatibilityChecks.indexOfLast { it.state != CompatibilityCheck.State.NOT_STARTED } + 1
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
holder.bindItem(compatibilityChecks[position])
}
}
}