feature/top10
Laurent 7 years ago
commit c97282a47d
  1. 3
      app/proguard-rules.pro
  2. 10
      app/src/main/java/net/pokeranalytics/android/PokerAnalyticsApplication.kt
  3. 2
      app/src/main/java/net/pokeranalytics/android/model/realm/Session.kt
  4. 1
      app/src/main/java/net/pokeranalytics/android/ui/activity/DataListActivity.kt
  5. 4
      app/src/main/java/net/pokeranalytics/android/ui/activity/HomeActivity.kt
  6. 90
      app/src/main/java/net/pokeranalytics/android/ui/fragment/DataListFragment.kt
  7. 38
      app/src/main/java/net/pokeranalytics/android/ui/fragment/EditableDataFragment.kt

@ -55,3 +55,6 @@
-if interface * { @retrofit2.http.* <methods>; }
-keep,allowobfuscation interface <1>
# Guava
-dontwarn com.google.j2objc.annotations.**
-keep class com.google.j2objc.annotations.** { *; }

@ -2,6 +2,7 @@ package net.pokeranalytics.android
import android.app.Application
import com.crashlytics.android.Crashlytics
import com.crashlytics.android.core.CrashlyticsCore
import io.fabric.sdk.android.Fabric
import io.realm.Realm
import io.realm.RealmConfiguration
@ -16,6 +17,8 @@ import net.pokeranalytics.android.util.PokerAnalyticsLogs
import timber.log.Timber
class PokerAnalyticsApplication : Application() {
override fun onCreate() {
@ -31,15 +34,16 @@ class PokerAnalyticsApplication : Application() {
.build()
Realm.setDefaultConfiguration(realmConfiguration)
val core = CrashlyticsCore.Builder().disabled(BuildConfig.DEBUG).build()
Fabric.with(this, Crashlytics.Builder().core(core).build())
if (BuildConfig.DEBUG) {
// Logs
Timber.plant(PokerAnalyticsLogs())
} else {
Fabric.with(this, Crashlytics())
}
if (BuildConfig.DEBUG) {
// this.createFakeSessions() // debug
// this.createFakeSessions()
}
}

@ -515,7 +515,7 @@ open class Session : RealmObject(), Savable, Editable, StaticRowRepresentableDat
*/
fun cleanup() {
this.sessionSet?.let { set ->
this.sessionSet?.let {
// Updates the timeline
SessionSetManager.removeFromTimeline(this)

@ -11,6 +11,7 @@ import net.pokeranalytics.android.ui.fragment.DataListFragment
class DataListActivity : PokerAnalyticsActivity() {
enum class IntentKey(val keyName: String) {
DATA_TYPE("DATA_TYPE"),
ITEM_DELETED("ITEM_DELETED")
}
companion object {

@ -21,7 +21,7 @@ class HomeActivity : PokerAnalyticsActivity() {
companion object {
fun newInstance(context: Context, id: Int) {
val intent = Intent(context, HomeActivity::class.java)
intent.putExtra("id", 10)
intent.putExtra("id", id)
context.startActivity(intent)
}
}
@ -177,7 +177,7 @@ class HomeActivity : PokerAnalyticsActivity() {
}
}
.setNegativeButton(R.string.cancel) { _, which ->
.setNegativeButton(R.string.cancel) { _, _ ->
Timber.d("Click on cancel")
}

@ -1,5 +1,7 @@
package net.pokeranalytics.android.ui.fragment
import android.app.Activity
import android.content.Intent
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
@ -11,9 +13,14 @@ import com.google.android.material.snackbar.Snackbar
import io.realm.RealmObject
import io.realm.RealmResults
import kotlinx.android.synthetic.main.fragment_data_list.*
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import net.pokeranalytics.android.R
import net.pokeranalytics.android.model.interfaces.Deletable
import net.pokeranalytics.android.model.interfaces.Identifiable
import net.pokeranalytics.android.ui.activity.DataListActivity
import net.pokeranalytics.android.ui.activity.EditableDataActivity
import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity
import net.pokeranalytics.android.ui.adapter.LiveRowRepresentableDataSource
@ -28,12 +35,17 @@ import net.pokeranalytics.android.ui.view.rowrepresentable.SettingRow
class DataListFragment : PokerAnalyticsFragment(), LiveRowRepresentableDataSource, RowRepresentableDelegate {
companion object {
const val REQUEST_CODE_DETAILS = 1000
}
private lateinit var dataType: SettingRow
private lateinit var items: RealmResults<*>
private lateinit var dataListAdapter: RowRepresentableAdapter
private var deletedItem: RealmObject? = null
private var lastDeletedItemPosition: Int = 0
private var lastItemClickedPosition: Int = 0
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return inflater.inflate(R.layout.fragment_data_list, container, false)
@ -44,6 +56,19 @@ class DataListFragment : PokerAnalyticsFragment(), LiveRowRepresentableDataSourc
initUI()
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (requestCode == REQUEST_CODE_DETAILS && resultCode == Activity.RESULT_OK) {
val needToDeleteItem = data?.getBooleanExtra(DataListActivity.IntentKey.ITEM_DELETED.keyName, false) ?: false
if (needToDeleteItem) {
GlobalScope.launch(Dispatchers.Main) {
delay(300)
deleteItem(lastItemClickedPosition)
}
}
}
}
override fun onResume() {
super.onResume()
this.recyclerView?.adapter?.notifyDataSetChanged()
@ -68,10 +93,12 @@ class DataListFragment : PokerAnalyticsFragment(), LiveRowRepresentableDataSourc
override fun onRowSelected(position: Int, row: RowRepresentable, fromAction: Boolean) {
this.dataType.relatedResultsRepresentable?.let {
EditableDataActivity.newInstance(
requireContext(),
lastItemClickedPosition = position
EditableDataActivity.newInstanceForResult(
this,
it.ordinal,
(row as Identifiable).id
(row as Identifiable).id,
REQUEST_CODE_DETAILS
)
}
}
@ -94,29 +121,7 @@ class DataListFragment : PokerAnalyticsFragment(), LiveRowRepresentableDataSourc
dataListAdapter = RowRepresentableAdapter(this, this)
val swipeToDelete = SwipeToDeleteCallback(dataListAdapter) { position ->
// Save the delete position & create a copy of the object
val mRecentlyDeletedItem = rowRepresentableForPosition(position)
lastDeletedItemPosition = position
if (mRecentlyDeletedItem is RealmObject) {
// Check if the object is valid for the deletion
if ((mRecentlyDeletedItem as Deletable).isValidForDelete(this.getRealm())) {
deletedItem = getRealm().copyFromRealm(mRecentlyDeletedItem)
getRealm().executeTransaction {
mRecentlyDeletedItem.deleteFromRealm()
}
dataListAdapter.notifyItemRemoved(position)
showUndoSnackBar()
} else {
dataListAdapter.notifyItemChanged(position)
val builder = AlertDialog.Builder(requireContext())
.setMessage((mRecentlyDeletedItem as Deletable).getFailedDeleteMessage())
.setNegativeButton(R.string.ok, null)
builder.show()
}
}
deleteItem(position)
}
val itemTouchHelper = ItemTouchHelper(swipeToDelete)
@ -139,6 +144,39 @@ class DataListFragment : PokerAnalyticsFragment(), LiveRowRepresentableDataSourc
}
}
/**
* Delete item
*/
private fun deleteItem(position: Int) {
if (isDetached || activity == null) {
return
}
// Save the delete position & create a copy of the object
val mRecentlyDeletedItem = rowRepresentableForPosition(position)
lastDeletedItemPosition = position
if (mRecentlyDeletedItem is RealmObject) {
// Check if the object is valid for the deletion
if ((mRecentlyDeletedItem as Deletable).isValidForDelete(this.getRealm())) {
deletedItem = getRealm().copyFromRealm(mRecentlyDeletedItem)
getRealm().executeTransaction {
mRecentlyDeletedItem.deleteFromRealm()
}
dataListAdapter.notifyItemRemoved(position)
showUndoSnackBar()
} else {
dataListAdapter.notifyItemChanged(position)
val builder = AlertDialog.Builder(requireContext())
.setMessage((mRecentlyDeletedItem as Deletable).getFailedDeleteMessage())
.setNegativeButton(R.string.ok, null)
builder.show()
}
}
}
/**
* Show undo snack bar
*/

@ -16,6 +16,7 @@ import net.pokeranalytics.android.model.interfaces.Deletable
import net.pokeranalytics.android.model.interfaces.Editable
import net.pokeranalytics.android.model.interfaces.Savable
import net.pokeranalytics.android.model.interfaces.SaveValidityStatus
import net.pokeranalytics.android.ui.activity.DataListActivity
import net.pokeranalytics.android.ui.activity.EditableDataActivity
import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity
import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter
@ -185,27 +186,22 @@ open class EditableDataFragment : PokerAnalyticsFragment(), RowRepresentableDele
* Delete data
*/
private fun deleteData() {
val builder = AlertDialog.Builder(requireContext())
builder
.setMessage(R.string.are_you_sure_you_want_to_delete)
.setNegativeButton(R.string.cancel, null)
.setPositiveButton(R.string.yes) { _, _ ->
val deletable = this.item as Deletable
val realm = this.getRealm()
if (deletable.isValidForDelete(realm)) {
realm.executeTransaction {
this.liveDataType.deleteData(it, deletable)
}
this.activity?.finish()
} else {
val message = deletable.getFailedDeleteMessage()
val builder = AlertDialog.Builder(requireContext())
.setMessage(message)
.setNegativeButton(R.string.ok, null)
builder.show()
}
}
builder.show()
val deletable = this.item as Deletable
val realm = this.getRealm()
if (deletable.isValidForDelete(realm)) {
val intent = Intent()
intent.putExtra(DataListActivity.IntentKey.ITEM_DELETED.keyName, true)
activity?.setResult(RESULT_OK, intent)
activity?.finish()
} else {
val message = deletable.getFailedDeleteMessage()
val builder = AlertDialog.Builder(requireContext())
.setMessage(message)
.setNegativeButton(R.string.ok, null)
builder.show()
}
}
/**

Loading…
Cancel
Save