Fixes in QueryCondition operators

powerreport
Laurent 3 years ago
parent 0e27805a8d
commit 74f7e8d422
  1. 10
      app/src/androidTest/java/net/pokeranalytics/android/unitTests/filter/SessionFilterInstrumentedUnitTest.kt
  2. 12
      app/src/main/java/net/pokeranalytics/android/model/Criteria.kt
  3. 130
      app/src/main/java/net/pokeranalytics/android/model/filter/QueryCondition.kt
  4. 3
      app/src/main/java/net/pokeranalytics/android/ui/view/rows/FilterItemRow.kt
  5. 18
      app/src/main/java/net/pokeranalytics/android/ui/view/rows/FilterSectionRow.kt
  6. 2
      app/src/main/java/net/pokeranalytics/android/ui/view/rows/StaticReport.kt
  7. 4
      app/src/main/res/values-de/strings.xml
  8. 4
      app/src/main/res/values-es/strings.xml
  9. 4
      app/src/main/res/values-fr/strings.xml
  10. 4
      app/src/main/res/values-hi/strings.xml
  11. 4
      app/src/main/res/values-it/strings.xml
  12. 4
      app/src/main/res/values-ja/strings.xml
  13. 4
      app/src/main/res/values-pt/strings.xml
  14. 4
      app/src/main/res/values-ru/strings.xml
  15. 4
      app/src/main/res/values-zh/strings.xml
  16. 4
      app/src/main/res/values/strings.xml

