Add dao & view model for session

dev_raz_wip
Aurelien Hubert 7 years ago
parent a0baeb61f1
commit 6398989dc4
  1. 76
      app/src/main/java/net/pokeranalytics/android/model/dao/SessionDao.kt
  2. 18
      app/src/main/java/net/pokeranalytics/android/ui/fragment/HistoryFragment.kt
  3. 77
      app/src/main/java/net/pokeranalytics/android/ui/viewmodel/SessionViewModel.kt
  4. 21
      app/src/main/java/net/pokeranalytics/android/util/data/LiveRealmData.kt
  5. 12
      app/src/main/java/net/pokeranalytics/android/util/data/Realm+Dao.kt

@ -0,0 +1,76 @@
package net.pokeranalytics.android.model.dao
import io.realm.Realm
import io.realm.RealmResults
import io.realm.Sort
import net.pokeranalytics.android.model.realm.Session
import net.pokeranalytics.android.util.data.sessionDao
/**
* Session Dao
*/
class SessionDao(realmDb: Realm) {
var realm: Realm = realmDb
/**
* Create or update session
*/
fun createOrUpdateSession(session: Session): Session {
realm.beginTransaction()
val sessionToSave = realm.copyToRealmOrUpdate(session)
realm.commitTransaction()
return realm.copyFromRealm(sessionToSave)
}
/**
* Create or update sessions
*/
fun createOrUpdateSessions(sessions: List<Session>): List<Session> {
realm.beginTransaction()
// Update
val sessionsToSave = realm.copyToRealmOrUpdate(sessions)
// Remove sessions not updated
realm.where(Session::class.java).equalTo("isUpdating", true).findAll().deleteAllFromRealm()
realm.commitTransaction()
return realm.copyFromRealm(sessionsToSave)
}
/**
* Find all sessions
*/
fun findAllSessions(): RealmResults<Session> {
return realm.where(Session::class.java).findAll().sort("updatedAt", Sort.DESCENDING)
}
/**
* Find session by id
*/
fun findSessionById(sessionId: Int): Session? {
return realm.where(Session::class.java).equalTo("id", sessionId).findFirst()
}
/**
* Delete session
*/
fun deleteSession(sessionId: Int) {
realm.beginTransaction()
realm.sessionDao().findSessionById(sessionId)?.deleteFromRealm()
realm.commitTransaction()
}
/**
* Delete all sessions
*/
fun deleteAllSessions() {
realm.beginTransaction()
realm.sessionDao().findAllSessions().deleteAllFromRealm()
realm.commitTransaction()
}
}

@ -5,16 +5,15 @@ import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProviders
import net.pokeranalytics.android.R
import net.pokeranalytics.android.util.PokerAnalyticsFragment
import net.pokeranalytics.android.util.data.SessionViewModel
class HistoryFragment : PokerAnalyticsFragment() {
companion object {
/**
* Create new instance
*/
fun newInstance(): HistoryFragment {
val fragment = HistoryFragment()
val bundle = Bundle()
@ -23,12 +22,25 @@ class HistoryFragment : PokerAnalyticsFragment() {
}
}
private lateinit var sessionViewModel: SessionViewModel
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return inflater.inflate(R.layout.fragment_history, container, false)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
sessionViewModel = ViewModelProviders.of(this).get(SessionViewModel::class.java)
initData()
}
/**
* Init data
*/
private fun initData() {
val sessions = sessionViewModel.getAllSessions()
}
}

@ -0,0 +1,77 @@
package net.pokeranalytics.android.util.data
import android.app.Application
import androidx.lifecycle.AndroidViewModel
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import io.realm.OrderedRealmCollectionChangeListener
import io.realm.Realm
import io.realm.RealmResults
import net.pokeranalytics.android.model.realm.Session
import net.pokeranalytics.android.util.data.sessionDao
/**
* Session View Model
*/
class SessionViewModel(application: Application) : AndroidViewModel(application) {
private var realm = Realm.getDefaultInstance()
private var results: RealmResults<Session>
private val observablePlaces = MutableLiveData<List<Session>>()
private var realmChangeListener = OrderedRealmCollectionChangeListener<RealmResults<Session>> { t, changeSet ->
observablePlaces.value = realm.copyFromRealm(t)
}
init {
results = realm.sessionDao().findAllSessions()
}
override fun onCleared() {
super.onCleared()
results.removeChangeListener(realmChangeListener)
realm.close()
}
/**
* Get all sessions
*/
fun getAllSessions(): LiveData<List<Session>> {
results.addChangeListener(realmChangeListener)
observablePlaces.value = realm.copyFromRealm(results)
return observablePlaces
}
/**
* Get session by id
*/
fun getSessionById(id: Int): Session? {
if (!realm.isClosed) {
val session = realm.sessionDao().findSessionById(id)
if (session != null) {
return realm.copyFromRealm(session)
}
}
return null
}
/**
* Create or update a session
*/
fun createOrUpdateSession(session: Session): Session? {
if (!realm.isClosed) {
return realm.sessionDao().createOrUpdateSession(session)
}
return null
}
/**
* Delete a session
*/
fun deleteSession(sessionId: Int) {
if (!realm.isClosed) {
realm.sessionDao().deleteSession(sessionId)
}
}
}

@ -0,0 +1,21 @@
package net.pokeranalytics.android.util.data
import androidx.lifecycle.LiveData
import io.realm.RealmChangeListener
import io.realm.RealmModel
import io.realm.RealmResults
class LiveRealmData<T : RealmModel>(private val results: RealmResults<T>) : LiveData<RealmResults<T>>() {
private val listener = RealmChangeListener<RealmResults<T>> { results -> value = results }
override fun onActive() {
results.addChangeListener(listener)
value = results
}
override fun onInactive() {
results.removeChangeListener(listener)
}
}

@ -0,0 +1,12 @@
@file:JvmName("RealmUtils") // pretty name for utils class if called from
package net.pokeranalytics.android.util.data
import io.realm.Realm
import io.realm.RealmModel
import io.realm.RealmResults
import net.pokeranalytics.android.model.dao.SessionDao
import net.pokeranalytics.android.util.data.LiveRealmData
fun Realm.sessionDao(): SessionDao = SessionDao(this)
fun <T:RealmModel> RealmResults<T>.asLiveData() = LiveRealmData(this)
Loading…
Cancel
Save