RoomDatabase (MVVM)
RoomDatabase (MVVM)
1.PERSON(ENTITY)
2. PERSON DAO (dao)
3. PersonDATABASE(database)
4. PersonRepository(repository)
5. Person Viewmodel(viewmodel)
6. Person ViewModelFactory(ViewmodelFactory)
7. DataCollectorScreen(where we can get data)
8. HomeScreen(where we show data)
1.PERSON(ENTITY)
package com.example.stepcounter.mvvm.room
import androidx.room.Entity
import androidx.room.PrimaryKey
// Person.kt
//First, let's create a Person data class with an auto-generated primary key:
@Entity(tableName = "persons")
data class Person(
@PrimaryKey(autoGenerate = true)
val id: Long = 0,
val gender: String,
val name: String,
val height: Float,
val weight: Float,
var dob: String,
//var age: Int = 0
)
2. PERSON DAO (dao)
package com.example.stepcounter.mvvm.room
import androidx.lifecycle.LiveData
import androidx.room.Dao
import androidx.room.Insert
import androidx.room.Query
// PersonDao.kt
//second, create a PersonDao interface for Room database operations:
@Dao
interface PersonDao {
@Insert
fun insert(person: Person)
3. PersonDATABASE(database)
package com.example.stepcounter.mvvm.room
import android.content.Context
import androidx.room.Database
import androidx.room.Room
import androidx.room.RoomDatabase
// PersonDatabase.kt
//Now, create a PersonDatabase for setting up the Room database:
@Database(entities = [Person::class], version = 1, exportSchema = false)
abstract class PersonDatabase : RoomDatabase() {
abstract fun personDao(): PersonDao
companion object {
@Volatile
private var INSTANCE: PersonDatabase? = null
4. PersonRepository(repository)
package com.example.stepcounter.mvvm
import androidx.lifecycle.LiveData
import androidx.room.Query
import com.example.stepcounter.mvvm.room.Person
import com.example.stepcounter.mvvm.room.PersonDao
// PersonRepository.kt
//Now, create a PersonRepository to manage data operations:
class PersonRepository(private val personDao: PersonDao) {
suspend fun insertPerson(person: Person) {
personDao.insert(person)
}
5. Person Viewmodel(viewmodel)
package com.example.stepcounter.mvvm
import androidx.lifecycle.AndroidViewModel
import androidx.lifecycle.LiveData
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.example.stepcounter.mvvm.room.Person
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch
import javax.inject.Inject
// PersonViewModel.kt
//Create a PersonViewModel to manage data in your UI:
}
suspend fun getUserName(): String {
// Assuming you have a function in your repository to get the user's
name
return repository.getUserName()
}
6. Person ViewModelFactory(ViewmodelFactory)
package com.example.stepcounter.mvvm
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
import android.content.Intent
import android.os.Bundle
import android.text.Editable
import android.text.TextWatcher
import android.view.inputmethod.InputMethodManager
import android.widget.EditText
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.ViewModelProvider
import com.example.stepcounter.databinding.ActivityDataCollectorScreenBinding
import com.example.stepcounter.mvvm.PersonRepository
import com.example.stepcounter.mvvm.PersonViewModel
import com.example.stepcounter.mvvm.PersonViewModelFactory
import com.example.stepcounter.mvvm.room.Person
import com.example.stepcounter.mvvm.room.PersonDatabase
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch
import java.util.Calendar
// Create an InputMethodManager
// Create an InputMethodManager
val imm = getSystemService(INPUT_METHOD_SERVICE) as InputMethodManager
val eddob = findViewById<EditText>(com.example.stepcounter.R.id.eddob)
val height =
findViewById<EditText>(com.example.stepcounter.R.id.edheight)
val weight =
findViewById<EditText>(com.example.stepcounter.R.id.edweight)
DateInputMask(eddob);
binding.btnnextDCS.setOnClickListener {
if (name.isEmpty() || height.text.isEmpty() ||
weight.text.isEmpty() || eddob.text.isEmpty()) {
// Check if any field is missing and display a toast message
Toast.makeText(this, "Please fill in all fields",
Toast.LENGTH_SHORT).show()
} else {
val selectedPerson = Person(
0L,
getgender!!,
name.toString(),
height.text.toString().toFloat(),
weight.text.toString().toFloat(),
eddob.text.toString()
)
GlobalScope.launch {
personViewModel.insertPerson(selectedPerson)
}
//val agedif=calculateAge()
//val age = calculateAge(eddob.text.toString())
// selectedPerson.dob = age.toString() // Add an age property
to your Person data class
// selectedPerson.dob = "Age"
init {
input.addTextChangedListener(this)
}
}
}
}
package com.example.stepcounter.Activities
import android.content.Intent
import android.os.Bundle
import android.os.Handler
import android.util.Log
import android.view.MenuItem
import android.view.View
import android.widget.ImageView
import android.widget.TextView
import android.widget.Toast
import androidx.appcompat.app.ActionBarDrawerToggle
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.GravityCompat
import androidx.drawerlayout.widget.DrawerLayout
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.lifecycleScope
import com.example.stepcounter.R
import com.example.stepcounter.databinding.ActivityHomeScreenBinding
import com.example.stepcounter.mvvm.PersonRepository
import com.example.stepcounter.mvvm.PersonViewModel
import com.example.stepcounter.mvvm.PersonViewModelFactory
import com.example.stepcounter.mvvm.room.PersonDatabase
import com.google.android.material.navigation.NavigationView
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import java.text.SimpleDateFormat
import java.util.Calendar
import java.util.Date
import kotlin.properties.Delegates
val navigationView =
binding.navigationDraw // Replace this with your actual navigation
drawer view
val headerView: View = navigationView.getHeaderView(0)
val navUsername: TextView = headerView.findViewById(R.id.drawername)
val navGender = binding.navigationDraw.menu.findItem(R.id.gender)
val navHeight = binding.navigationDraw.menu.findItem(R.id.height)
val navWeight = binding.navigationDraw.menu.findItem(R.id.weight)
val navDob = binding.navigationDraw.menu.findItem(R.id.age)
//////////////////Achievement Screen/////////
binding.btnachievementHS.setOnClickListener {
val intent = Intent(this, ChallengesScreen::class.java)
startActivity(intent)
}
binding.btnRoutinePlannerHS.setOnClickListener {
binding.btnStartHS.setOnClickListener {
Handler().postDelayed(object : Runnable {
override fun run() {
// set the limitations for the numeric
// text under the progress bar
if (i <= 100) {
binding.progresstext.text = "" + i
binding.progressBar.progress = i
i++
Handler().postDelayed(this, 200)
} else {
Handler().removeCallbacks(this)
}
}
}, 200)
//////////////////Notification Screen/////////
binding.includedtoolbarHS.tablerNoti.setOnClickListener {
val intent = Intent(this, NotificationScreen::class.java)
startActivity(intent)
}
val toggle =
ActionBarDrawerToggle(this, drawerLayout, R.string.open_nav,
R.string.close_nav)
drawerLayout.addDrawerListener(toggle)
toggle.syncState()
binding.navigationDraw.setNavigationItemSelectedListener(this)
binding.includedtoolbarHS.btnOpen.setOnClickListener {
binding.drawer.open()
}