Skip to content
This repository was archived by the owner on Nov 5, 2024. It is now read-only.

Commit 588dc82

Browse files
Fix issue 2701 - migrate Home Screen to use ComposeViewModel and our new architecture (#2716)
* Refactor HomeState and HomeEvent * Refactor HomeViewModel * Refactor HomeHeader * Refactor HomeMoreMenu * Refactor HomeTab * WIP: Refactor HomeViewModel * Refactor CustomerJourney * Refactor CustomerJourney * WIP: Refactor HomeViewModel * WIP: Refactor HomeViewModel * WIP: Refactor HomeViewModel * Refactor HomeTab's Preview * Refactor HomeTab, HomeViewModel and HomeEvent * Fix HomeViewModel not starting * Fix HomeViewModel dismiss customer journey card * Fix HomeViewModel hide balance * WIP Fix HomeViewModel hide balance * WIP Fix HomeViewModel hide balance * Fix support balance more info showing in HomeViewModel * Refactor HomeViewModel * Refactor HomeHeader * WIP: Fix Header function * WIP: Fix Header function * Refactor HomeTab * Refactor HomeTab * Refactor HomeTab * Move a constant out of HomeTab * WIP: Fix HomeTab's UX * WIP: Fix HomeTab's UX - fix namings * WIP: Fix HomeTab bugs * WIP: Fix HomeTab bugs * Fix HomeTab bugs * Fix Rebase errors * Fix Detekt errors * Add Detekt baseline * Update Lint baseline
1 parent ce87b97 commit 588dc82

File tree

12 files changed

+554
-745
lines changed

12 files changed

+554
-745
lines changed

app/lint-baseline.xml

+6-259
Large diffs are not rendered by default.

config/detekt/baseline.yml

+5-26
Large diffs are not rendered by default.
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.ivy.home
22

33
object Constants {
4+
const val SWIPE_HORIZONTAL_THRESHOLD = 200
45
const val SWIPE_DOWN_THRESHOLD_OPEN_MORE_MENU = 200
56
}

screen-home/src/main/java/com/ivy/home/HomeEvent.kt

+16-17
Original file line numberDiff line numberDiff line change
@@ -4,29 +4,28 @@ import com.ivy.base.legacy.Transaction
44
import com.ivy.legacy.data.model.TimePeriod
55
import com.ivy.home.customerjourney.CustomerJourneyCardModel
66

7-
sealed class HomeEvent {
8-
data object Start : HomeEvent()
7+
sealed interface HomeEvent {
8+
data class SetUpcomingExpanded(val expanded: Boolean) : HomeEvent
9+
data class SetOverdueExpanded(val expanded: Boolean) : HomeEvent
910

10-
data class SetUpcomingExpanded(val expanded: Boolean) : HomeEvent()
11-
data class SetOverdueExpanded(val expanded: Boolean) : HomeEvent()
11+
data object BalanceClick : HomeEvent
12+
data object HiddenBalanceClick : HomeEvent
13+
data class SetExpanded(val expanded: Boolean) : HomeEvent
1214

13-
data object BalanceClick : HomeEvent()
14-
data object HiddenBalanceClick : HomeEvent()
15+
data object SwitchTheme : HomeEvent
1516

16-
data object SwitchTheme : HomeEvent()
17+
data class SetBuffer(val buffer: Double) : HomeEvent
1718

18-
data class SetBuffer(val buffer: Double) : HomeEvent()
19+
data class SetCurrency(val currency: String) : HomeEvent
1920

20-
data class SetCurrency(val currency: String) : HomeEvent()
21+
data class SetPeriod(val period: TimePeriod) : HomeEvent
2122

22-
data class SetPeriod(val period: TimePeriod) : HomeEvent()
23+
data class PayOrGetPlanned(val transaction: Transaction) : HomeEvent
24+
data class SkipPlanned(val transaction: Transaction) : HomeEvent
25+
data class SkipAllPlanned(val transactions: List<Transaction>) : HomeEvent
2326

24-
data class PayOrGetPlanned(val transaction: Transaction) : HomeEvent()
25-
data class SkipPlanned(val transaction: Transaction) : HomeEvent()
26-
data class SkipAllPlanned(val transactions: List<Transaction>) : HomeEvent()
27+
data class DismissCustomerJourneyCard(val card: CustomerJourneyCardModel) : HomeEvent
2728

28-
data class DismissCustomerJourneyCard(val card: CustomerJourneyCardModel) : HomeEvent()
29-
30-
data object SelectNextMonth : HomeEvent()
31-
data object SelectPreviousMonth : HomeEvent()
29+
data object SelectNextMonth : HomeEvent
30+
data object SelectPreviousMonth : HomeEvent
3231
}

screen-home/src/main/java/com/ivy/home/HomeHeader.kt

+48-57
Original file line numberDiff line numberDiff line change
@@ -66,48 +66,47 @@ internal fun HomeHeader(
6666
period: TimePeriod,
6767
currency: String,
6868
balance: Double,
69-
bufferDiff: Double,
70-
hideCurrentBalance: Boolean = false,
71-
7269
onShowMonthModal: () -> Unit,
7370
onBalanceClick: () -> Unit,
74-
onHiddenBalanceClick: () -> Unit = {},
75-
7671
onSelectNextMonth: () -> Unit,
72+
hideBalance: Boolean,
73+
onHiddenBalanceClick: () -> Unit,
7774
onSelectPreviousMonth: () -> Unit,
7875
) {
79-
val percentExpanded by animateFloatAsState(
80-
targetValue = if (expanded) 1f else 0f,
81-
animationSpec = springBounce(
82-
stiffness = Spring.StiffnessLow,
83-
),
84-
)
85-
86-
Spacer(Modifier.height(20.dp))
87-
88-
HeaderStickyRow(
89-
percentExpanded = percentExpanded,
90-
name = name,
91-
period = period,
92-
currency = currency,
93-
balance = balance,
94-
hideCurrentBalance = hideCurrentBalance,
95-
96-
onShowMonthModal = onShowMonthModal,
97-
onBalanceClick = onBalanceClick,
98-
onHiddenBalanceClick = onHiddenBalanceClick,
99-
100-
onSelectNextMonth = onSelectNextMonth,
101-
onSelectPreviousMonth = onSelectPreviousMonth,
102-
)
103-
104-
Spacer(Modifier.height(16.dp))
105-
106-
if (percentExpanded < 0.5f) {
107-
TransactionsDividerLine(
108-
modifier = Modifier.alpha(1f - percentExpanded),
109-
paddingHorizontal = 0.dp,
76+
Column {
77+
val percentExpanded by animateFloatAsState(
78+
targetValue = if (expanded) 1f else 0f,
79+
animationSpec = springBounce(
80+
stiffness = Spring.StiffnessLow
81+
),
82+
label = "Home Header Expand Collapse"
83+
)
84+
85+
Spacer(Modifier.height(20.dp))
86+
87+
HeaderStickyRow(
88+
percentExpanded = percentExpanded,
89+
name = name,
90+
period = period,
91+
currency = currency,
92+
balance = balance,
93+
hideBalance = hideBalance,
94+
95+
onShowMonthModal = onShowMonthModal,
96+
onBalanceClick = onBalanceClick,
97+
onHiddenBalanceClick = onHiddenBalanceClick,
98+
onSelectNextMonth = onSelectNextMonth,
99+
onSelectPreviousMonth = onSelectPreviousMonth
110100
)
101+
102+
Spacer(Modifier.height(16.dp))
103+
104+
if (percentExpanded < 0.5f) {
105+
TransactionsDividerLine(
106+
modifier = Modifier.alpha(1f - percentExpanded),
107+
paddingHorizontal = 0.dp
108+
)
109+
}
111110
}
112111
}
113112

@@ -116,16 +115,13 @@ private fun HeaderStickyRow(
116115
percentExpanded: Float,
117116
name: String,
118117
period: TimePeriod,
119-
120118
currency: String,
121119
balance: Double,
122-
hideCurrentBalance: Boolean = false,
123-
124120
onShowMonthModal: () -> Unit,
125121
onBalanceClick: () -> Unit,
126-
onHiddenBalanceClick: () -> Unit = {},
127-
128122
onSelectNextMonth: () -> Unit,
123+
hideBalance: Boolean,
124+
onHiddenBalanceClick: () -> Unit,
129125
onSelectPreviousMonth: () -> Unit,
130126
) {
131127
Row(
@@ -165,7 +161,7 @@ private fun HeaderStickyRow(
165161
modifier = Modifier
166162
.alpha(alpha = 1f - percentExpanded)
167163
.clickableNoIndication {
168-
if (hideCurrentBalance) {
164+
if (hideBalance) {
169165
onHiddenBalanceClick()
170166
} else {
171167
onBalanceClick()
@@ -174,7 +170,7 @@ private fun HeaderStickyRow(
174170
currency = currency,
175171
balance = balance,
176172
shortenBigNumbers = true,
177-
hiddenMode = hideCurrentBalance,
173+
hiddenMode = hideBalance
178174
)
179175
}
180176
}
@@ -205,22 +201,19 @@ private fun HeaderStickyRow(
205201
@ExperimentalAnimationApi
206202
@Composable
207203
fun CashFlowInfo(
208-
percentExpanded: Float = 1f,
209-
period: TimePeriod,
210204
currency: String,
211205
balance: Double,
212-
bufferDiff: Double,
213206
monthlyIncome: Double,
214207
monthlyExpenses: Double,
215-
216-
hideCurrentBalance: Boolean,
217-
208+
hideBalance: Boolean,
218209
onOpenMoreMenu: () -> Unit,
219210
onBalanceClick: () -> Unit,
220-
onHiddenBalanceClick: () -> Unit = {},
211+
percentExpanded: Float,
212+
onHiddenBalanceClick: () -> Unit,
213+
modifier: Modifier = Modifier
221214
) {
222215
Column(
223-
modifier = Modifier
216+
modifier = modifier
224217
.verticalSwipeListener(
225218
sensitivity = Constants.SWIPE_DOWN_THRESHOLD_OPEN_MORE_MENU,
226219
onSwipeDown = {
@@ -232,7 +225,7 @@ fun CashFlowInfo(
232225
modifier = Modifier
233226
.padding(horizontal = 20.dp)
234227
.clickableNoIndication {
235-
if (hideCurrentBalance) {
228+
if (hideBalance) {
236229
onHiddenBalanceClick()
237230
} else {
238231
onBalanceClick()
@@ -242,21 +235,20 @@ fun CashFlowInfo(
242235
currency = currency,
243236
balance = balance,
244237
shortenBigNumbers = true,
245-
hiddenMode = hideCurrentBalance,
238+
hiddenMode = hideBalance
246239
)
247240

248241
Spacer(modifier = Modifier.height(24.dp))
249242

250243
IncomeExpenses(
251244
percentExpanded = percentExpanded,
252-
period = period,
253245
currency = currency,
254246
monthlyIncome = monthlyIncome,
255247
monthlyExpenses = monthlyExpenses,
256248
)
257249

258250
val cashflow = monthlyIncome - monthlyExpenses
259-
if (cashflow != 0.0 && !hideCurrentBalance) {
251+
if (cashflow != 0.0 && !hideBalance) {
260252
Spacer(Modifier.height(12.dp))
261253

262254
Text(
@@ -284,7 +276,6 @@ fun CashFlowInfo(
284276
@Composable
285277
private fun IncomeExpenses(
286278
percentExpanded: Float,
287-
period: TimePeriod,
288279
currency: String,
289280
monthlyIncome: Double,
290281
monthlyExpenses: Double,
@@ -407,4 +398,4 @@ private fun RowScope.HeaderCard(
407398

408399
Spacer(Modifier.height(20.dp))
409400
}
410-
}
401+
}

0 commit comments

Comments
 (0)