Initial import
This commit is contained in:
48
app/src/main/java/com/iiyh/emoneyinfo/data/FaqData.kt
Normal file
48
app/src/main/java/com/iiyh/emoneyinfo/data/FaqData.kt
Normal file
@ -0,0 +1,48 @@
|
||||
package com.iiyh.emoneyinfo.data
|
||||
|
||||
import androidx.annotation.StringRes
|
||||
import com.iiyh.emoneyinfo.R
|
||||
|
||||
data class FaqItem(
|
||||
@param:StringRes val questionRes: Int,
|
||||
@param:StringRes val answerRes: Int
|
||||
)
|
||||
|
||||
data class FaqCategory(
|
||||
@param:StringRes val titleRes: Int,
|
||||
val items: List<FaqItem>
|
||||
)
|
||||
|
||||
object FaqData {
|
||||
val all = listOf(
|
||||
FaqCategory(
|
||||
titleRes = R.string.faq_category_cards,
|
||||
items = listOf(
|
||||
FaqItem(R.string.faq_q_supported_cards, R.string.faq_a_supported_cards),
|
||||
FaqItem(R.string.faq_q_card_not_detected, R.string.faq_a_card_not_detected),
|
||||
FaqItem(R.string.faq_q_card_read_failed, R.string.faq_a_card_read_failed)
|
||||
)
|
||||
),
|
||||
FaqCategory(
|
||||
titleRes = R.string.faq_category_transactions,
|
||||
items = listOf(
|
||||
FaqItem(R.string.faq_q_transactions_not_shown, R.string.faq_a_transactions_not_shown),
|
||||
FaqItem(R.string.faq_q_export_pdf, R.string.faq_a_export_pdf)
|
||||
)
|
||||
),
|
||||
FaqCategory(
|
||||
titleRes = R.string.faq_category_balance,
|
||||
items = listOf(
|
||||
FaqItem(R.string.faq_q_balance_wrong, R.string.faq_a_balance_wrong),
|
||||
FaqItem(R.string.faq_q_balance_topup, R.string.faq_a_balance_topup)
|
||||
)
|
||||
),
|
||||
FaqCategory(
|
||||
titleRes = R.string.faq_category_app,
|
||||
items = listOf(
|
||||
FaqItem(R.string.faq_q_app_language, R.string.faq_a_app_language),
|
||||
FaqItem(R.string.faq_q_hide_card_number, R.string.faq_a_hide_card_number)
|
||||
)
|
||||
)
|
||||
)
|
||||
}
|
||||
78
app/src/main/java/com/iiyh/emoneyinfo/data/Models.kt
Normal file
78
app/src/main/java/com/iiyh/emoneyinfo/data/Models.kt
Normal file
@ -0,0 +1,78 @@
|
||||
package com.iiyh.emoneyinfo.data
|
||||
|
||||
import androidx.annotation.StringRes
|
||||
import com.iiyh.emoneyinfo.R
|
||||
import java.text.NumberFormat
|
||||
import java.text.SimpleDateFormat
|
||||
import java.util.Date
|
||||
import java.util.Locale
|
||||
import kotlin.math.abs
|
||||
|
||||
enum class CardType(@param:StringRes val labelRes: Int) {
|
||||
UNKNOWN(R.string.card_unknown),
|
||||
MANDIRI(R.string.card_mandiri),
|
||||
FLAZZ(R.string.card_flazz),
|
||||
BRIZZI(R.string.card_brizzi),
|
||||
TAPCASH(R.string.card_tapcash),
|
||||
JACKCARD(R.string.card_jackcard),
|
||||
MEGACASH(R.string.card_megacash),
|
||||
KMT(R.string.card_kmt)
|
||||
}
|
||||
|
||||
data class TransactionItem(
|
||||
val title: String,
|
||||
val date: Date,
|
||||
val amount: Long,
|
||||
val isCredit: Boolean,
|
||||
val locationName: String = ""
|
||||
) {
|
||||
fun formattedAmount(): String {
|
||||
val formatter = NumberFormat.getCurrencyInstance(Locale.forLanguageTag("id-ID")).apply {
|
||||
maximumFractionDigits = 0
|
||||
currency = java.util.Currency.getInstance("IDR")
|
||||
}
|
||||
val raw = formatter.format(abs(amount)).replace("IDR", "Rp")
|
||||
return if (isCredit) "+$raw" else "-$raw"
|
||||
}
|
||||
|
||||
fun formattedDate(): String = SimpleDateFormat("dd MMM yyyy · HH:mm", Locale.forLanguageTag("id-ID")).format(date)
|
||||
|
||||
fun subtitle(): String = buildString {
|
||||
append(formattedDate())
|
||||
if (locationName.isNotBlank()) {
|
||||
append(" · ")
|
||||
append(locationName)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
data class EmoneyUiState(
|
||||
val cardType: CardType = CardType.UNKNOWN,
|
||||
val balance: Long = 0,
|
||||
val cardNumber: String = "",
|
||||
val transactions: List<TransactionItem> = emptyList(),
|
||||
val scanMessage: String = "",
|
||||
val isNfcSupported: Boolean = true
|
||||
) {
|
||||
fun formattedBalance(): String {
|
||||
val formatter = NumberFormat.getCurrencyInstance(Locale.forLanguageTag("id-ID")).apply {
|
||||
maximumFractionDigits = 0
|
||||
currency = java.util.Currency.getInstance("IDR")
|
||||
}
|
||||
return formatter.format(balance).replace("IDR", "Rp")
|
||||
}
|
||||
|
||||
fun hasCardData(): Boolean = cardType != CardType.UNKNOWN || cardNumber.isNotBlank() || balance > 0 || transactions.isNotEmpty()
|
||||
}
|
||||
|
||||
fun String.formatCardNumber(): String {
|
||||
val digits = filter { it.isDigit() }
|
||||
if (digits.isEmpty()) return this
|
||||
return digits.chunked(4).joinToString(" ")
|
||||
}
|
||||
|
||||
fun String.maskFirst12(): String {
|
||||
val digits = filter { it.isDigit() }
|
||||
if (digits.length != 16) return formatCardNumber()
|
||||
return "**** **** **** ${digits.takeLast(4)}"
|
||||
}
|
||||
Reference in New Issue
Block a user