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 {
implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.3.0")
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.9'
implementation 'androidx.fragment:fragment-ktx:1.3.0'
implementation 'androidx.core:core-ktx:1.7.0'

@ -1,5 +1,6 @@
package iut.android.pierrepierre.model.Activity
import kotlinx.serialization.encodeToString
import kotlinx.serialization.json.Json
import android.content.Context
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
@ -7,11 +8,13 @@ import iut.android.pierrepierre.R
import android.content.Intent
import android.view.View
import android.widget.Button
import androidx.lifecycle.ViewModelProvider
import androidx.room.Room
import iut.android.pierrepierre.model.Class.User
import iut.android.pierrepierre.model.DB.DAO.UserDAO
import iut.android.pierrepierre.model.DB.Entity.UserEntity
import iut.android.pierrepierre.model.DB.RoomDB
import iut.android.pierrepierre.model.Viewmodel.UserViewModel
import java.util.*
class MenuActivity : AppCompatActivity() {
@ -23,6 +26,10 @@ class MenuActivity : AppCompatActivity() {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_menu)
val viewModel = ViewModelProvider(this).get(UserViewModel::class.java)
//BDD
// Initialisation BDD
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
val userE = userDao.getUserById(uniqueID)
if (userE != null) {
val userScore = userE.score
//val userScore = userE.score
user = userE.toUser()
viewModel.setUser(user)
}
}
fun onClickJouer(view: View) {
val intent = Intent(this, MoleGridActivity::class.java)
intent.putExtra("user_id", user.id)
startActivity(intent)
}
fun onClickScores(view: View) {
//TODO Ajouter l'action correspondant à Scores
//FIXME tmp
@ -72,11 +82,11 @@ class MenuActivity : AppCompatActivity() {
/// Convertisseur
// UserEntity en 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
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
import android.content.Context
import android.content.DialogInterface
import android.hardware.Sensor
import android.hardware.SensorEvent
import android.hardware.SensorEventListener
import android.hardware.SensorManager
import android.os.Bundle
import android.os.CountDownTimer
import android.util.Log
import android.widget.ProgressBar
import android.widget.TextView
import androidx.appcompat.app.AlertDialog
import androidx.appcompat.app.AppCompatActivity
import androidx.fragment.app.commit
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.GridLayoutManager
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.model.Adapter.MyGridAdapter
import iut.android.pierrepierre.model.Class.Mole
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 kotlinx.coroutines.*
import kotlin.random.Random
@ -35,8 +34,12 @@ class MoleGridActivity : AppCompatActivity() {
private lateinit var progressBar: ProgressBar
//VM
private lateinit var viewModel: UserViewModel
//User
private var user : User = User()
private lateinit var user : User
private lateinit var scoreDisplay : TextView
//sensor
@ -57,6 +60,22 @@ class MoleGridActivity : AppCompatActivity() {
progressBar = findViewById(R.id.progressBar)
scoreDisplay = findViewById(R.id.score_display)
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() {
//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
val menuFragment = MenuFragment(user.score)
val menuFragment = MenuFragment(user)
val fragmentManager = supportFragmentManager
val fragmentTransaction = fragmentManager.beginTransaction()
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
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
import androidx.room.Dao
import androidx.room.Delete
import androidx.room.Insert
import androidx.room.Query
import androidx.room.*
import iut.android.pierrepierre.model.DB.Entity.UserEntity
@Dao
interface UserDAO {
@Insert
fun insererUser(u : UserEntity)
fun insertUser(user: UserEntity): Long
@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")
fun getUserById(id: String): UserEntity?

@ -15,8 +15,8 @@ abstract class RoomDB : RoomDatabase() {
companion object {
private var INSTANCE: RoomDB? = null
fun getDatabase(context: Context) {
INSTANCE ?: synchronized(this) {
fun getInstance(context: Context): RoomDB {
return INSTANCE ?: synchronized(this) {
val instance = Room.databaseBuilder(
context.applicationContext,
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 iut.android.pierrepierre.R
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(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
private lateinit var userDao: UserDAO
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
// Inflate the layout for this fragment
val view = inflater.inflate(R.layout.game_over, container, false)
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)
closeButton.setOnClickListener {
val intent = Intent(activity, MenuActivity::class.java)

Loading…
Cancel
Save