diff --git a/app/src/main/kotlin/jackall/moncalc/activity/MainActivity.kt b/app/src/main/kotlin/jackall/moncalc/activity/MainActivity.kt index 4c22dbc..2033338 100644 --- a/app/src/main/kotlin/jackall/moncalc/activity/MainActivity.kt +++ b/app/src/main/kotlin/jackall/moncalc/activity/MainActivity.kt @@ -75,7 +75,7 @@ ) ) var specialCount: Int - if (grade < 3) { + if (grade >= 3) { specialCount = 1 } else { specialCount = 0 diff --git a/app/src/main/kotlin/jackall/moncalc/common/Notification.kt b/app/src/main/kotlin/jackall/moncalc/common/Notification.kt index 70e60d4..b8b08f9 100644 --- a/app/src/main/kotlin/jackall/moncalc/common/Notification.kt +++ b/app/src/main/kotlin/jackall/moncalc/common/Notification.kt @@ -4,5 +4,5 @@ * Created by matsumoto_k on 2017/11/05. */ enum class Notification { - DATACHANGE + DATACHANGED } \ No newline at end of file diff --git a/app/src/main/kotlin/jackall/moncalc/viewmodel/FruitAnalyzeViewModel.kt b/app/src/main/kotlin/jackall/moncalc/viewmodel/FruitAnalyzeViewModel.kt index 01d1811..c7c8023 100644 --- a/app/src/main/kotlin/jackall/moncalc/viewmodel/FruitAnalyzeViewModel.kt +++ b/app/src/main/kotlin/jackall/moncalc/viewmodel/FruitAnalyzeViewModel.kt @@ -14,11 +14,14 @@ import com.github.mikephil.charting.data.PieEntry import com.github.mikephil.charting.formatter.IValueFormatter import com.github.mikephil.charting.utils.ViewPortHandler +import io.reactivex.schedulers.Schedulers import jackall.moncalc.App import jackall.moncalc.adapter.AnalyzeFruitAdapter +import jackall.moncalc.common.Notification import jackall.moncalc.db.MonstDataRealmHelper import jackall.moncalc.db.QuestRecordRealmHelper import jackall.moncalc.model.PieChartModel +import jackall.moncalc.utils.RxBus import jackall.moncalc.vo.Fruit import jackall.moncalc.vo.Grade import kotlin.concurrent.thread @@ -27,54 +30,77 @@ * Created by matsumoto_k on 2017/11/04. */ class FruitAnalyzeViewModel : LifecycleViewModel() { - val questRealmHelper = QuestRecordRealmHelper() - val monstDataRealmHelper = MonstDataRealmHelper() val pieData = ObservableField() val pieChartModel = ObservableField() val items = ObservableField>() init { thread { - val entries = ArrayList() - for (fruitId in 0..5) { - val count = questRealmHelper.countGradeById(fruitId) - if (count > 0) { - entries.add(PieEntry(count.toFloat(), monstDataRealmHelper.findNameById(Grade::class.java, fruitId))) + setFruitAnalyzeList() + setFruitAnalyzePie() + } + RxBus.observe().observeOn(Schedulers.newThread()).subscribe { + when (it.name) { + Notification.DATACHANGED.name -> { + thread { + setFruitAnalyzeList() + setFruitAnalyzePie() + } } } - pieChartModel.set(PieChartModel(entries.apply { sortByDescending { it.value } }, "")) - this.pieData.set(pieChartModel.get().pieData) - - val items = ArrayList() - items.add( - FruitAnalyzeItemViewModel( - "総合", - questRealmHelper.countGradeById(0).toString(), - questRealmHelper.countGradeById(1).toString(), - questRealmHelper.countGradeById(2).toString(), - questRealmHelper.countGradeById(3).toString(), - questRealmHelper.countGradeById(4).toString(), - questRealmHelper.countGradeById(5).toString() - ) - ) -// リストビューに入れる - monstDataRealmHelper.findAll(Fruit::class.java).forEach { - if (!questRealmHelper.isDrop(it.id)) - return@forEach - val item = FruitAnalyzeItemViewModel() - item.fruitName = monstDataRealmHelper.findNameById(Fruit::class.java, it.id) - item.grade0 = questRealmHelper.countGrade(it.id, 0).toString() - item.grade1 = questRealmHelper.countGrade(it.id, 1).toString() - item.grade2 = questRealmHelper.countGrade(it.id, 2).toString() - item.grade3 = questRealmHelper.countGrade(it.id, 3).toString() - item.grade4 = questRealmHelper.countGrade(it.id, 4).toString() - item.grade5 = questRealmHelper.countGrade(it.id, 5).toString() - items.add(item) - } - this.items.set(items.apply { sortByDescending { it.count() } }) } } + fun setFruitAnalyzeList() { + val questRealmHelper = QuestRecordRealmHelper() + val monstDataRealmHelper = MonstDataRealmHelper() + val items = ArrayList() + items.add( + FruitAnalyzeItemViewModel( + "総合", + questRealmHelper.countGradeById(5).toString(), + questRealmHelper.countGradeById(4).toString(), + questRealmHelper.countGradeById(3).toString(), + questRealmHelper.countGradeById(2).toString(), + questRealmHelper.countGradeById(1).toString(), + questRealmHelper.countGradeById(0).toString() + ) + ) +// リストビューに入れる + monstDataRealmHelper.findAll(Fruit::class.java).forEach { + if (!questRealmHelper.isDrop(it.id)) + return@forEach + val item = FruitAnalyzeItemViewModel() + item.fruitName = monstDataRealmHelper.findNameById(Fruit::class.java, it.id) + item.grade0 = questRealmHelper.countGrade(it.id, 5).toString() + item.grade1 = questRealmHelper.countGrade(it.id, 4).toString() + item.grade2 = questRealmHelper.countGrade(it.id, 3).toString() + item.grade3 = questRealmHelper.countGrade(it.id, 2).toString() + item.grade4 = questRealmHelper.countGrade(it.id, 1).toString() + item.grade5 = questRealmHelper.countGrade(it.id, 0).toString() + items.add(item) + } + this.items.set(items.apply { sortByDescending { it.count() } }) + questRealmHelper.close() + monstDataRealmHelper.close() + } + + fun setFruitAnalyzePie() { + val questRealmHelper = QuestRecordRealmHelper() + val monstDataRealmHelper = MonstDataRealmHelper() + val entries = ArrayList() + for (fruitId in 0..5) { + val count = questRealmHelper.countGradeById(fruitId) + if (count > 0) { + entries.add(PieEntry(count.toFloat(), monstDataRealmHelper.findNameById(Grade::class.java, fruitId))) + } + } + pieChartModel.set(PieChartModel(entries.apply { sortByDescending { it.value } }, "")) + this.pieData.set(pieChartModel.get().pieData) + questRealmHelper.close() + monstDataRealmHelper.close() + } + object Adapter { @JvmStatic @BindingAdapter("android:fruitPieChart") @@ -104,6 +130,7 @@ return view.layoutManager = LinearLayoutManager(App.instance) view.adapter = AnalyzeFruitAdapter(App.instance, items) + view.adapter.notifyDataSetChanged() } } @@ -115,7 +142,5 @@ override fun onDestroy() { super.onDestroy() - questRealmHelper.close() - monstDataRealmHelper.close() } } \ No newline at end of file diff --git a/app/src/main/kotlin/jackall/moncalc/viewmodel/HistoryViewModel.kt b/app/src/main/kotlin/jackall/moncalc/viewmodel/HistoryViewModel.kt index 1aa743d..ee5f246 100644 --- a/app/src/main/kotlin/jackall/moncalc/viewmodel/HistoryViewModel.kt +++ b/app/src/main/kotlin/jackall/moncalc/viewmodel/HistoryViewModel.kt @@ -3,16 +3,17 @@ import android.arch.lifecycle.ViewModel import android.arch.lifecycle.ViewModelProvider import android.databinding.ObservableField -import jackall.moncalc.db.MonstDataRealmHelper +import io.reactivex.schedulers.Schedulers +import jackall.moncalc.common.Notification import jackall.moncalc.db.QuestRecordRealmHelper +import jackall.moncalc.utils.RxBus +import kotlin.concurrent.thread /** * Created by matsumoto_k on 2017/11/03. */ class HistoryViewModel() : LifecycleViewModel() { - val questRealmHelper = QuestRecordRealmHelper() - val monstDataRealmHelper = MonstDataRealmHelper() val todayTempleCount = ObservableField() val todayDrop = ObservableField() val todaySpecialDrop = ObservableField() @@ -28,6 +29,34 @@ // val hisotoryItems = ArrayList() init { + thread { + setHistoryData() + } + RxBus.observe().observeOn(Schedulers.newThread()).subscribe { + when (it.name) { + Notification.DATACHANGED.name -> { + thread { + setHistoryData() + } + } + } + } +// val entries = ArrayList() +// val labels = ArrayList() +// questRealmHelper.findByPeriod(30).forEachIndexed { index, value -> +// entries.add( +// Entry(index.toFloat(), value.toFloat()) +// ) +// } +// +// val lineChartModel = LineChartModel(entries, "神殿周回数") +// lineData = lineChartModel.lineData +// this.labels = labels +// onRefresh() + } + + fun setHistoryData() { + val questRealmHelper = QuestRecordRealmHelper() todayTempleCount.set(questRealmHelper.getTodayCount().toString()) todayDrop.set(questRealmHelper.getTodayDropCount().toString()) todaySpecialDrop.set(questRealmHelper.getTodaySpecialCount().toString()) @@ -46,19 +75,7 @@ } else { this.weekSpecialPercent.set("${String.format("%.1f", weekSpecialPercent)}%") } -// -// val entries = ArrayList() -// val labels = ArrayList() -// questRealmHelper.findByPeriod(30).forEachIndexed { index, value -> -// entries.add( -// Entry(index.toFloat(), value.toFloat()) -// ) -// } -// -// val lineChartModel = LineChartModel(entries, "神殿周回数") -// lineData = lineChartModel.lineData -// this.labels = labels -// onRefresh() + questRealmHelper.close() } // fun onRefresh() { @@ -96,8 +113,6 @@ override fun onDestroy() { super.onDestroy() - monstDataRealmHelper.close() - questRealmHelper.close() } class Factory() : ViewModelProvider.NewInstanceFactory() { diff --git a/app/src/main/kotlin/jackall/moncalc/viewmodel/OverlayRegistViewModel.kt b/app/src/main/kotlin/jackall/moncalc/viewmodel/OverlayRegistViewModel.kt index bf8586c..0cb2bd1 100644 --- a/app/src/main/kotlin/jackall/moncalc/viewmodel/OverlayRegistViewModel.kt +++ b/app/src/main/kotlin/jackall/moncalc/viewmodel/OverlayRegistViewModel.kt @@ -12,12 +12,14 @@ import jackall.moncalc.App import jackall.moncalc.adapter.CustomSpinnerAdapter import jackall.moncalc.adapter.RegistAdapter +import jackall.moncalc.common.Notification import jackall.moncalc.common.PreferenceKeys import jackall.moncalc.common.PreferenceNames import jackall.moncalc.contract.MainServiceContract import jackall.moncalc.db.MonstDataRealmHelper import jackall.moncalc.db.QuestRecordRealmHelper import jackall.moncalc.utils.MySharedPref +import jackall.moncalc.utils.RxBus import jackall.moncalc.vo.* import java.util.* @@ -49,7 +51,7 @@ val drops = RealmList() var count = 0 registAdapter.items.forEach { - if (monstDataRealmHelper.findIdByRank(Grade::class.java, it.gradeRank.get()) < 3) { + if (monstDataRealmHelper.findIdByRank(Grade::class.java, it.gradeRank.get()) >= 3) { count++ } drops.add( @@ -71,6 +73,7 @@ ) recordSpinnerPosition(templeRank.get(), fruitRank.get(), gradeRank.get()) Toast.makeText(App.instance, "記録しました", Toast.LENGTH_LONG).show() + RxBus.send(Notification.DATACHANGED) mainServiceContract.showMoveView() } diff --git a/app/src/main/kotlin/jackall/moncalc/viewmodel/TempleAnalyzeViewModel.kt b/app/src/main/kotlin/jackall/moncalc/viewmodel/TempleAnalyzeViewModel.kt index e329a2f..d54ecd9 100644 --- a/app/src/main/kotlin/jackall/moncalc/viewmodel/TempleAnalyzeViewModel.kt +++ b/app/src/main/kotlin/jackall/moncalc/viewmodel/TempleAnalyzeViewModel.kt @@ -14,12 +14,15 @@ import com.github.mikephil.charting.data.PieEntry import com.github.mikephil.charting.formatter.IValueFormatter import com.github.mikephil.charting.utils.ViewPortHandler +import io.reactivex.schedulers.Schedulers import jackall.moncalc.App import jackall.moncalc.R import jackall.moncalc.adapter.AnalyzeTempleAdapter +import jackall.moncalc.common.Notification import jackall.moncalc.db.MonstDataRealmHelper import jackall.moncalc.db.QuestRecordRealmHelper import jackall.moncalc.model.PieChartModel +import jackall.moncalc.utils.RxBus import jackall.moncalc.vo.Temple import kotlin.concurrent.thread @@ -29,8 +32,6 @@ */ class TempleAnalyzeViewModel : LifecycleViewModel() { - val questRealmHelper = QuestRecordRealmHelper() - val monstDataRealmHelper = MonstDataRealmHelper() val baseTempleName by lazy { App.instance.resources.getStringArray(R.array.base_temple_name) } val pieData = ObservableField() val pieChartModel = ObservableField() @@ -38,41 +39,63 @@ init { thread { - val start = System.currentTimeMillis() - val entries = ArrayList() - for (attribute in 0..4) { - val count = questRealmHelper.countByAttribute(attribute) - if (count > 0) { - entries.add(PieEntry(count.toFloat(), baseTempleName.get(attribute))) + setTempleAnalyzeList() + setTempleAnalyzePie() + } + RxBus.observe().observeOn(Schedulers.newThread()).subscribe { + when (it.name) { + Notification.DATACHANGED.name -> { + thread { + setTempleAnalyzeList() + setTempleAnalyzePie() + } } } - pieChartModel.set(PieChartModel(entries.apply { sortByDescending { it.value } }, "")) - this.pieData.set(pieChartModel.get().pieData) + } + } - val items = ArrayList() - val specialPercent = questRealmHelper.getAllSpecialPercent() + fun setTempleAnalyzeList() { + val questRealmHelper = QuestRecordRealmHelper() + val monstDataRealmHelper = MonstDataRealmHelper() + val items = ArrayList() + val specialPercent = questRealmHelper.getAllSpecialPercent() + items.add( + TempleAnalyzeItemViewModel( + "総合", + questRealmHelper.findAll().size.toString(), + "${if (specialPercent.isNaN()) 0 else String.format("%.1f", specialPercent)}%" + ) + ) + + monstDataRealmHelper.findAll(Temple::class.java).forEach { + val count = questRealmHelper.countById(it.id) + if (count == 0) + return@forEach items.add( TempleAnalyzeItemViewModel( - "総合", - questRealmHelper.findAll().size.toString(), - "${if (specialPercent.isNaN()) 0 else String.format("%.1f", specialPercent)}%" + monstDataRealmHelper.findNameById(Temple::class.java, it.id), + count.toString(), + "${String.format("%.1f", questRealmHelper.getSpecialPercent(it.id))}%" ) ) - //リストビューに入れる - monstDataRealmHelper.findAll(Temple::class.java).forEach { - val count = questRealmHelper.countById(it.id) - if (count == 0) - return@forEach - items.add( - TempleAnalyzeItemViewModel( - monstDataRealmHelper.findNameById(Temple::class.java, it.id), - count.toString(), - "${String.format("%.1f", questRealmHelper.getSpecialPercent(it.id))}%" - ) - ) - } - this.items.set(items.apply { sortByDescending { it.count() } }) } + this.items.set(items.apply { sortByDescending { it.count() } }) + questRealmHelper.close() + monstDataRealmHelper.close() + } + + fun setTempleAnalyzePie() { + val questRealmHelper = QuestRecordRealmHelper() + val entries = ArrayList() + for (attribute in 0..4) { + val count = questRealmHelper.countByAttribute(attribute) + if (count > 0) { + entries.add(PieEntry(count.toFloat(), baseTempleName.get(attribute))) + } + } + pieChartModel.set(PieChartModel(entries.apply { sortByDescending { it.value } }, "")) + this.pieData.set(pieChartModel.get().pieData) + questRealmHelper.close() } object Adapter { @@ -95,6 +118,7 @@ }) mChart.description.text = "神殿周回割合" mChart.data = pieData + mChart.invalidate() } @JvmStatic @@ -104,14 +128,12 @@ return view.layoutManager = LinearLayoutManager(App.instance) view.adapter = AnalyzeTempleAdapter(App.instance, items) + view.adapter.notifyDataSetChanged() } } override fun onDestroy() { super.onDestroy() - questRealmHelper.close() - monstDataRealmHelper.close() - } class Factory() : ViewModelProvider.NewInstanceFactory() {