@ -458,7 +458,7 @@ class SessionFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() {
realm.commitTransaction()
val filter = QueryCondition.NetAmountWon()
val filterElementRow = QueryCondition.more<QueryCondition.NetAmountWon>().apply { listOfValues = arrayListOf(204.0) }
val filterElementRow = QueryCondition.moreOrEqual<QueryCondition.NetAmountWon>().apply { listOfValues = arrayListOf(204.0) }
filter.updateValueBy(FilterCondition(arrayListOf(filterElementRow), FilterSectionRow.Value))
val sessions = Filter.queryOn<Session>(realm, Query(filterElementRow))
@ -482,7 +482,7 @@ class SessionFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() {
realm.commitTransaction()
val filter = QueryCondition.NetAmountWon()
val filterElementRow = QueryCondition.less<QueryCondition.NetAmountWon>().apply { listOfValues = arrayListOf(540.0) }
val filterElementRow = QueryCondition.lessOrEqual<QueryCondition.NetAmountWon>().apply { listOfValues = arrayListOf(540.0) }
filter.updateValueBy(FilterCondition(arrayListOf(filterElementRow), FilterSectionRow.Value))
val sessions = Filter.queryOn<Session>(realm, Query(filter))
@ -506,11 +506,11 @@ class SessionFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() {
realm.commitTransaction()
val filterMore = QueryCondition.NetAmountWon()
val filterElementRow = QueryCondition.more<QueryCondition.NetAmountWon>().apply { listOfValues = arrayListOf(199.0) }
val filterElementRow = QueryCondition.moreOrEqual<QueryCondition.NetAmountWon>().apply { listOfValues = arrayListOf(199.0) }
filterMore.updateValueBy(FilterCondition(arrayListOf(filterElementRow), FilterSectionRow.Value))
val filterLess = QueryCondition.NetAmountWon()
val filterElementRow2 = QueryCondition.less<QueryCondition.NetAmountWon>().apply { listOfValues = arrayListOf(400.0) }
val filterElementRow2 = QueryCondition.lessOrEqual<QueryCondition.NetAmountWon>().apply { listOfValues = arrayListOf(400.0) }
filterLess.updateValueBy(FilterCondition(arrayListOf(filterElementRow2), FilterSectionRow.Value))
val sessions = Filter.queryOn<Session>(realm, Query(filterMore, filterLess))
@ -584,7 +584,7 @@ class SessionFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() {
val filterMore = QueryCondition.TournamentFinalPosition(QueryCondition.Operator.MORE, finalPosition = 10)
sessions = Filter.queryOn<Session>(realm, Query(filterMore))
sessions = Filter.queryOn(realm, Query(filterMore))
Assert.assertEquals(1, sessions.size)

@ -250,13 +250,19 @@ sealed class Criteria(override var uniqueIdentifier: Int) : IntIdentifiable, Row
queries
}
is Duration -> {
(0..12).map { i ->
val hourlyQueries = (0..12).map { i ->
val more = QueryCondition.Duration(i * 60)
more.operator = QueryCondition.Operator.MORE
more.operator = QueryCondition.Operator.MORE_OR_EQUAL
val less = QueryCondition.Duration((i + 1) * 60)
less.operator = QueryCondition.Operator.LESS
Query(more, less)
}
}.toMutableList()
val moreThan12Hours = QueryCondition.Duration(12 * 60)
moreThan12Hours.operator = QueryCondition.Operator.MORE_OR_EQUAL
hourlyQueries.add(Query(moreThan12Hours))
hourlyQueries
}
else -> throw PokerAnalyticsException.ComparisonCriteriaUnhandled(this)
}

@ -55,16 +55,24 @@ sealed class QueryCondition : RowRepresentable {
}
}
inline fun <reified T : QueryCondition> more(): T {
return newInstance(T::class).apply { this.operator = Operator.MORE }
// inline fun <reified T : QueryCondition> more(): T {
// return newInstance(T::class).apply { this.operator = Operator.MORE }
// }
//
// inline fun <reified T : QueryCondition> less(): T {
// return newInstance(T::class).apply { this.operator = Operator.LESS }
// }
inline fun <reified T : QueryCondition> moreOrEqual(): T {
return newInstance(T::class).apply { this.operator = Operator.MORE_OR_EQUAL }
}
inline fun <reified T : QueryCondition> less(): T {
return newInstance(T::class).apply { this.operator = Operator.LESS }
inline fun <reified T : QueryCondition> lessOrEqual(): T {
return newInstance(T::class).apply { this.operator = Operator.LESS_OR_EQUAL }
}
inline fun <reified T : QueryCondition> moreOrLess(): ArrayList<T> {
return arrayListOf(more(), less())
inline fun <reified T : QueryCondition> moreEqualOrLessEqual(): ArrayList<T> {
return arrayListOf(moreOrEqual(), lessOrEqual())
}
fun <T : QueryCondition> valueOf(name: String): T {
@ -104,7 +112,9 @@ sealed class QueryCondition : RowRepresentable {
ANY,
ALL,
MORE,
MORE_OR_EQUAL,
LESS,
LESS_OR_EQUAL,
EQUALS,
TRUE,
NOTNULL
@ -116,7 +126,7 @@ sealed class QueryCondition : RowRepresentable {
val groupId: String
get() {
return when (this.operator) {
Operator.MORE, Operator.LESS -> return "${this.operator.name.toLowerCase().capitalize()}$baseId"
Operator.MORE, Operator.LESS, Operator.MORE_OR_EQUAL, Operator.LESS_OR_EQUAL -> return "${this.operator.name.toLowerCase().capitalize()}$baseId"
else -> this.baseId
}
}
@ -124,7 +134,7 @@ sealed class QueryCondition : RowRepresentable {
val id: List<String>
get() {
when (this.operator) {
Operator.MORE, Operator.LESS -> return listOf("$baseId+${this.operator.name}")
Operator.MORE, Operator.LESS, Operator.MORE_OR_EQUAL, Operator.LESS_OR_EQUAL -> return listOf("$baseId+${this.operator.name}")
else -> {}
}
@ -542,19 +552,19 @@ sealed class QueryCondition : RowRepresentable {
}
class StartedFromDate(date: Date) : DateQuery(date) {
override var operator = Operator.MORE
override var operator = Operator.MORE_OR_EQUAL
}
class StartedToDate(date: Date) : DateQuery(date) {
override var operator = Operator.LESS
override var operator = Operator.LESS_OR_EQUAL
}
class EndedFromDate(date: Date) : DateQuery(date) {
override var operator = Operator.MORE
override var operator = Operator.MORE_OR_EQUAL
}
class EndedToDate(date: Date) : DateQuery(date) {
override var operator = Operator.LESS
override var operator = Operator.LESS_OR_EQUAL
}
class AnyDayOfWeek : ListOfInt() {
@ -636,11 +646,11 @@ sealed class QueryCondition : RowRepresentable {
object BiggestBetNotNull : NotNullQueryCondition()
class StartedFromTime(date: Date) : TimeQuery(date) {
override var operator = Operator.MORE
override var operator = Operator.MORE_OR_EQUAL
}
class EndedToTime(date: Date) : TimeQuery(date) {
override var operator = Operator.LESS
override var operator = Operator.LESS_OR_EQUAL
}
interface CustomFieldRelated {
@ -857,12 +867,22 @@ sealed class QueryCondition : RowRepresentable {
else -> realmQuery
}
}
Operator.MORE -> {
Operator.MORE_OR_EQUAL -> {
when (this) {
is SingleDate -> realmQuery.greaterThanOrEqualTo(fieldName, singleValue.startOfDay())
is Duration -> realmQuery.greaterThan(fieldName, netDuration)
is TournamentFinalPosition -> realmQuery.greaterThanOrEqualTo(fieldName, listOfValues.first())
is TournamentNumberOfPlayer -> realmQuery.greaterThanOrEqualTo(fieldName, listOfValues.first())
is Duration -> realmQuery.greaterThanOrEqualTo(fieldName, netDuration)
is SingleInt -> realmQuery.greaterThanOrEqualTo(fieldName, singleValue)
is ListOfInt -> realmQuery.greaterThanOrEqualTo(fieldName, listOfValues.first())
is NetAmountLost -> realmQuery.greaterThanOrEqualTo(fieldName, listOfValues.first() * -1)
is ListOfDouble -> realmQuery.greaterThanOrEqualTo(fieldName, listOfValues.first() * sign)
else -> realmQuery
}
}
Operator.MORE -> {
when (this) {
is Duration -> realmQuery.greaterThan(fieldName, netDuration)
is SingleInt -> realmQuery.greaterThan(fieldName, singleValue)
is ListOfInt -> realmQuery.greaterThan(fieldName, listOfValues.first())
is NetAmountLost -> realmQuery.lessThan(fieldName, listOfValues.first() * -1)
@ -870,12 +890,30 @@ sealed class QueryCondition : RowRepresentable {
else -> realmQuery
}
}
Operator.LESS -> {
Operator.LESS_OR_EQUAL -> {
when (this) {
is SingleDate -> realmQuery.lessThanOrEqualTo(fieldName, singleValue.endOfDay())
is Duration -> realmQuery.lessThan(fieldName, netDuration)
is TournamentFinalPosition -> realmQuery.lessThanOrEqualTo(fieldName, listOfValues.first())
is TournamentNumberOfPlayer -> realmQuery.lessThanOrEqualTo(fieldName, listOfValues.first())
is Duration -> realmQuery.lessThanOrEqualTo(fieldName, netDuration)
is SingleInt -> realmQuery.lessThanOrEqualTo(fieldName, singleValue)
is ListOfInt -> realmQuery.lessThanOrEqualTo(fieldName, listOfValues.first())
is NetAmountLost -> {
realmQuery.greaterThanOrEqualTo(fieldName, listOfValues.first() * -1)
realmQuery.lessThan(fieldName, 0.0)
}
is NetAmountWon -> {
realmQuery.lessThanOrEqualTo(fieldName, listOfValues.first())
realmQuery.greaterThan(fieldName, 0.0)
}
is ListOfDouble -> realmQuery.lessThanOrEqualTo(fieldName, listOfValues.first() * sign)
else -> realmQuery
}
}
Operator.LESS -> {
when (this) {
is Duration -> realmQuery.lessThan(fieldName, netDuration)
is SingleInt -> realmQuery.lessThan(fieldName, singleValue)
is ListOfInt -> realmQuery.lessThan(fieldName, listOfValues.first())
is NetAmountLost -> {
@ -932,8 +970,8 @@ sealed class QueryCondition : RowRepresentable {
is PastDay -> RowViewType.TITLE_VALUE_CHECK.ordinal
else -> {
when (this.operator) {
Operator.MORE -> RowViewType.TITLE_VALUE_CHECK.ordinal
Operator.LESS -> RowViewType.TITLE_VALUE_CHECK.ordinal
Operator.MORE, Operator.MORE_OR_EQUAL -> RowViewType.TITLE_VALUE_CHECK.ordinal
Operator.LESS, Operator.LESS_OR_EQUAL -> RowViewType.TITLE_VALUE_CHECK.ordinal
else -> RowViewType.TITLE_CHECK.ordinal
}
}
@ -946,8 +984,8 @@ sealed class QueryCondition : RowRepresentable {
is PastDay -> BottomSheetType.EDIT_TEXT
else -> {
when (this.operator) {
Operator.MORE -> BottomSheetType.EDIT_TEXT
Operator.LESS -> BottomSheetType.EDIT_TEXT
Operator.MORE, Operator.MORE_OR_EQUAL -> BottomSheetType.EDIT_TEXT
Operator.LESS, Operator.LESS_OR_EQUAL -> BottomSheetType.EDIT_TEXT
else -> BottomSheetType.NONE
}
}
@ -974,27 +1012,27 @@ sealed class QueryCondition : RowRepresentable {
is IsWeekDay -> R.string.week_days
is IsWeekEnd -> R.string.weekend
is PastDay -> R.string.period_in_days
is TournamentNumberOfPlayer -> {
when (this.operator) {
Operator.MORE -> R.string.minimum
Operator.LESS -> R.string.maximum
else -> null
}
}
is NetAmountWon -> {
when (this.operator) {
Operator.MORE -> R.string.won_amount_more_than
Operator.LESS -> R.string.won_amount_less_than
else -> null
}
}
is NetAmountLost -> {
when (this.operator) {
Operator.MORE -> R.string.lost_amount_more_than
Operator.LESS -> R.string.lost_amount_less_than
else -> null
}
}
// is TournamentNumberOfPlayer -> {
// when (this.operator) {
// Operator.MORE -> R.string.minimum
// Operator.LESS -> R.string.maximum
// else -> null
// }
// }
// is NetAmountWon -> {
// when (this.operator) {
// Operator.MORE -> R.string.won_amount_more_than
// Operator.LESS -> R.string.won_amount_less_than
// else -> null
// }
// }
// is NetAmountLost -> {
// when (this.operator) {
// Operator.MORE -> R.string.lost_amount_more_than
// Operator.LESS -> R.string.lost_amount_less_than
// else -> null
// }
// }
is TournamentFinalPosition -> {
when (this.operator) {
Operator.MORE -> R.string.minimum
@ -1004,8 +1042,10 @@ sealed class QueryCondition : RowRepresentable {
}
else -> {
when (this.operator) {
Operator.MORE -> R.string.more_than
Operator.LESS -> R.string.less_than
Operator.MORE_OR_EQUAL -> R.string.more_or_equal_sign
Operator.MORE -> R.string.more_sign
Operator.LESS_OR_EQUAL -> R.string.less_or_equal_sign
Operator.LESS -> R.string.less_sign
else -> null
}
}

@ -75,7 +75,8 @@ interface FilterItemRow : RowRepresentable {
is QueryCondition.SingleValue<*>, is QueryCondition.ListOfValues<*> -> {
val valueAsString: String? by map
val hint = when (this.queryCondition?.operator) {
QueryCondition.Operator.MORE, QueryCondition.Operator.LESS -> {
QueryCondition.Operator.MORE, QueryCondition.Operator.LESS,
QueryCondition.Operator.MORE_OR_EQUAL, QueryCondition.Operator.LESS_OR_EQUAL -> {
when (this.queryCondition) {
is QueryCondition.CustomFieldNumberQuery -> R.string.value
is QueryCondition.CustomFieldAmountQuery -> R.string.amount

@ -124,7 +124,7 @@ sealed class FilterSectionRow(override val resId: Int?) : RowRepresentable {
MonthOfYear -> Criteria.MonthsOfYear.queryConditions.mapFirstCondition()
// Duration
SessionDuration -> QueryCondition.moreOrLess<QueryCondition.Duration>()
SessionDuration -> QueryCondition.moreEqualOrLessEqual<QueryCondition.Duration>()
FixedDate -> arrayListOf(QueryCondition.StartedFromDate(Date()), QueryCondition.EndedToDate(Date())) // dummy constructor values
Duration -> arrayListOf(QueryCondition.PastDay(0)) // dummy constructor values
@ -141,21 +141,21 @@ sealed class FilterSectionRow(override val resId: Int?) : RowRepresentable {
TournamentType -> Criteria.TournamentTypes.queryConditions.mapFirstCondition()
// CompletionPercentage -> arrayListOf()
TournamentFinalPosition -> QueryCondition.moreOrLess<QueryCondition.TournamentFinalPosition>()
TournamentNumberOfPlayer -> QueryCondition.moreOrLess<QueryCondition.TournamentNumberOfPlayer>()
TournamentFinalPosition -> QueryCondition.moreEqualOrLessEqual<QueryCondition.TournamentFinalPosition>()
TournamentNumberOfPlayer -> QueryCondition.moreEqualOrLessEqual<QueryCondition.TournamentNumberOfPlayer>()
TournamentEntryFee -> Criteria.TournamentFees.queryConditions.mapFirstCondition()
TournamentName -> Criteria.TournamentNames.queryConditions.mapFirstCondition()
TournamentFeature -> Criteria.TournamentFeatures.queryConditions.mapFirstCondition()
Location -> Criteria.Locations.queryConditions.mapFirstCondition()
Bankroll -> Criteria.Bankrolls.queryConditions.mapFirstCondition()
MultiTabling -> QueryCondition.moreOrLess<QueryCondition.NumberOfTable>()
MultiTabling -> QueryCondition.moreEqualOrLessEqual<QueryCondition.NumberOfTable>()
//NumberOfPlayers -> QueryCondition.moreOrLess<QueryCondition.TournamentNumberOfPlayer>()
NumberOfRebuy -> QueryCondition.moreOrLess<QueryCondition.NumberOfRebuy>()
NumberOfRebuy -> QueryCondition.moreEqualOrLessEqual<QueryCondition.NumberOfRebuy>()
// MultiPlayer -> arrayListOf()
Value -> arrayListOf<QueryCondition>().apply {
addAll(QueryCondition.moreOrLess<QueryCondition.NetAmountWon>())
addAll(QueryCondition.moreOrLess<QueryCondition.NetAmountLost>())
addAll(QueryCondition.moreEqualOrLessEqual<QueryCondition.NetAmountWon>())
addAll(QueryCondition.moreEqualOrLessEqual<QueryCondition.NetAmountLost>())
}
TransactionType -> Criteria.TransactionTypes.queryConditions.mapFirstCondition()
is CustomField -> {
@ -165,14 +165,14 @@ sealed class FilterSectionRow(override val resId: Int?) : RowRepresentable {
Criteria.ListCustomFields(cf.id).queryConditions.mapFirstCondition()
}
cf.isAmountType -> {
QueryCondition.moreOrLess<QueryCondition.CustomFieldAmountQuery>().apply {
QueryCondition.moreEqualOrLessEqual<QueryCondition.CustomFieldAmountQuery>().apply {
this.forEach {
it.customFieldId = cf.id
}
}
}
else -> {
QueryCondition.moreOrLess<QueryCondition.CustomFieldNumberQuery>().apply {
QueryCondition.moreEqualOrLessEqual<QueryCondition.CustomFieldNumberQuery>().apply {
this.forEach {
it.customFieldId = cf.id
}

@ -56,9 +56,9 @@ sealed class StaticReport(override var uniqueIdentifier: Int) : RowRepresentable
}
// val basicReports: Set<StaticReport> = setOf(Duration)
val basicReports: Set<StaticReport> = setOf(General, Blinds, TournamentBuyin,
DayOfWeek, Location, TournamentType, Game, TableSize, Duration, OptimalDuration)
}
override fun getDisplayName(context: Context): String {

@ -775,5 +775,9 @@
<string name="poker_rumble">Poker Rumble</string>
<string name="join_discord">Join us on Discord!</string>
<string name="discord_feed_message">We\'ve opened our Discord channel! Come to hang out, talk about poker or about the app!</string>
<string name="more_or_equal_sign"><![CDATA[≥]]></string>
<string name="more_sign"><![CDATA[>]]></string>
<string name="less_or_equal_sign"><![CDATA[≤]]></string>
<string name="less_sign"><![CDATA[<]]></string>
</resources>

@ -779,6 +779,10 @@ La aplicación funciona con una suscripción anual para uso ilimitado, pero obti
<string name="poker_rumble">Poker Rumble</string>
<string name="join_discord">Join us on Discord!</string>
<string name="discord_feed_message">We\'ve opened our Discord channel! Come to hang out, talk about poker or about the app!</string>
<string name="more_or_equal_sign"><![CDATA[≥]]></string>
<string name="more_sign"><![CDATA[>]]></string>
<string name="less_or_equal_sign"><![CDATA[≤]]></string>
<string name="less_sign"><![CDATA[<]]></string>
</resources>

@ -779,4 +779,8 @@
<string name="dhph_explanation">Vous pouvez changer le nombre de mains distribuées par heure. Cette valeur correspond au nombre total de mains distribuées à tous les joueur d\'une table en une heure. Exemple: Vous jouez 25 mains par heure sur des tables de 10 joueurs, entrez: 10 x 25 = 250.</string>
<string name="dealt_hands_per_hour">Mains par heure</string>
<string name="errors">erreur(s)</string>
<string name="more_or_equal_sign"><![CDATA[≥]]></string>
<string name="more_sign"><![CDATA[>]]></string>
<string name="less_or_equal_sign"><![CDATA[≤]]></string>
<string name="less_sign"><![CDATA[<]]></string>
</resources>

@ -774,5 +774,9 @@
<string name="poker_rumble">Poker Rumble</string>
<string name="join_discord">Join us on Discord!</string>
<string name="discord_feed_message">We\'ve opened our Discord channel! Come to hang out, talk about poker or about the app!</string>
<string name="more_or_equal_sign"><![CDATA[≥]]></string>
<string name="more_sign"><![CDATA[>]]></string>
<string name="less_or_equal_sign"><![CDATA[≤]]></string>
<string name="less_sign"><![CDATA[<]]></string>
</resources>

@ -774,5 +774,9 @@
<string name="poker_rumble">Poker Rumble</string>
<string name="join_discord">Join us on Discord!</string>
<string name="discord_feed_message">We\'ve opened our Discord channel! Come to hang out, talk about poker or about the app!</string>
<string name="more_or_equal_sign"><![CDATA[≥]]></string>
<string name="more_sign"><![CDATA[>]]></string>
<string name="less_or_equal_sign"><![CDATA[≤]]></string>
<string name="less_sign"><![CDATA[<]]></string>
</resources>

@ -778,5 +778,9 @@
<string name="poker_rumble">Poker Rumble</string>
<string name="join_discord">Join us on Discord!</string>
<string name="discord_feed_message">We\'ve opened our Discord channel! Come to hang out, talk about poker or about the app!</string>
<string name="more_or_equal_sign"><![CDATA[≥]]></string>
<string name="more_sign"><![CDATA[>]]></string>
<string name="less_or_equal_sign"><![CDATA[≤]]></string>
<string name="less_sign"><![CDATA[<]]></string>
</resources>

@ -773,5 +773,9 @@
<string name="face_id_usage_description">O Poker Analytics deseja acessar o Face ID para permitir que você desbloqueie o aplicativo com reconhecimento facial</string>
<string name="poker_rumble">Poker Rumble</string>
<string name="discord_feed_message">We\'ve opened our Discord channel! Come to hang out, talk about poker or about the app!</string>
<string name="more_or_equal_sign"><![CDATA[≥]]></string>
<string name="more_sign"><![CDATA[>]]></string>
<string name="less_or_equal_sign"><![CDATA[≤]]></string>
<string name="less_sign"><![CDATA[<]]></string>
</resources>

@ -775,5 +775,9 @@
<string name="poker_rumble">Poker Rumble</string>
<string name="join_discord">Join us on Discord!</string>
<string name="discord_feed_message">We\'ve opened our Discord channel! Come to hang out, talk about poker or about the app!</string>
<string name="more_or_equal_sign"><![CDATA[≥]]></string>
<string name="more_sign"><![CDATA[>]]></string>
<string name="less_or_equal_sign"><![CDATA[≤]]></string>
<string name="less_sign"><![CDATA[<]]></string>
</resources>

@ -768,5 +768,9 @@
<string name="poker_rumble">Poker Rumble</string>
<string name="join_discord">Join us on Discord!</string>
<string name="discord_feed_message">We\'ve opened our Discord channel! Come to hang out, talk about poker or about the app!</string>
<string name="more_or_equal_sign"><![CDATA[≥]]></string>
<string name="more_sign"><![CDATA[>]]></string>
<string name="less_or_equal_sign"><![CDATA[≤]]></string>
<string name="less_sign"><![CDATA[<]]></string>
</resources>

@ -826,5 +826,9 @@
<string name="destination">Destination</string>
<string name="optimal_duration">Optimal duration</string>
<string name="show_inapp_badges">Show in-app badges</string>
<string name="more_or_equal_sign"><![CDATA[≥]]></string>
<string name="more_sign"><![CDATA[>]]></string>
<string name="less_or_equal_sign"><![CDATA[≤]]></string>
<string name="less_sign"><![CDATA[<]]></string>
</resources>

Loading…
Cancel
Save