2021-08-17 09:50:06 +02:00
package be.kuleuven.howlongtobeat
2021-08-19 09:46:03 +02:00
import android.app.AlertDialog
import android.content.DialogInterface
2021-08-17 09:50:06 +02:00
import android.os.Bundle
import android.view.MenuItem
import androidx.appcompat.app.ActionBarDrawerToggle
import androidx.appcompat.app.AppCompatActivity
2021-08-19 09:46:03 +02:00
import androidx.core.view.GravityCompat
import androidx.navigation.fragment.NavHostFragment
2021-08-17 09:50:06 +02:00
import be.kuleuven.howlongtobeat.databinding.ActivityMainBinding
2021-08-19 09:46:03 +02:00
import be.kuleuven.howlongtobeat.model.GameRepository
import kotlin.math.roundToInt
2021-08-17 09:50:06 +02:00
class MainActivity : AppCompatActivity ( ) {
private lateinit var binding : ActivityMainBinding
private lateinit var menuBarToggle : ActionBarDrawerToggle
2021-08-19 09:46:03 +02:00
private lateinit var gameRepository : GameRepository
private val navHostFragment : NavHostFragment
get ( ) = supportFragmentManager . findFragmentById ( R . id . nav _host _fragment ) as NavHostFragment
2021-08-17 09:50:06 +02:00
override fun onCreate ( savedInstanceState : Bundle ? ) {
super . onCreate ( savedInstanceState )
binding = ActivityMainBinding . inflate ( layoutInflater )
2021-08-19 09:46:03 +02:00
gameRepository = GameRepository . defaultImpl ( applicationContext )
2021-08-17 09:50:06 +02:00
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 ) {
2021-08-19 09:46:03 +02:00
R . id . mnuClear -> tryToClearAllItems ( )
R . id . mnuStats -> showStats ( )
2021-08-17 09:50:06 +02:00
}
true
}
}
private fun clearAllItems ( ) {
2021-08-19 09:46:03 +02:00
gameRepository . overwrite ( listOf ( ) )
val currentActiveFragment = navHostFragment . childFragmentManager . fragments [ 0 ] as GameListFragment
currentActiveFragment . clearAllItems ( )
binding . drawerLayout . closeDrawer ( GravityCompat . START )
2021-08-17 09:50:06 +02:00
}
2021-08-19 09:46:03 +02:00
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 ( )
2021-08-17 09:50:06 +02:00
}
2021-08-19 09:46:03 +02:00
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} \n Hours still to beat: ${hoursToBeat} \n Hours already beat: ${hoursAlreadyBeat} \n \n $percCompleted % total completed. " )
. setIcon ( android . R . drawable . ic _dialog _info )
. setNeutralButton ( " Nice! " ) { dialog , _ ->
close ( dialog )
}
. create ( )
. show ( )
2021-08-17 09:50:06 +02:00
}
override fun onOptionsItemSelected ( item : MenuItem ) : Boolean {
if ( menuBarToggle . onOptionsItemSelected ( item ) ) {
return true
}
return super . onOptionsItemSelected ( item )
}
}