diff --git a/app/src/main/java/net/pokeranalytics/android/model/dao/SessionDao.kt b/app/src/main/java/net/pokeranalytics/android/model/dao/SessionDao.kt deleted file mode 100644 index 8ac9dc5c..00000000 --- a/app/src/main/java/net/pokeranalytics/android/model/dao/SessionDao.kt +++ /dev/null @@ -1,76 +0,0 @@ -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): List { - - 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 { - 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() - } - - -} \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/model/realm/Session.kt b/app/src/main/java/net/pokeranalytics/android/model/realm/Session.kt index 2f6b4a6b..1c1c6c44 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/realm/Session.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/realm/Session.kt @@ -1,8 +1,12 @@ package net.pokeranalytics.android.model.realm +import io.realm.Realm import io.realm.RealmObject +import io.realm.RealmResults +import io.realm.Sort import io.realm.annotations.PrimaryKey import net.pokeranalytics.android.* +import net.pokeranalytics.android.util.data.sessionDao import java.util.* open class Session : RealmObject() { @@ -26,16 +30,12 @@ open class Session : RealmObject() { //var bankroll: Bankroll? = bankroll var bankroll: Bankroll? = null - var hands: List = listOf() //var timeFrame: TimeFrame = timeFrame var timeFrame: TimeFrame? = null - var location: Location? = null - var result: Result = Result() - var opponents: List = listOf() // @todo serie @@ -43,11 +43,81 @@ open class Session : RealmObject() { // @todo cash game blind: 2/5/10, short deck ante, big bets in fixed limit // Tournament - var entryFee: Double? = null var numberOfPlayers: Int? = null // @todo tournament type? */ +} + + +/** + * 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): List { + + 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 { + 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() + } + + } \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/ui/adapter/HistoryAdapter.kt b/app/src/main/java/net/pokeranalytics/android/ui/adapter/HistoryAdapter.kt new file mode 100644 index 00000000..908a8451 --- /dev/null +++ b/app/src/main/java/net/pokeranalytics/android/ui/adapter/HistoryAdapter.kt @@ -0,0 +1,101 @@ +package net.pokeranalytics.android.ui.adapter + +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.recyclerview.widget.RecyclerView +import net.pokeranalytics.android.R +import net.pokeranalytics.android.Session + +class HistoryAdapter(private var sessions: ArrayList) : RecyclerView.Adapter() { + + + companion object { + const val ROW_SESSION: Int = 100 + } + + private var isLoadingItem = -1 + private var lastSelectedItem = -1 + + var onClickOnProduct: ((position: Int, session: Session) -> Unit)? = null + var isPlaceholder = false + set(value) { + field = value + notifyDataSetChanged() + } + + inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + fun bind(session: Session) { + val context = itemView.context + + /* + itemView.productName.text = product.name + itemView.productDescription.text = product.getMobileDescription() + itemView.productPrice.text = product.getMinPrice() + itemView.productSpecs.removeAllViews() + + if (product.getMobilePageCount().isNotEmpty()) { + val specItemView = LayoutInflater.from(context).inflate(R.layout.layout_product_specifications, itemView.items, false) + specItemView.specIcon.setImageResource(R.drawable.icon_spec_pages_count) + specItemView.specDescription.text = product.getMobilePageCount() + itemView.productSpecs.addView(specItemView) + } + + if (product.getMobilePhotoCount().isNotEmpty()) { + val specItemView = LayoutInflater.from(context).inflate(R.layout.layout_product_specifications, itemView.items, false) + specItemView.specIcon.setImageResource(R.drawable.icon_spec_photos_count) + specItemView.specDescription.text = product.getMobilePhotoCount() + itemView.productSpecs.addView(specItemView) + } + + if (product.getMobileFormatCount().isNotEmpty()) { + val specItemView = LayoutInflater.from(context).inflate(R.layout.layout_product_specifications, itemView.items, false) + specItemView.specIcon.setImageResource(R.drawable.icon_spec_formats) + specItemView.specDescription.text = product.getMobileFormatCount() + itemView.productSpecs.addView(specItemView) + } + + Glide.with(context) + .load(product.principalImagePath) + .transition(withCrossFade()) + .into(itemView.productImage) + + itemView.productOrder.setOnClickListener { + onClickOnProduct?.invoke(adapterPosition, product) + } + + itemView.container.setOnClickListener { + onClickOnProduct?.invoke(adapterPosition, product) + } + */ + } + } + + inner class PlaceHolderViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + fun bind() { + } + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { + when (viewType) { + ROW_SESSION -> return ViewHolder(LayoutInflater.from(parent.context).inflate(R.layout.row_history_session, parent, false)) + else -> throw IllegalStateException("Need to implement type $viewType in HistoryAdapter") + } + } + + override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { + when (getItemViewType(position)) { + HistoryAdapter.ROW_SESSION -> (holder as HistoryAdapter.ViewHolder).bind(sessions[position]) + } + } + + override fun getItemCount(): Int { + return sessions.size + } + + override fun getItemViewType(position: Int) : Int { + return ROW_SESSION + } + + +} \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/HistoryFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/HistoryFragment.kt index 4eb0615b..705ff756 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/HistoryFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/HistoryFragment.kt @@ -12,35 +12,40 @@ import net.pokeranalytics.android.util.data.SessionViewModel class HistoryFragment : PokerAnalyticsFragment() { - companion object { + companion object { - fun newInstance(): HistoryFragment { - val fragment = HistoryFragment() - val bundle = Bundle() - fragment.arguments = bundle - return fragment - } - } + fun newInstance(): HistoryFragment { + val fragment = HistoryFragment() + val bundle = Bundle() + fragment.arguments = bundle + return fragment + } - private lateinit var sessionViewModel: SessionViewModel + } - override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { - return inflater.inflate(R.layout.fragment_history, container, false) - } + private lateinit var sessionViewModel: SessionViewModel - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { - super.onViewCreated(view, savedInstanceState) + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { + return inflater.inflate(R.layout.fragment_history, container, false) + } - sessionViewModel = ViewModelProviders.of(this).get(SessionViewModel::class.java) + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) - initData() - } + sessionViewModel = ViewModelProviders.of(this).get(SessionViewModel::class.java) - /** - * Init data - */ - private fun initData() { - val sessions = sessionViewModel.getAllSessions() - } + initData() + } + + /** + * Init data + */ + private fun initData() { + + sessionViewModel.getAllSessions() + + + + } } \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/ui/viewmodel/SessionViewModel.kt b/app/src/main/java/net/pokeranalytics/android/ui/viewmodel/SessionViewModel.kt index e8d06001..06b629da 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/viewmodel/SessionViewModel.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/viewmodel/SessionViewModel.kt @@ -54,6 +54,7 @@ class SessionViewModel(application: Application) : AndroidViewModel(application) } return null } + /** * Create or update a session */ diff --git a/app/src/main/java/net/pokeranalytics/android/util/data/Realm+Dao.kt b/app/src/main/java/net/pokeranalytics/android/util/data/Realm+Dao.kt index 744a5050..f09412c6 100644 --- a/app/src/main/java/net/pokeranalytics/android/util/data/Realm+Dao.kt +++ b/app/src/main/java/net/pokeranalytics/android/util/data/Realm+Dao.kt @@ -4,8 +4,7 @@ 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 +import net.pokeranalytics.android.model.realm.SessionDao fun Realm.sessionDao(): SessionDao = SessionDao(this) diff --git a/app/src/main/res/layout/row_history_session.xml b/app/src/main/res/layout/row_history_session.xml new file mode 100644 index 00000000..218e6546 --- /dev/null +++ b/app/src/main/res/layout/row_history_session.xml @@ -0,0 +1,23 @@ + + + + + + \ No newline at end of file