스팀 앱 개발기 #45 - 지갑 화면에서 다음 파워 다운 시간 보여주기

시작하며...

지난 포스트에서 아직 구현하지 못 했던 '다음 파워다운 시간' 보여주기를 이번 포스트에서 구현하고자 합니다.


스크린샷

아래 그림과 같이 다음 파워 다운 시간도 지갑 화면에서 볼 수 있습니다.

IMAGE 2022-10-12 23:42:12.jpg


작업 개요

  • SteemitWallet 데이터 클래스에 nextPowerDownTime 필드 추가
  • Converter 클래스에 toLocalTimeFromUTCTime 메소드 추가
  • SteemitWallet 객체 생성시 nextPowerDownTime 필드 값 지정
  • 파워 다운 레이아웃에 다음 파워 다운 시간 반영

SteemitWallet 데이터 클래스에 nextPowerDownTime 필드 추가

다음 파워 다운 시간을 의미하는 필드가 SteemitWallet 데이터 클래스에 아직 없었지요. 이번에 추가합니다.

data class SteemitWallet(
    val account: String = "",
    val steemBalance: String = "- STEEM",
    val sbdBalance: String = "- SBD",
    val savingSteemBalance: String = "- STEEM",
    val savingSbdBalance: String = "- SBD",
    val steemPower: String = "- SP",
    val effectiveSteemPower: String = "- SP",
    val delegatedSteemPower: String = "- SP",
    val receivedSteemPower: String = "- SP",
    val spWithdrawRate: String = "- SP",
    val totalSPToBeWithdrawn: String = "- SP",
    val remainingSPToBeWithdrawn: String = "- SP",
    val nextPowerDownTime: String = ""
)

Converter 클래스에 toLocalTimeFromUTCTime 메소드 추가

condenser_api.get_dynamic_global_properties API가 주는 정보에서 다음 파워 다운 시간을 의미하는 데이터는 next_vesting_withdrawal이구요. 이것은 UTC 시간입니다. 이를 현재 타임존으로 변경하는 메소드를 Converter 클래스 안에 추가하였습니다.

object Converter {
    // ...

    fun toLocalTimeFromUTCTime(utcTime: String): String {
        if (utcTime.isEmpty()) {
            return ""
        }

        try {
            val sdf = SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
            val date = sdf.parse(utcTime.replace("T", " ").trim())
            val longUtcTime = date.getTime()
            val offset: Int = TimeZone.getDefault().getOffset(longUtcTime)
            val longLocalTime = longUtcTime + offset
            val dateLocalTime = Date().apply {
                setTime(longLocalTime)
            }
            return sdf.format(dateLocalTime)
        }
        catch (e: ParseException) {
            e.printStackTrace()
            return ""
        }
    }

}

SteemitWallet 객체 생성시 nextPowerDownTime 필드 값 지정

condenser_api.get_dynamic_global_properties API로부터 받은 next_vesting_withdrawal을 아래와 같이 로컬 시간으로 변경하구요.

val nextPowerDownTime = Converter.toLocalTimeFromUTCTime(next_vesting_withdrawal ?: "")

SteemitWallet 객체 생성시 이를 nextPowerDownTime 필드의 값으로 지정해 줍니다.

return SteemitWallet(
    name ?: "",
    balance ?: "0 STEEM",
    sbd_balance ?: "0 SBD",
    savings_balance ?: "0 STEEM",
    savings_sbd_balance ?: "0 SBD",
    String.format("%.3f SP", steemPower),
    String.format("%.3f SP", effectiveSteemPower),
    String.format("%.3f SP", delegatedSteemPower),
    String.format("%.3f SP", receivedSteemPower),
    String.format("%.3f SP", steemPowerWithdrawRate),
    String.format("%.3f SP", totalSteemPowerToBeWithdrawn),
    String.format("%.3f SP", remainingSteemPowerToBeWithdrawn),
    nextPowerDownTime
)

파워 다운 레이아웃에 다음 파워 다운 시간 반영

위에 말씀드린 nextPowerDownTime 필드는 text_next_power_down_time 텍스트 뷰와 데이터 바인딩으로 연결합니다. 그러면 지갑 화면에서 다음 파워 다운 시간이 반영됩니다.

<TextView
    android:id="@+id/text_next_power_down_time"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@{viewModel.steemitWallet.nextPowerDownTime}"
    android:textColor="@color/black"
    android:textSize="16sp"
    app:layout_constraintRight_toRightOf="parent"
    app:layout_constraintTop_toTopOf="@id/text_next_power_down"
    tools:text="2022-01-23 01:23" />

GitHub Commit


지난 스팀 앱 개발기

Sort:  
 4 years ago 

[광고] STEEM 개발자 커뮤니티에 참여 하시면, 다양한 혜택을 받을 수 있습니다.

Coin Marketplace

STEEM 0.04
TRX 0.33
JST 0.079
BTC 63100.12
ETH 1669.66
USDT 1.00
SBD 0.41