Adds sliding month and year to Calendar

blinds
Laurent 5 years ago
parent ef80ab83ee
commit f11b4c94ab
  1. 11
      app/src/main/java/net/pokeranalytics/android/model/filter/QueryCondition.kt
  2. 4
      app/src/main/java/net/pokeranalytics/android/model/realm/Session.kt
  3. 65
      app/src/main/java/net/pokeranalytics/android/ui/modules/calendar/CalendarFragment.kt
  4. 2
      app/src/main/res/values-de/strings.xml
  5. 2
      app/src/main/res/values-es/strings.xml
  6. 2
      app/src/main/res/values-fr/strings.xml
  7. 2
      app/src/main/res/values-hi/strings.xml
  8. 2
      app/src/main/res/values-it/strings.xml
  9. 2
      app/src/main/res/values-ja/strings.xml
  10. 2
      app/src/main/res/values-pt/strings.xml
  11. 2
      app/src/main/res/values-ru/strings.xml
  12. 2
      app/src/main/res/values-zh/strings.xml
  13. 4
      app/src/main/res/values/strings.xml

@ -187,9 +187,9 @@ sealed class QueryCondition : RowRepresentable {
fun getDisplayName(context: Context, value: T): String {
val prefix = this.resId?.let {
context.getString(it) + " "
context.getString(it, value.toString()) // + " "
} ?: ""
return prefix + labelForValue(value, context)
return prefix // + labelForValue(value, context)
}
}
@ -249,6 +249,7 @@ sealed class QueryCondition : RowRepresentable {
}
abstract class SingleInt(value: Int) : SingleValue<Int>(value) {
override fun labelForValue(value: Int, context: Context): String {
return value.toString()
}
@ -561,9 +562,9 @@ sealed class QueryCondition : RowRepresentable {
override var operator = Operator.EQUALS
override val viewType: Int = RowViewType.TITLE_VALUE_CHECK.ordinal
override fun labelForValue(value: Int, context: Context): String {
return value.toString()
}
// override fun labelForValue(value: Int, context: Context): String {
// return value.toString()
// }
// override fun entityName(context: Context): String {
// return this.resId?.let {

@ -104,7 +104,9 @@ open class Session : RealmObject(), Savable, RowUpdatable, RowRepresentable, Tim
AnyDayOfWeek::class.java, IsWeekEnd::class.java, IsWeekDay::class.java -> "dayOfWeek"
AnyMonthOfYear::class.java -> "month"
AnyYear::class.java -> "year"
PastDay::class.java, IsToday::class.java, WasYesterday::class.java, WasTodayAndYesterday::class.java, DuringThisYear::class.java, DuringThisMonth::class.java, DuringThisWeek::class.java -> "startDate"
PastDay::class.java, IsToday::class.java, WasYesterday::class.java,
WasTodayAndYesterday::class.java, DuringThisYear::class.java,
DuringThisMonth::class.java, DuringThisWeek::class.java -> "startDate"
StartedFromTime::class.java -> "startDateHourMinuteComponent"
EndedToTime::class.java -> "endDateHourMinuteComponent"
Duration::class.java -> "netDuration"

@ -20,6 +20,7 @@ import net.pokeranalytics.android.databinding.FragmentCalendarBinding
import net.pokeranalytics.android.exceptions.PAIllegalStateException
import net.pokeranalytics.android.model.Criteria
import net.pokeranalytics.android.model.combined
import net.pokeranalytics.android.model.filter.Query
import net.pokeranalytics.android.model.filter.QueryCondition
import net.pokeranalytics.android.model.realm.ComputableResult
import net.pokeranalytics.android.model.realm.UserConfig
@ -67,6 +68,12 @@ class CalendarFragment : RealmFragment(), CoroutineScope, StaticRowRepresentable
private var sortedMonthlyReports: SortedMap<Date, ComputedResults> = HashMap<Date, ComputedResults>().toSortedMap()
private var sortedYearlyReports: SortedMap<Date, ComputedResults> = HashMap<Date, ComputedResults>().toSortedMap()
private val slidingMonthQuery = Query(QueryCondition.PastDay(30))
private val slidingYearQuery = Query(QueryCondition.PastDay(365))
private var slidingMonthResults: ComputedResults? = null
private var slidingYearResults: ComputedResults? = null
private var datesForRows: HashMap<CustomizableRowRepresentable, Date> = HashMap()
private var sessionTypeCondition: QueryCondition? = null
@ -213,7 +220,7 @@ class CalendarFragment : RealmFragment(), CoroutineScope, StaticRowRepresentable
}
}
binding.filterTimeAll?.setOnCheckedChangeListener { _, isChecked ->
binding.filterTimeAll.setOnCheckedChangeListener { _, isChecked ->
selectTimeFilter(TimeFilter.ALL, isChecked)
}
@ -260,7 +267,7 @@ class CalendarFragment : RealmFragment(), CoroutineScope, StaticRowRepresentable
TimeFilter.values().forEach { tf ->
if (tf != timeFilter) {
when (tf) {
TimeFilter.ALL -> binding.filterTimeAll?.isChecked = false
TimeFilter.ALL -> binding.filterTimeAll.isChecked = false
TimeFilter.MONTH -> binding.filterTimeMonth.isChecked = false
TimeFilter.YEAR -> binding.filterTimeYear.isChecked = false
}
@ -269,7 +276,7 @@ class CalendarFragment : RealmFragment(), CoroutineScope, StaticRowRepresentable
displayData()
} else if (currentTimeFilter == timeFilter) {
when (timeFilter) {
TimeFilter.ALL -> binding.filterTimeAll?.isChecked = true
TimeFilter.ALL -> binding.filterTimeAll.isChecked = true
TimeFilter.MONTH -> binding.filterTimeMonth.isChecked = true
TimeFilter.YEAR -> binding.filterTimeYear.isChecked = true
}
@ -317,6 +324,15 @@ class CalendarFragment : RealmFragment(), CoroutineScope, StaticRowRepresentable
val allReport = Calculator.computeStats(realm, options = allOptions)
this.allComputedResults = allReport.results.first()
// Sliding Month [sm]
val smOptions = Calculator.Options(
progressValues = Calculator.Options.ProgressValues.STANDARD,
stats = requiredStats,
query = this.slidingMonthQuery)
val smReport = Calculator.computeStats(realm, options = smOptions)
this.slidingMonthResults = smReport.results.first()
// Month
val monthlyReports: HashMap<Date, ComputedResults> = HashMap()
@ -351,6 +367,15 @@ class CalendarFragment : RealmFragment(), CoroutineScope, StaticRowRepresentable
}
}
// Sliding Year [sm]
val syOptions = Calculator.Options(
progressValues = Calculator.Options.ProgressValues.STANDARD,
stats = requiredStats,
query = this.slidingYearQuery)
val syReport = Calculator.computeStats(realm, options = syOptions)
this.slidingYearResults = syReport.results.first()
calendar.time = Date().startOfYear()
// Year
@ -431,6 +456,17 @@ class CalendarFragment : RealmFragment(), CoroutineScope, StaticRowRepresentable
// MONTH
TimeFilter.MONTH -> {
slidingMonthResults?.computedStat(this.currentStat)?.let { computedStat ->
val row = CustomizableRowRepresentable(
customViewType = RowViewType.TITLE_VALUE_ARROW,
title = this.slidingMonthQuery.getName(requireContext()),
valueTextFormat = computedStat.textFormat,
isSelectable = true
)
rows.add(row)
}
val years: ArrayList<String> = ArrayList()
sortedMonthlyReports.keys.forEach { date ->
if (!years.contains(date.getDateYear())) {
@ -452,16 +488,27 @@ class CalendarFragment : RealmFragment(), CoroutineScope, StaticRowRepresentable
isSelectable = true
)
rows.add(row)
datesForRows[row] = date
this.rows.add(row)
this.datesForRows[row] = date
}
}
}
// YEAR
TimeFilter.YEAR -> {
sortedYearlyReports.keys.forEach { date ->
sortedYearlyReports[date]?.computedStat(currentStat)?.let { computedStat ->
this.slidingYearResults?.computedStat(this.currentStat)?.let { computedStat ->
val row = CustomizableRowRepresentable(
customViewType = RowViewType.TITLE_VALUE_ARROW,
title = this.slidingYearQuery.getName(requireContext()),
valueTextFormat = computedStat.textFormat,
isSelectable = true
)
this.rows.add(row)
}
this.sortedYearlyReports.keys.forEach { date ->
this.sortedYearlyReports[date]?.computedStat(this.currentStat)?.let { computedStat ->
val row = CustomizableRowRepresentable(
customViewType = RowViewType.TITLE_VALUE_ARROW,
title = date.getDateYear(),
@ -469,8 +516,8 @@ class CalendarFragment : RealmFragment(), CoroutineScope, StaticRowRepresentable
isSelectable = true
)
rows.add(row)
datesForRows[row] = date
this.rows.add(row)
this.datesForRows[row] = date
}
}
}

@ -429,7 +429,7 @@
<string name="paused_session_state">Pause</string>
<string name="payment_successful">Zahlung erfolgt</string>
<string name="period">Dauer</string>
<string name="period_in_days">Vergangene Tage</string>
<string name="period_in_days">Vergangene %1$s Tagen</string>
<string name="pincode_activated">ja</string>
<string name="pincode_desactivated">nein</string>
<string name="player">Spieler</string>

@ -432,7 +432,7 @@ La aplicación funciona con una suscripción anual para uso ilimitado, pero obti
<string name="paused_session_state">Pausa</string>
<string name="payment_successful">Pago realizado</string>
<string name="period">Duración</string>
<string name="period_in_days">Últimos días</string>
<string name="period_in_days">Últimos %1$s días</string>
<string name="pincode_activated"></string>
<string name="pincode_desactivated">no</string>
<string name="place">Lugar</string>

@ -429,7 +429,7 @@
<string name="paused_session_state">Pause</string>
<string name="payment_successful">Paiement effectué</string>
<string name="period">Durée</string>
<string name="period_in_days">Jours précédents</string>
<string name="period_in_days">%1$s derniers jours</string>
<string name="pincode_activated">oui</string>
<string name="pincode_desactivated">non</string>
<string name="place">Place</string>

@ -427,7 +427,7 @@
<string name="paused_session_state">ि</string>
<string name="payment_successful">गतन सफल</string>
<string name="period">अवधि</string>
<string name="period_in_days">िछलि</string>
<string name="period_in_days">िछल %1$s ि</string>
<string name="pincode_activated"></string>
<string name="pincode_desactivated">नह</string>
<string name="place"></string>

@ -427,7 +427,7 @@
<string name="paused_session_state">Pausa</string>
<string name="payment_successful">Pagamento effettuato</string>
<string name="period">Durata</string>
<string name="period_in_days">Giorni passati</string>
<string name="period_in_days">Giorni %1$s passati</string>
<string name="pincode_activated"></string>
<string name="pincode_desactivated">no</string>
<string name="place">Luogo</string>

@ -431,7 +431,7 @@
<string name="paused_session_state">ブレーク</string>
<string name="payment_successful">支払い成功</string>
<string name="period">期間</string>
<string name="period_in_days">経過日数</string>
<string name="period_in_days">経過%1$s日数</string>
<string name="pincode_activated">はい</string>
<string name="pincode_desactivated">いいえ</string>
<string name="place">プレース</string>

@ -427,7 +427,7 @@
<string name="paused_session_state">Intervalo</string>
<string name="payment_successful">Pagamento realizado com sucesso!</string>
<string name="period">Duração</string>
<string name="period_in_days">Últimos dias</string>
<string name="period_in_days">Últimos %1$s dias</string>
<string name="pincode_activated">sim</string>
<string name="pincode_desactivated">não</string>
<string name="place">Lugar</string>

@ -430,7 +430,7 @@
<string name="paused_session_state">Перерыв</string>
<string name="payment_successful">Платёж успешен</string>
<string name="period">Продолжительность</string>
<string name="period_in_days">Прошедшие дни</string>
<string name="period_in_days">Прошедшие %1$s дни</string>
<string name="pincode_activated">Да</string>
<string name="pincode_desactivated">не</string>
<string name="place">Место</string>

@ -400,7 +400,7 @@
<string name="paused_session_state">休息</string>
<string name="payment_successful">支付成功</string>
<string name="period">时长</string>
<string name="period_in_days">已过天数</string>
<string name="period_in_days">已过%1$s天数</string>
<string name="pincode_activated"></string>
<string name="pincode_desactivated"></string>
<string name="player">玩家</string>

@ -424,7 +424,7 @@
<string name="paused_session_state">Break</string>
<string name="payment_successful">Payment successful</string>
<string name="period">Duration</string>
<string name="period_in_days">Past days</string>
<string name="period_in_days">Past %1$s days</string>
<string name="pincode_activated">yes</string>
<string name="pincode_desactivated">no</string>
<string name="place">Place</string>
@ -807,7 +807,7 @@
<string name="show_villain_cards">Show villain cards</string>
<string name="please_save_hand_history">Please save before sharing</string>
<string name="contact_support">It looks like there is an issue here. Please contact the support to get help.</string>
<string name="product_unavailable">Please wait for a second or retry in a moment...</string>
<string name="product_unavailable">Please wait for a second or retry in a moment</string>
<string name="posts">posts</string>
<string name="show_blog_tips">Show tips on front page</string>
<string name="blog_tips">App tips</string>

Loading…
Cancel
Save