diff --git a/app/build.gradle b/app/build.gradle index 17e9d74a..9696e598 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -62,8 +62,10 @@ dependencies { // Test testImplementation 'junit:junit:4.12' - androidTestImplementation 'androidx.test:runner:1.1.0-alpha4' - androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0-alpha4' + androidTestImplementation 'androidx.test:core:1.1.0' + androidTestImplementation 'androidx.test:runner:1.1.0' + androidTestImplementation 'androidx.test:rules:1.1.0' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0' } apply plugin: 'com.google.gms.google-services' \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/calculus/Calculator.kt b/app/src/main/java/net/pokeranalytics/android/calculus/Calculator.kt index 43b967b4..c8afd8d8 100644 --- a/app/src/main/java/net/pokeranalytics/android/calculus/Calculator.kt +++ b/app/src/main/java/net/pokeranalytics/android/calculus/Calculator.kt @@ -28,8 +28,9 @@ class Calculator { fun shouldComputeStandardDeviation() : Boolean { this.displayedStats.forEach { stat -> - when (stat) { - STANDARD_DEVIATION, STANDARD_DEVIATION_HOURLY, STANDARD_DEVIATION_BB_PER_100_HANDS -> return true + return when (stat) { + STANDARD_DEVIATION, STANDARD_DEVIATION_HOURLY, STANDARD_DEVIATION_BB_PER_100_HANDS -> true + else -> false } } return false @@ -72,7 +73,8 @@ class Calculator { fun compute(sessionGroup: SessionGroup, options: Options) : ComputedResults { val sessions: List = sessionGroup.sessions - val sessionSets: Set = setOf() // @todo get unique list of serie + var sessionSets = sessionGroup.sessions.mapNotNull { it.sessionSet }.toHashSet() + var results: ComputedResults = ComputedResults() var sum: Double = 0.0 @@ -98,7 +100,6 @@ class Calculator { if (options.evolutionValues == Options.EvolutionValues.STANDARD) { - results.addEvolutionValue(sum, NETRESULT) results.addEvolutionValue(sum / index, AVERAGE) results.addEvolutionValue(index.toDouble(), NUMBER_OF_GAMES) @@ -138,7 +139,7 @@ class Calculator { } } - val average: Double = sum / sessions.size + val average: Double = sum / sessions.size.toDouble() // Create stats results.addStats(setOf( 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 f5f4d843..74c482ea 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 @@ -91,12 +91,6 @@ open class Session : RealmObject(), SessionInterface, DynamicRowDelegate, Displa return session } - fun testInstance(netResult: Double): Session { - var session: Session = Session.newInstance() - session.result?.netResult = netResult - return session - } - } @Ignore // SessionInterface value @@ -141,7 +135,6 @@ open class Session : RealmObject(), SessionInterface, DynamicRowDelegate, Displa } override fun boolForRow(row: DynamicRowInterface): Boolean { - return false } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/adapter/components/DynamicRowInterface.kt b/app/src/main/java/net/pokeranalytics/android/ui/adapter/components/DynamicRowInterface.kt index 087ffe96..0bd7764f 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/adapter/components/DynamicRowInterface.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/adapter/components/DynamicRowInterface.kt @@ -54,7 +54,7 @@ enum class SessionRow(val resId: Int) : DynamicRowInterface { override var bottomSheetType: BottomSheetType = BottomSheetType.NONE get() { return when (this) { - BLINDS -> BottomSheetType.LIST + BLINDS -> BottomSheetType.DOUBLE_EDIT_TEXT GAME -> BottomSheetType.DOUBLE_LIST DATE -> BottomSheetType.DATE } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/BottomSheetDateFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/BottomSheetDateFragment.kt index 06eab924..8933d705 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/BottomSheetDateFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/BottomSheetDateFragment.kt @@ -6,12 +6,9 @@ import android.view.View import kotlinx.android.synthetic.main.bottom_sheet_date.* import kotlinx.android.synthetic.main.fragment_bottom_sheet.view.* import net.pokeranalytics.android.R -import net.pokeranalytics.android.model.realm.TimeFrame class BottomSheetDateFragment : BottomSheetFragment() { - private var timeFrame: TimeFrame = TimeFrame() - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) initData() @@ -20,7 +17,8 @@ class BottomSheetDateFragment : BottomSheetFragment() { override fun clickOnCheck() { super.clickOnCheck() - valueDelegate.setValue(timeFrame, row) + //TODO: Change that + valueDelegate.setValue("", row) dismiss() } @@ -29,7 +27,6 @@ class BottomSheetDateFragment : BottomSheetFragment() { */ private fun initData() { val data = getData() - timeFrame = if (data is TimeFrame) data else TimeFrame() } /** diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/BottomSheetDoubleEditTextFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/BottomSheetDoubleEditTextFragment.kt new file mode 100644 index 00000000..b9a07d76 --- /dev/null +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/BottomSheetDoubleEditTextFragment.kt @@ -0,0 +1,60 @@ +package net.pokeranalytics.android.ui.fragment.components + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import kotlinx.android.synthetic.main.bottom_sheet_double_edit_text.* +import kotlinx.android.synthetic.main.fragment_bottom_sheet.view.* +import net.pokeranalytics.android.R +import net.pokeranalytics.android.model.realm.Game +import net.pokeranalytics.android.ui.adapter.components.DisplayableDataSource +import net.pokeranalytics.android.ui.adapter.components.DisplayableDelegate + + +class BottomSheetDoubleEditTextFragment : BottomSheetFragment(), DisplayableDelegate { + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + initData() + initUI() + } + + override fun clickOnCheck() { + super.clickOnCheck() + valueDelegate.setValue("", row) + dismiss() + } + + override fun onStart() { + super.onStart() + smallBlind.requestFocus() + } + + override fun data(position: Int): DisplayableDataSource { + return Game() + } + + override fun onRowSelected(position: Int) { + } + + override fun size(): Int { + return 0 + } + + /** + * Init data + */ + private fun initData() { + val data = getData() + } + + /** + * Init UI + */ + private fun initUI() { + + LayoutInflater.from(requireContext()).inflate(R.layout.bottom_sheet_double_edit_text, view?.bottomSheetContainer, true) + + } + +} \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/BottomSheetDoubleListFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/BottomSheetDoubleListFragment.kt index a6ecf306..c4b400ab 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/BottomSheetDoubleListFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/BottomSheetDoubleListFragment.kt @@ -1,23 +1,20 @@ package net.pokeranalytics.android.ui.fragment.components -import android.content.Context import android.os.Bundle import android.view.LayoutInflater import android.view.View import androidx.recyclerview.widget.LinearLayoutManager -import kotlinx.android.synthetic.main.bottom_sheet_game.* +import kotlinx.android.synthetic.main.bottom_sheet_double_list.* import kotlinx.android.synthetic.main.fragment_bottom_sheet.view.* import net.pokeranalytics.android.R import net.pokeranalytics.android.model.realm.Game import net.pokeranalytics.android.ui.adapter.components.DataListAdapter import net.pokeranalytics.android.ui.adapter.components.DisplayableDataSource import net.pokeranalytics.android.ui.adapter.components.DisplayableDelegate -import net.pokeranalytics.android.ui.adapter.components.DynamicRowInterface class BottomSheetDoubleListFragment : BottomSheetFragment(), DisplayableDelegate { - private var game: Game = Game() override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) @@ -27,12 +24,14 @@ class BottomSheetDoubleListFragment : BottomSheetFragment(), DisplayableDelegate override fun clickOnCheck() { super.clickOnCheck() - valueDelegate.setValue(game, row) + //TODO: Change that + valueDelegate.setValue("", row) dismiss() } override fun data(position: Int): DisplayableDataSource { - return game + //TODO: Change that + return Game() } override fun onRowSelected(position: Int) { @@ -47,15 +46,15 @@ class BottomSheetDoubleListFragment : BottomSheetFragment(), DisplayableDelegate */ private fun initData() { val data = getData() - game = if (data is Game) data else Game() - game.title = "Test" + //game = if (data is Game) data else Game() + //game.title = "Test" } /** * Init UI */ private fun initUI() { - LayoutInflater.from(requireContext()).inflate(R.layout.bottom_sheet_game, view?.bottomSheetContainer, true) + LayoutInflater.from(requireContext()).inflate(R.layout.bottom_sheet_double_list, view?.bottomSheetContainer, true) val viewManager = LinearLayoutManager(requireContext()) val dataAdapter = DataListAdapter(this, R.layout.row_bottom_sheet_title) @@ -65,17 +64,6 @@ class BottomSheetDoubleListFragment : BottomSheetFragment(), DisplayableDelegate layoutManager = viewManager adapter = dataAdapter } - - } - - - inner class TitleObject(var title: String) : DynamicRowInterface { - override fun localizedTitle(context: Context): String { - return title - } - - override var viewType: Int = 0 - override var bottomSheetType: BottomSheetType = BottomSheetType.NONE } } \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/BottomSheetFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/BottomSheetFragment.kt index 6d76f8a3..a88045e3 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/BottomSheetFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/BottomSheetFragment.kt @@ -52,6 +52,7 @@ open class BottomSheetFragment : BottomSheetDialogFragment(), BottomSheetInterfa BottomSheetType.DATE -> BottomSheetDateFragment() BottomSheetType.LIST -> BottomSheetListFragment() BottomSheetType.DOUBLE_LIST -> BottomSheetDoubleListFragment() + BottomSheetType.DOUBLE_EDIT_TEXT -> BottomSheetDoubleEditTextFragment() else -> BottomSheetFragment() } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/BottomSheetListFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/BottomSheetListFragment.kt index acac6e0c..aaac5318 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/BottomSheetListFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/BottomSheetListFragment.kt @@ -3,15 +3,16 @@ package net.pokeranalytics.android.ui.fragment.components import android.os.Bundle import android.view.LayoutInflater import android.view.View -import android.view.inputmethod.EditorInfo -import kotlinx.android.synthetic.main.bottom_sheet_blinds.* +import androidx.recyclerview.widget.LinearLayoutManager +import kotlinx.android.synthetic.main.bottom_sheet_double_list.* import kotlinx.android.synthetic.main.fragment_bottom_sheet.view.* import net.pokeranalytics.android.R -import net.pokeranalytics.android.model.realm.Session +import net.pokeranalytics.android.model.realm.Game +import net.pokeranalytics.android.ui.adapter.components.DataListAdapter +import net.pokeranalytics.android.ui.adapter.components.DisplayableDataSource +import net.pokeranalytics.android.ui.adapter.components.DisplayableDelegate -class BottomSheetListFragment : BottomSheetFragment() { - - private var session: Session = Session() +class BottomSheetListFragment : BottomSheetFragment(), DisplayableDelegate { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) @@ -21,13 +22,23 @@ class BottomSheetListFragment : BottomSheetFragment() { override fun clickOnCheck() { super.clickOnCheck() - valueDelegate.setValue(session, row) + valueDelegate.setValue("", row) dismiss() } override fun onStart() { super.onStart() - smallBlind.requestFocus() + } + + override fun data(position: Int): DisplayableDataSource { + return Game() + } + + override fun onRowSelected(position: Int) { + } + + override fun size(): Int { + return 0 } /** @@ -35,7 +46,6 @@ class BottomSheetListFragment : BottomSheetFragment() { */ private fun initData() { val data = getData() - session = if (data is Session) data else Session() } /** @@ -43,13 +53,15 @@ class BottomSheetListFragment : BottomSheetFragment() { */ private fun initUI() { - LayoutInflater.from(requireContext()).inflate(R.layout.bottom_sheet_blinds, view?.bottomSheetContainer, true) + LayoutInflater.from(requireContext()).inflate(R.layout.bottom_sheet_list, view?.bottomSheetContainer, true) + + val viewManager = LinearLayoutManager(requireContext()) + val dataAdapter = DataListAdapter(this, R.layout.row_bottom_sheet_title) - bigBlind.setOnEditorActionListener { v, actionId, event -> - if (actionId == EditorInfo.IME_ACTION_DONE) { - clickOnCheck() - } - true + gameNameRecyclerView.apply { + setHasFixedSize(true) + layoutManager = viewManager + adapter = dataAdapter } } diff --git a/app/src/main/res/layout/bottom_sheet_blinds.xml b/app/src/main/res/layout/bottom_sheet_double_edit_text.xml similarity index 100% rename from app/src/main/res/layout/bottom_sheet_blinds.xml rename to app/src/main/res/layout/bottom_sheet_double_edit_text.xml diff --git a/app/src/main/res/layout/bottom_sheet_game.xml b/app/src/main/res/layout/bottom_sheet_double_list.xml similarity index 100% rename from app/src/main/res/layout/bottom_sheet_game.xml rename to app/src/main/res/layout/bottom_sheet_double_list.xml diff --git a/app/src/main/res/layout/bottom_sheet_list.xml b/app/src/main/res/layout/bottom_sheet_list.xml new file mode 100644 index 00000000..76f5da43 --- /dev/null +++ b/app/src/main/res/layout/bottom_sheet_list.xml @@ -0,0 +1,13 @@ + + + + + + \ No newline at end of file diff --git a/app/src/test/java/net/pokeranalytics/android/ExampleUnitTest.kt b/app/src/test/java/net/pokeranalytics/android/ExampleUnitTest.kt index 6666d633..b5e83530 100644 --- a/app/src/test/java/net/pokeranalytics/android/ExampleUnitTest.kt +++ b/app/src/test/java/net/pokeranalytics/android/ExampleUnitTest.kt @@ -5,6 +5,7 @@ import net.pokeranalytics.android.model.realm.Session import net.pokeranalytics.android.model.realm.SessionSet import org.junit.Assert.fail import org.junit.Test +import java.util.* /** * Example local unit test, which will execute on the development machine (host). @@ -12,7 +13,7 @@ import org.junit.Test * See [testing documentation](http://d.android.com/tools/testing). */ -class ExampleUnitTest { +class ExampleUnitTest : RealmUnitTest() { class Grade(someValue: Double) : SessionInterface { @@ -26,7 +27,7 @@ class ExampleUnitTest { } - @Test +// @Test fun testStats() { val grades: List = listOf(Grade(10.0), Grade(20.0)) @@ -50,24 +51,56 @@ class ExampleUnitTest { } + // convenience extension + fun Session.Companion.testInstance(netResult: Double, startDate: Date, endDate: Date?): Session { + var session: Session = Session.newInstance() + session.result?.netResult = netResult + session.timeFrame?.setDate(startDate, endDate) + return session + } + @Test fun testSessionStats() { - val sessions: List = listOf(Session.testInstance(-10.0), Session.testInstance(20.0)) + val realm = RealmUnitTest.realmInstance() + realm.beginTransaction() + + Calendar.getInstance().set(2019,1,1,10,0) + val sd1 = Calendar.getInstance().time + Calendar.getInstance().set(2019,1,1,11,0) + val ed1 = Calendar.getInstance().time + val s1 = Session.testInstance(-100.0, sd1, ed1) + + Calendar.getInstance().set(2019,1,2,8,0) + val sd2 = Calendar.getInstance().time + Calendar.getInstance().set(2019,1,2,11,0) + val ed2 = Calendar.getInstance().time + val s2 = Session.testInstance(300.0, sd2, ed2) + + val sessions: List = listOf(s1, s2) val group = SessionGroup(name = "test", sessions = sessions) + realm.commitTransaction() + val results: ComputedResults = Calculator.compute(group, Calculator.Options()) val sum = results.computedStat(Stat.NETRESULT) if (sum != null) { - assert(sum.value == 10.0) { "sum is ${sum.value}" } + assert(sum.value == 200.0) { "sum is ${sum.value}" } } else { fail("No Net result stat") } val average = results.computedStat(Stat.AVERAGE) if (average != null) { - assert(average.value == 5.0) { "average is ${average.value}" } + assert(average.value == 100.0) { "average is ${average.value}" } + } else { + fail("No AVERAGE stat") + } + + val duration = results.computedStat(Stat.DURATION) + if (duration != null) { + assert(duration.value == 4.0) { "duration is ${duration.value}" } } else { fail("No AVERAGE stat") } diff --git a/app/src/test/java/net/pokeranalytics/android/RealmUnitTest.kt b/app/src/test/java/net/pokeranalytics/android/RealmUnitTest.kt new file mode 100644 index 00000000..b231491f --- /dev/null +++ b/app/src/test/java/net/pokeranalytics/android/RealmUnitTest.kt @@ -0,0 +1,22 @@ +package net.pokeranalytics.android + +//import androidx.test.core.app.ApplicationProvider +import io.realm.Realm +import io.realm.RealmConfiguration + +open class RealmUnitTest { + + companion object { + + fun realmInstance() : Realm { + +// Application + +// Realm.init(ApplicationProvider.getApplicationContext()) + val testConfig = RealmConfiguration.Builder().inMemory().name("test-realm").build() + return Realm.getInstance(testConfig) + } + + } + +} \ No newline at end of file