스팀 앱 개발기 #45 - 지갑 화면에서 다음 파워 다운 시간 보여주기
시작하며...
지난 포스트에서 아직 구현하지 못 했던 '다음 파워다운 시간' 보여주기를 이번 포스트에서 구현하고자 합니다.
스크린샷
아래 그림과 같이 다음 파워 다운 시간도 지갑 화면에서 볼 수 있습니다.
작업 개요
- 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
지난 스팀 앱 개발기
- #44 - (작성중)
- #43 - 지갑 화면에서 VEST 값을 SP로 변환
- #42 - VEST를 SP로 변환하는 메소드
- #41 - 작성중...
- #40 - UTC 시간을 로컬 시간으로 바꾸는 코드 만들기
- #39 - condenser_api.get_dynamic_global_properties API 실행에 필요한 데이터 클래스 추가
- #38 - 지갑 화면 구현: 예금 보여주기 추가
- #37 - 지갑 화면 구현: WalletViewModel과 WalletFragment를 바인딩
- #36 - 유닛 테스트로 구현한 WalletViewModelTest 클래스에서 공통 부분 추출하여 CommonPartOfViewModelTest 클래스 만들기
- #35 - 유닛 테스트용 WalletViewModelTest 클래스 구현 후 보이는 문제점
- #34 - WalletViewModel 클래스에 스팀 지갑 정보 읽는 코드 작성
- #33 - 추가 리팩토링: 데이터 모듈의 데이터 클래스의 필드들에 nullable 적용
- #32 - 리팩토링: 데이터 클래스 이름 변경
- #31 - 도메인 모듈에서 정의하는 데이터 클래스들이 DTO 패턴을 따르는 것이 맞는가?
- #30 - 진도를 더 나가기 전에 리팩토링 고려 중
- #29 - 뷰모델, Repository 패턴 그리고 Use Case 패턴의 관계
- #28 - Use Case 패턴 적용
- #27 - Repository 패턴 적용
- #26 - condenser_api.get_accounts API로 받은 계정 자료를 SteemitWalletDTO 타입으로 변환하기
- #25 - SteemClient, SteemService 잘 작동하는지 유닛 테스트
- #24 - API 실행을 담당할 SteemService 인터페이스 정의
- #23 - condenser_api.get_accounts API 연동에 필요한 데이터 클래스 정의
- #22 - API 연동에 필요한 라이브러리 추가
- #21 - 사용자 지갑 정보를 담을 SteemitWallet 클래스 정의
- #20 - 클린 아키텍처를 위한 모듈 구성 (2)
- #19 - 클린 아키텍처를 위한 모듈 구성 (1)
- #18 - VEST로부터 STEEM POWER를 계산하는 방법
- #17 - VEST를 STEEM POWER로 변환하기 위해 필요한 get_dynamic_global_properties API
- #16 - 지갑 내용을 읽기 위해 필요한 API
- #15 - 지갑 서브화면(WalletFragment) 레이아웃 구성해 보기
- #14 - 지갑 서브화면(WalletFragment)에서 계정 인식하기
- #13 - 프로파일 서브화면(ProfileFragment)에서 계정 인식하기
- #12 - 태그 서브화면에서 태그 인식하기
- #11 - 검색 레이아웃을 메인 화면에 적용
- #10 - 태그 및 계정 검색 레이아웃 만들기
- #9 - BaseActivity 클래스 정의 그리고 MainActivity 클래스에 적용
- #8 - BaseFragment 클래스 정의 그리고 기존 프래그먼트들에 적용
- #7 - ProfileFragment 그리고 WalletFragment에 데이터 바인딩 적용
- #6 - 태그별 검색 내용을 보여줄 TagsFragment에 데이터 바인딩 적용
- #5 - GitHub에 소스 올리기
- #4 - 하단 내비게이션의 탭 관련 클래스 이름 수정
- #3 - 하단 내비게이션 바의 아이콘, 텍스트 수정
- #2 - 프로젝트 생성
- #1 - 시작하며...
[광고] STEEM 개발자 커뮤니티에 참여 하시면, 다양한 혜택을 받을 수 있습니다.