Lisaison de l'utilisataire et structuration de toute la base de donnée (je compile sous peu...)

DAO
Pierre FERREIRA 2 years ago
parent 625822766a
commit e4ce9c147a

@ -47,6 +47,7 @@ apply plugin: 'kotlin-kapt'
dependencies { dependencies {
implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.3.0")
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.9' implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.9'
implementation 'androidx.fragment:fragment-ktx:1.3.0' implementation 'androidx.fragment:fragment-ktx:1.3.0'
implementation 'androidx.core:core-ktx:1.7.0' implementation 'androidx.core:core-ktx:1.7.0'

@ -1,5 +1,6 @@
package iut.android.pierrepierre.model.Activity package iut.android.pierrepierre.model.Activity
import kotlinx.serialization.encodeToString
import kotlinx.serialization.json.Json
import android.content.Context import android.content.Context
import android.os.Bundle import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
@ -7,11 +8,13 @@ import iut.android.pierrepierre.R
import android.content.Intent import android.content.Intent
import android.view.View import android.view.View
import android.widget.Button import android.widget.Button
import androidx.lifecycle.ViewModelProvider
import androidx.room.Room import androidx.room.Room
import iut.android.pierrepierre.model.Class.User import iut.android.pierrepierre.model.Class.User
import iut.android.pierrepierre.model.DB.DAO.UserDAO import iut.android.pierrepierre.model.DB.DAO.UserDAO
import iut.android.pierrepierre.model.DB.Entity.UserEntity import iut.android.pierrepierre.model.DB.Entity.UserEntity
import iut.android.pierrepierre.model.DB.RoomDB import iut.android.pierrepierre.model.DB.RoomDB
import iut.android.pierrepierre.model.Viewmodel.UserViewModel
import java.util.* import java.util.*
class MenuActivity : AppCompatActivity() { class MenuActivity : AppCompatActivity() {
@ -23,6 +26,10 @@ class MenuActivity : AppCompatActivity() {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
setContentView(R.layout.activity_menu) setContentView(R.layout.activity_menu)
val viewModel = ViewModelProvider(this).get(UserViewModel::class.java)
//BDD //BDD
// Initialisation BDD // Initialisation BDD
db = Room.databaseBuilder(applicationContext, RoomDB::class.java, "MyDataBase").build() db = Room.databaseBuilder(applicationContext, RoomDB::class.java, "MyDataBase").build()
@ -34,17 +41,20 @@ class MenuActivity : AppCompatActivity() {
// Charger le score de l'utilisateur s'il existe // Charger le score de l'utilisateur s'il existe
val userE = userDao.getUserById(uniqueID) val userE = userDao.getUserById(uniqueID)
if (userE != null) { if (userE != null) {
val userScore = userE.score //val userScore = userE.score
user = userE.toUser() user = userE.toUser()
viewModel.setUser(user)
} }
} }
fun onClickJouer(view: View) { fun onClickJouer(view: View) {
val intent = Intent(this, MoleGridActivity::class.java) val intent = Intent(this, MoleGridActivity::class.java)
intent.putExtra("user_id", user.id)
startActivity(intent) startActivity(intent)
} }
fun onClickScores(view: View) { fun onClickScores(view: View) {
//TODO Ajouter l'action correspondant à Scores //TODO Ajouter l'action correspondant à Scores
//FIXME tmp //FIXME tmp
@ -72,11 +82,11 @@ class MenuActivity : AppCompatActivity() {
/// Convertisseur /// Convertisseur
// UserEntity en User // UserEntity en User
fun UserEntity.toUser(): User { fun UserEntity.toUser(): User {
return User(score = this.score, nbMiss = this.nbMiss) return User( id=this.id ,score = this.score, nbMiss = this.nbMiss)
} }
// User en UserEntity // User en UserEntity
fun User.toUserEntity(): UserEntity { fun User.toUserEntity(): UserEntity {
return UserEntity(score = this.score, nbMiss = this.nbMiss) return UserEntity( id=this.id, score = this.score, nbMiss = this.nbMiss)
} }
} }

@ -1,26 +1,25 @@
package iut.android.pierrepierre.model.Activity package iut.android.pierrepierre.model.Activity
import android.content.Context import android.content.Context
import android.content.DialogInterface
import android.hardware.Sensor import android.hardware.Sensor
import android.hardware.SensorEvent import android.hardware.SensorEvent
import android.hardware.SensorEventListener import android.hardware.SensorEventListener
import android.hardware.SensorManager import android.hardware.SensorManager
import android.os.Bundle import android.os.Bundle
import android.os.CountDownTimer import android.os.CountDownTimer
import android.util.Log
import android.widget.ProgressBar import android.widget.ProgressBar
import android.widget.TextView import android.widget.TextView
import androidx.appcompat.app.AlertDialog
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.fragment.app.commit import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import iut.android.pierrepierre.model.Class.Mole
import iut.android.pierrepierre.model.Adapter.MyGridAdapter
import iut.android.pierrepierre.R import iut.android.pierrepierre.R
import iut.android.pierrepierre.model.Adapter.MyGridAdapter
import iut.android.pierrepierre.model.Class.Mole
import iut.android.pierrepierre.model.Class.User import iut.android.pierrepierre.model.Class.User
import iut.android.pierrepierre.model.DB.Entity.UserEntity
import iut.android.pierrepierre.model.Viewmodel.UserViewModel
import iut.android.pierrepierre.model.fragments.MenuFragment import iut.android.pierrepierre.model.fragments.MenuFragment
import kotlinx.coroutines.* import kotlinx.coroutines.*
import kotlin.random.Random import kotlin.random.Random
@ -35,8 +34,12 @@ class MoleGridActivity : AppCompatActivity() {
private lateinit var progressBar: ProgressBar private lateinit var progressBar: ProgressBar
//VM
private lateinit var viewModel: UserViewModel
//User //User
private var user : User = User() private lateinit var user : User
private lateinit var scoreDisplay : TextView private lateinit var scoreDisplay : TextView
//sensor //sensor
@ -57,6 +60,22 @@ class MoleGridActivity : AppCompatActivity() {
progressBar = findViewById(R.id.progressBar) progressBar = findViewById(R.id.progressBar)
scoreDisplay = findViewById(R.id.score_display) scoreDisplay = findViewById(R.id.score_display)
DisplaycountDownTimer = findViewById(R.id.CountDown) DisplaycountDownTimer = findViewById(R.id.CountDown)
val userId = intent.getStringExtra("user_id")
val viewModelProvider = ViewModelProvider(this@MoleGridActivity)
viewModel = viewModelProvider[UserViewModel::class.java]
val userE = viewModel.getUserById(userId!!) //FIXME dangereux
if(userE != null){
this.user = userE.toUser()
}
else{
System.out.println("User is null")
throw Exception("User is null")
}
//user = (intent.getSerializableExtra("KEY_NAME") as User?)!!
} }
@ -112,7 +131,7 @@ class MoleGridActivity : AppCompatActivity() {
override fun onFinish() { override fun onFinish() {
//FIXME Mettre fin a la partie, rendre tout les objets immuables (le fragment cache juste..) //FIXME Mettre fin a la partie, rendre tout les objets immuables (le fragment cache juste..)
//mettre la fin de parti ici => appel de l'interface de fin //mettre la fin de parti ici => appel de l'interface de fin
val menuFragment = MenuFragment(user.score) val menuFragment = MenuFragment(user)
val fragmentManager = supportFragmentManager val fragmentManager = supportFragmentManager
val fragmentTransaction = fragmentManager.beginTransaction() val fragmentTransaction = fragmentManager.beginTransaction()
fragmentTransaction.replace(android.R.id.content, menuFragment) fragmentTransaction.replace(android.R.id.content, menuFragment)
@ -187,4 +206,8 @@ class MoleGridActivity : AppCompatActivity() {
} }
} }
} }
fun UserEntity.toUser(): User {
return User( id=this.id ,score = this.score, nbMiss = this.nbMiss)
}
} }

@ -1,4 +1,12 @@
package iut.android.pierrepierre.model.Class package iut.android.pierrepierre.model.Class
class User (var score: Int = 0, var nbMiss : Int = 0){ import iut.android.pierrepierre.model.DB.Entity.UserEntity
import java.io.Serializable
class User (var id : String, var score: Int = 0, var nbMiss : Int = 0) : Serializable {
// User en UserEntity
fun User.toUserEntity(): UserEntity {
return UserEntity( id=this.id, score = this.score, nbMiss = this.nbMiss)
}
} }

@ -1,19 +1,18 @@
package iut.android.pierrepierre.model.DB.DAO package iut.android.pierrepierre.model.DB.DAO
import androidx.room.Dao import androidx.room.*
import androidx.room.Delete
import androidx.room.Insert
import androidx.room.Query
import iut.android.pierrepierre.model.DB.Entity.UserEntity import iut.android.pierrepierre.model.DB.Entity.UserEntity
@Dao @Dao
interface UserDAO { interface UserDAO {
@Insert @Insert
fun insererUser(u : UserEntity) fun insertUser(user: UserEntity): Long
@Delete @Delete
fun DeleteUser(u : UserEntity) fun updateUser(user: UserEntity)
@Query("UPDATE user SET score = :newScore WHERE id = :userId")
fun updateUserScore(userId: String, newScore: Int)
@Query("SELECT * FROM user WHERE user.id = :id") @Query("SELECT * FROM user WHERE user.id = :id")
fun getUserById(id: String): UserEntity? fun getUserById(id: String): UserEntity?

@ -15,8 +15,8 @@ abstract class RoomDB : RoomDatabase() {
companion object { companion object {
private var INSTANCE: RoomDB? = null private var INSTANCE: RoomDB? = null
fun getDatabase(context: Context) { fun getInstance(context: Context): RoomDB {
INSTANCE ?: synchronized(this) { return INSTANCE ?: synchronized(this) {
val instance = Room.databaseBuilder( val instance = Room.databaseBuilder(
context.applicationContext, context.applicationContext,
RoomDB::class.java, RoomDB::class.java,

@ -0,0 +1,33 @@
package iut.android.pierrepierre.model.Viewmodel
import androidx.lifecycle.ViewModel
import iut.android.pierrepierre.model.Class.User
import iut.android.pierrepierre.model.DB.DAO.UserDAO
import iut.android.pierrepierre.model.DB.Entity.UserEntity
class UserViewModel(private val userDao: UserDAO) : ViewModel() {
private var user = User("0")
fun getUser(): User {
return user
}
fun setUser(user : User) {
this.user = user
}
fun updateUserScore(score: Int) {
user.score = score
}
fun getUserById(id: String): UserEntity? {
return userDao.getUserById(id)
}
// UserEntity en User
fun UserEntity.toUser(): User {
return User( id=this.id ,score = this.score, nbMiss = this.nbMiss)
}
}

@ -10,17 +10,25 @@ import android.widget.TextView
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import iut.android.pierrepierre.R import iut.android.pierrepierre.R
import iut.android.pierrepierre.model.Activity.MenuActivity import iut.android.pierrepierre.model.Activity.MenuActivity
import iut.android.pierrepierre.model.Class.User
import iut.android.pierrepierre.model.DB.DAO.UserDAO
import iut.android.pierrepierre.model.DB.RoomDB
class MenuFragment(val UserScore : Int) : Fragment() { class MenuFragment(var user : User) : Fragment() {
override fun onCreateView( private lateinit var userDao: UserDAO
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle? override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
): View? {
// Inflate the layout for this fragment // Inflate the layout for this fragment
val view = inflater.inflate(R.layout.game_over, container, false) val view = inflater.inflate(R.layout.game_over, container, false)
val score = view.findViewById<TextView>(R.id.userScore) val score = view.findViewById<TextView>(R.id.userScore)
score.text= "Votre score : $UserScore"
val database = RoomDB.getInstance(requireContext())
userDao = database.userDao()
userDao.updateUserScore(user.id, user.score)
score.text= "Votre score : "+ user.score
val closeButton = view.findViewById<Button>(R.id.closeButton) val closeButton = view.findViewById<Button>(R.id.closeButton)
closeButton.setOnClickListener { closeButton.setOnClickListener {
val intent = Intent(activity, MenuActivity::class.java) val intent = Intent(activity, MenuActivity::class.java)

Loading…
Cancel
Save