스팀 앱 개발기 #44 - 지갑 화면에 파워 다운 내용 보여주기
지갑 화면에서 파워 다운 관련 내용은 없었죠. 이번 포스트에서 이를 추가 구현하고자 합니다.
스크린샷
아래 그림과 같이 지갑에서 파워 다운 수량도 추가로 보여줍니다.
작업 개요
SteemitWallet 데이터 클래스 수정
SteemitWallet 객체 생성 코드 수정
파워 다운 레이아웃 정의
지갑 화면에 파워 다운 레이아웃 추가
SteemitWallet 데이터 클래스 수정
파워 다운 할 스팀 파워 수량을 나타내는 필드를 이 클래스에 추가했습니다.
as -is
spToBeWithdrawn: 파워 다운으로 회수할 스팀 파워 총수량
to-be
totalSPToBeWithdrawn: 기존 spToBeWithdrawn와 동일. 헷갈리지 않게 이름 수정
remainingSPToBeWithdrawn: 파워 다운 할 스팀 파워 수량
SteemitWallet 객체 생성 코드 수정
SteemitWallet 클래스에 remainingSPToBeWithdrawn 필드 추가, spToBeWithdrawn 필드 이름을 totalSPToBeWithdrawn로 수정하였죠. SteemitAccountDTO 클래스의 toSteemitWallet 메소드들도 이를 반영하였습니다.
추가로 스팀 파워들의 소수점 개수를 3개로 고정하는 코드도 반영했습니다.
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)
)
파워 다운 레이아웃 정의
layout_steem_staking.xml 파일을 참고하여 파워 다운 레이아웃을 정의하였습니다.
<?xml version="1.0" encoding="utf-8"?>
<layout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
<variable
name="viewModel"
type="lee.dorian.steem_ui.ui.wallet.WalletViewModel" />
</data>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/wallet_balance_bg"
android:padding="12dp">
<TextView
android:id="@+id/text_power_down"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Power Down"
android:textColor="@color/black"
android:textSize="24sp"
android:textStyle="bold"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/text_sp_to_power_down"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:text="SP to power down:"
android:textColor="@color/black"
android:textSize="16sp"
app:layout_constraintLeft_toLeftOf="@id/text_power_down"
app:layout_constraintTop_toBottomOf="@id/text_power_down" />
<TextView
android:id="@+id/text_sp_to_power_down_amount"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{viewModel.steemitWallet.totalSPToBeWithdrawn}"
android:textColor="@color/black"
android:textSize="16sp"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="@id/text_sp_to_power_down"
tools:text="0.000 SP" />
<TextView
android:id="@+id/text_power_down_rate"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Power down rate:"
android:textColor="@color/black"
android:textSize="16sp"
app:layout_constraintLeft_toLeftOf="@id/text_power_down"
app:layout_constraintTop_toBottomOf="@id/text_sp_to_power_down" />
<TextView
android:id="@+id/text_power_down_rate_amount"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{viewModel.steemitWallet.spWithdrawRate}"
android:textColor="@color/black"
android:textSize="16sp"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="@id/text_power_down_rate"
tools:text="0.000 SP" />
<TextView
android:id="@+id/text_steem_power_withdrawn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Remaining SP:"
android:textColor="@color/black"
android:textSize="16sp"
app:layout_constraintLeft_toLeftOf="@id/text_power_down"
app:layout_constraintTop_toBottomOf="@id/text_power_down_rate" />
<TextView
android:id="@+id/text_steem_power_withdrawn_amount"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{viewModel.steemitWallet.remainingSPToBeWithdrawn}"
android:textColor="@color/black"
android:textSize="16sp"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="@id/text_steem_power_withdrawn"
tools:text="0.000 SP" />
<TextView
android:id="@+id/text_next_power_down"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Next power down:"
android:textColor="@color/black"
android:textSize="16sp"
app:layout_constraintLeft_toLeftOf="@id/text_power_down"
app:layout_constraintTop_toBottomOf="@id/text_steem_power_withdrawn" />
<TextView
android:id="@+id/text_next_power_down_time"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="(Coming soon...)"
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" />
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
다음 파워 다운 시간은 "(Coming soon...)"으로 표기하였습니다. API가 주는 시간은 UTC 시간이므로 한국 시간과는 맞지 않기 때문입니다. 타임존에 맞게 시간 바꾸는 코드는 다음에 구현할 예정입니다.
지갑 화면에 파워 다운 레이아웃 추가
fragment_wallet.xml 파일에 아래와 같이 파워 다운 수량을 보여줄 레이아웃을 추가하였습니다.
<include
android:id="@+id/include_power_down"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
layout="@layout/layout_power_down"
app:viewModel="@{viewModel}"
app:layout_constraintTop_toBottomOf="@id/include_steem_savings" />
이 레이아웃 추가로 일부 안드로이드 기기에서는 지갑 화면의 스크롤이 필요합니다. 스크롤도 나중에 적용할 예정입니다.
GitHub Commit
지난 스팀 앱 개발기
- #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 개발자 커뮤니티에 참여 하시면, 다양한 혜택을 받을 수 있습니다.