howlongtobeat-android/app/src/main/java/be/kuleuven/howlongtobeat/MainActivity.kt

102 lines
3.6 KiB
Kotlin

package be.kuleuven.howlongtobeat
import android.app.AlertDialog
import android.content.DialogInterface
import android.os.Bundle
import android.view.MenuItem
import androidx.appcompat.app.ActionBarDrawerToggle
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.GravityCompat
import androidx.navigation.fragment.NavHostFragment
import be.kuleuven.howlongtobeat.databinding.ActivityMainBinding
import be.kuleuven.howlongtobeat.model.GameRepository
import kotlin.math.roundToInt
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
private lateinit var menuBarToggle: ActionBarDrawerToggle
private lateinit var gameRepository: GameRepository
private val navHostFragment: NavHostFragment
get() = supportFragmentManager.findFragmentById(R.id.nav_host_fragment) as NavHostFragment
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
gameRepository = GameRepository.defaultImpl(applicationContext)
setupMenuDrawer()
setContentView(binding.root)
}
private fun setupMenuDrawer() {
menuBarToggle = ActionBarDrawerToggle(this, binding.drawerLayout, R.string.menu_open, R.string.menu_close)
binding.drawerLayout.addDrawerListener(menuBarToggle)
menuBarToggle.syncState()
supportActionBar?.setDisplayHomeAsUpEnabled(true)
binding.navView.setNavigationItemSelectedListener {
when (it.itemId) {
R.id.mnuClear -> tryToClearAllItems()
R.id.mnuStats -> showStats()
}
true
}
}
private fun clearAllItems() {
gameRepository.overwrite(listOf())
val currentActiveFragment = navHostFragment.childFragmentManager.fragments[0] as GameListFragment
currentActiveFragment.clearAllItems()
binding.drawerLayout.closeDrawer(GravityCompat.START)
}
private fun tryToClearAllItems() {
AlertDialog.Builder(this)
.setTitle("Delete all games from the DB")
.setMessage("Are you sure?")
.setIcon(android.R.drawable.ic_dialog_alert)
.setPositiveButton("Yup") { dialog, _ ->
clearAllItems()
dialog.dismiss()
}
.setNegativeButton("Nah") { dialog, _ ->
close(dialog)
}
.create()
.show()
}
private fun close(dialog: DialogInterface) {
dialog.dismiss()
binding.drawerLayout.closeDrawer(GravityCompat.START)
}
private fun showStats() {
val allGames = gameRepository.load()
val hoursToBeat = allGames.filter { !it.finished }.map { it.howLongToBeat }.sum()
val hoursAlreadyBeat = allGames.filter { it.finished }.map { it.howLongToBeat }.sum()
val percCompleted = if(hoursAlreadyBeat > 0) ((hoursToBeat / hoursAlreadyBeat) * 100).roundToInt() else 0
AlertDialog.Builder(this)
.setTitle("Game library stats")
.setMessage("Total games: ${allGames.size}\nHours still to beat: ${hoursToBeat}\nHours already beat: ${hoursAlreadyBeat}\n\n$percCompleted% total completed.")
.setIcon(android.R.drawable.ic_dialog_info)
.setNeutralButton("Nice!") { dialog, _ ->
close(dialog)
}
.create()
.show()
}
override fun onOptionsItemSelected(item: MenuItem): Boolean {
if(menuBarToggle.onOptionsItemSelected(item)) {
return true
}
return super.onOptionsItemSelected(item)
}
}