102 lines
3.6 KiB
Kotlin
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)
|
|
}
|
|
} |