From 8ebb5c0e8b053ef2b2d52dd753935489cf9d4b02 Mon Sep 17 00:00:00 2001 From: Shamim Shahrier Emon Date: Wed, 18 Sep 2024 19:53:27 +0600 Subject: [PATCH] Removed old loan UI related code and files (#3542) --- ...bularLoanBottomBar.kt => LoanBottomBar.kt} | 4 +- .../java/com/ivy/loans/loan/LoanScreenMode.kt | 6 - .../com/ivy/loans/loan/LoanScreenState.kt | 2 - .../java/com/ivy/loans/loan/LoanViewModel.kt | 30 +-- .../java/com/ivy/loans/loan/LoansScreen.kt | 225 ++++-------------- .../ivy/loans/loan/NonTabularLoanBottomBar.kt | 73 ------ .../com/ivy/loans/LoanScreenPaparazziTest.kt | 14 +- ...t_snapshot loanScreen composable[Dark].png | Bin 0 -> 30458 bytes ..._snapshot loanScreen composable[Light].png | Bin 0 -> 29385 bytes .../java/com/ivy/domain/features/Features.kt | 1 - .../com/ivy/domain/features/IvyFeatures.kt | 10 +- 11 files changed, 50 insertions(+), 315 deletions(-) rename screen/loans/src/main/java/com/ivy/loans/loan/{TabularLoanBottomBar.kt => LoanBottomBar.kt} (98%) delete mode 100644 screen/loans/src/main/java/com/ivy/loans/loan/LoanScreenMode.kt delete mode 100644 screen/loans/src/main/java/com/ivy/loans/loan/NonTabularLoanBottomBar.kt create mode 100644 screen/loans/src/test/snapshots/images/com.ivy.loans_LoanScreenPaparazziTest_snapshot loanScreen composable[Dark].png create mode 100644 screen/loans/src/test/snapshots/images/com.ivy.loans_LoanScreenPaparazziTest_snapshot loanScreen composable[Light].png diff --git a/screen/loans/src/main/java/com/ivy/loans/loan/TabularLoanBottomBar.kt b/screen/loans/src/main/java/com/ivy/loans/loan/LoanBottomBar.kt similarity index 98% rename from screen/loans/src/main/java/com/ivy/loans/loan/TabularLoanBottomBar.kt rename to screen/loans/src/main/java/com/ivy/loans/loan/LoanBottomBar.kt index b7c195fe69..a96c35d538 100644 --- a/screen/loans/src/main/java/com/ivy/loans/loan/TabularLoanBottomBar.kt +++ b/screen/loans/src/main/java/com/ivy/loans/loan/LoanBottomBar.kt @@ -48,7 +48,7 @@ val FAB_BUTTON_SIZE = 56.dp const val ZINDEX = 200f @Composable -internal fun BoxWithConstraintsScope.TabularLoanBottomBar( +internal fun BoxWithConstraintsScope.LoanBottomBar( tab: LoanTab, selectTab: (LoanTab) -> Unit, onAdd: () -> Unit @@ -158,7 +158,7 @@ private fun PreviewTabularBottomBar() { ) { } - TabularLoanBottomBar( + LoanBottomBar( tab = LoanTab.PENDING, selectTab = {}, onAdd = {} diff --git a/screen/loans/src/main/java/com/ivy/loans/loan/LoanScreenMode.kt b/screen/loans/src/main/java/com/ivy/loans/loan/LoanScreenMode.kt deleted file mode 100644 index 4d1102c2fc..0000000000 --- a/screen/loans/src/main/java/com/ivy/loans/loan/LoanScreenMode.kt +++ /dev/null @@ -1,6 +0,0 @@ -package com.ivy.loans.loan - -sealed interface LoanScreenMode { - data object TabularMode : LoanScreenMode - data object NonTabularMode : LoanScreenMode -} \ No newline at end of file diff --git a/screen/loans/src/main/java/com/ivy/loans/loan/LoanScreenState.kt b/screen/loans/src/main/java/com/ivy/loans/loan/LoanScreenState.kt index 42dcbf8877..875b2a8de2 100644 --- a/screen/loans/src/main/java/com/ivy/loans/loan/LoanScreenState.kt +++ b/screen/loans/src/main/java/com/ivy/loans/loan/LoanScreenState.kt @@ -8,7 +8,6 @@ import java.time.Instant data class LoanScreenState( val baseCurrency: String, - val loans: ImmutableList, val completedLoans: ImmutableList, val pendingLoans: ImmutableList, val accounts: ImmutableList, @@ -18,7 +17,6 @@ data class LoanScreenState( val totalOweAmount: String, val totalOwedAmount: String, val paidOffLoanVisibility: Boolean, - val screenMode: LoanScreenMode, val dateTime: Instant, val selectedTab: LoanTab ) \ No newline at end of file diff --git a/screen/loans/src/main/java/com/ivy/loans/loan/LoanViewModel.kt b/screen/loans/src/main/java/com/ivy/loans/loan/LoanViewModel.kt index af28d91863..af07cf750c 100644 --- a/screen/loans/src/main/java/com/ivy/loans/loan/LoanViewModel.kt +++ b/screen/loans/src/main/java/com/ivy/loans/loan/LoanViewModel.kt @@ -15,7 +15,6 @@ import com.ivy.data.db.dao.read.LoanRecordDao import com.ivy.data.db.dao.read.SettingsDao import com.ivy.data.db.dao.write.WriteLoanDao import com.ivy.data.model.LoanType -import com.ivy.domain.features.Features import com.ivy.frp.test.TestIdlingResource import com.ivy.legacy.datamodel.Account import com.ivy.legacy.datamodel.Loan @@ -58,12 +57,10 @@ class LoanViewModel @Inject constructor( private val loanWriter: WriteLoanDao, private val timeConverter: TimeConverter, private val timeProvider: TimeProvider, - private val dateTimePicker: DateTimePicker, - private val features: Features + private val dateTimePicker: DateTimePicker ) : ComposeViewModel() { private var baseCurrencyCode by mutableStateOf(getDefaultFIATCurrency().currencyCode) - private var loans by mutableStateOf>(persistentListOf()) private var completedLoans by mutableStateOf>(persistentListOf()) private var pendingLoans by mutableStateOf>(persistentListOf()) private var accounts by mutableStateOf>(persistentListOf()) @@ -90,7 +87,6 @@ class LoanViewModel @Inject constructor( return LoanScreenState( baseCurrency = getBaseCurrencyCode(), - loans = getLoans(), accounts = getAccounts(), selectedAccount = getSelectedAccount(), loanModalData = getLoanModalData(), @@ -98,7 +94,6 @@ class LoanViewModel @Inject constructor( totalOweAmount = getTotalOweAmount(totalOweAmount, defaultCurrencyCode), totalOwedAmount = getTotalOwedAmount(totalOwedAmount, defaultCurrencyCode), paidOffLoanVisibility = getPaidOffLoanVisibility(), - screenMode = getScreenMode(), dateTime = dateTime, selectedTab = getSelectedTab(), completedLoans = getCompletedLoans(), @@ -125,25 +120,12 @@ class LoanViewModel @Inject constructor( return pendingLoans } - @Composable - private fun getScreenMode(): LoanScreenMode { - return when (features.tabularLoanMode.asEnabledState()) { - true -> LoanScreenMode.TabularMode - else -> LoanScreenMode.NonTabularMode - } - } - @Composable private fun getReorderModalVisible() = reorderModalVisible @Composable private fun getLoanModalData() = loanModalData - @Composable - private fun getLoans(): ImmutableList { - return loans - } - @Composable private fun getBaseCurrencyCode(): String { return baseCurrencyCode @@ -258,7 +240,6 @@ class LoanViewModel @Inject constructor( ) }.toImmutableList() } - filterLoans() loadPendingLoans() loadCompletedLoans() @@ -367,14 +348,6 @@ class LoanViewModel @Inject constructor( } } - /** It filters [allLoans] and updates [loans] based on weather to show paid off loans or not */ - private fun filterLoans() { - loans = when (paidOffLoanVisibility) { - true -> allLoans - false -> allLoans.filter { loan -> loan.percentPaid < 1.0 }.toImmutableList() - } - } - private fun loadCompletedLoans() { completedLoans = allLoans.filter { loan -> loan.percentPaid == 1.0 }.toImmutableList() } @@ -437,6 +410,5 @@ class LoanViewModel @Inject constructor( private fun updatePaidOffLoanVisibility() { paidOffLoanVisibility = paidOffLoanVisibility.not() - filterLoans() } } diff --git a/screen/loans/src/main/java/com/ivy/loans/loan/LoansScreen.kt b/screen/loans/src/main/java/com/ivy/loans/loan/LoansScreen.kt index ea6bd7adbd..88ba8221ff 100644 --- a/screen/loans/src/main/java/com/ivy/loans/loan/LoansScreen.kt +++ b/screen/loans/src/main/java/com/ivy/loans/loan/LoansScreen.kt @@ -49,7 +49,6 @@ import com.ivy.ui.R import com.ivy.ui.rememberScrollPositionListState import com.ivy.wallet.ui.theme.Blue import com.ivy.wallet.ui.theme.Gray -import com.ivy.wallet.ui.theme.Red import com.ivy.wallet.ui.theme.components.BalanceRow import com.ivy.wallet.ui.theme.components.CircleButtonFilled import com.ivy.wallet.ui.theme.components.ItemIconSDefaultIcon @@ -89,7 +88,6 @@ private fun BoxWithConstraintsScope.UI( Spacer(Modifier.height(32.dp)) Toolbar( - isTabularModeOn = state.screenMode == LoanScreenMode.TabularMode, onDismiss = { nav.back() }, setReorderModalVisible = { onEventHandler.invoke(LoanScreenEvent.OnReOrderModalShow(show = it)) }, state.totalOweAmount, @@ -106,95 +104,53 @@ private fun BoxWithConstraintsScope.UI( .loanListState?.firstVisibleItemScrollOffset ?: 0 ) - if (state.screenMode == LoanScreenMode.TabularMode) { - val loans = if (state.selectedTab == LoanTab.PENDING) { - state.pendingLoans - } else { - state.completedLoans - } - - LazyColumn(state = scrollState) { - items(loans) { item -> - Spacer(Modifier.height(16.dp)) - - LoanItem( - displayLoan = item - ) { - nav.navigateTo( - screen = LoanDetailsScreen( - loanId = item.loan.id - ) - ) - } - } - } - - if (loans.isEmpty()) { - Spacer(Modifier.weight(1f)) + val loans = if (state.selectedTab == LoanTab.PENDING) { + state.pendingLoans + } else { + state.completedLoans + } - NoLoansEmptyState( - emptyStateTitle = stringResource(R.string.no_loans), - emptyStateText = stringResource(R.string.no_loans_description) - ) + LazyColumn(state = scrollState) { + items(loans) { item -> + Spacer(Modifier.height(16.dp)) - Spacer(Modifier.weight(1f)) - } - } else { - LazyColumn(state = scrollState) { - items(state.loans) { item -> - Spacer(Modifier.height(16.dp)) - - LoanItem( - displayLoan = item - ) { - nav.navigateTo( - screen = LoanDetailsScreen( - loanId = item.loan.id - ) + LoanItem( + displayLoan = item + ) { + nav.navigateTo( + screen = LoanDetailsScreen( + loanId = item.loan.id ) - } + ) } } - if (state.loans.isEmpty()) { - Spacer(Modifier.weight(1f)) + } - NoLoansEmptyState( - emptyStateTitle = stringResource(R.string.no_loans), - emptyStateText = stringResource(R.string.no_loans_description) - ) + if (loans.isEmpty()) { + Spacer(Modifier.weight(1f)) - Spacer(Modifier.weight(1f)) - } + NoLoansEmptyState( + emptyStateTitle = stringResource(R.string.no_loans), + emptyStateText = stringResource(R.string.no_loans_description) + ) + + Spacer(Modifier.weight(1f)) } + Spacer(Modifier.height(150.dp)) // scroll hack } - if (state.screenMode == LoanScreenMode.TabularMode) { - TabularLoanBottomBar( - tab = state.selectedTab, - selectTab = { onEventHandler.invoke(LoanScreenEvent.OnTabChanged(it)) }, - onAdd = { - onEventHandler.invoke(LoanScreenEvent.OnAddLoan) - } - ) - } else { - NonTabularLoanBottomBar( - isPaidOffLoanVisible = state.paidOffLoanVisibility, - onAdd = { - onEventHandler.invoke(LoanScreenEvent.OnAddLoan) - }, - onTogglePaidOffLoanVisibility = { - onEventHandler.invoke(LoanScreenEvent.OnTogglePaidOffLoanVisibility) - }, - onClose = { - nav.back() - }, - ) - } + LoanBottomBar( + tab = state.selectedTab, + selectTab = { onEventHandler.invoke(LoanScreenEvent.OnTabChanged(it)) }, + onAdd = { + onEventHandler.invoke(LoanScreenEvent.OnAddLoan) + } + ) ReorderModalSingleType( visible = state.reorderModalVisible, - initialItems = state.loans, + initialItems = if (state.selectedTab == LoanTab.PENDING) state.pendingLoans else state.completedLoans, dismiss = { onEventHandler.invoke(LoanScreenEvent.OnReOrderModalShow(show = false)) }, @@ -242,7 +198,6 @@ private fun BoxWithConstraintsScope.UI( @Composable private fun Toolbar( - isTabularModeOn: Boolean, onDismiss: () -> Unit, setReorderModalVisible: (Boolean) -> Unit, totalOweAmount: String, @@ -282,14 +237,13 @@ private fun Toolbar( } } - if (isTabularModeOn) { - CircleButtonFilled( - modifier = Modifier, - icon = R.drawable.ic_dismiss, - onClick = onDismiss - ) - Spacer(Modifier.width(8.dp)) - } + CircleButtonFilled( + modifier = Modifier, + icon = R.drawable.ic_dismiss, + onClick = onDismiss + ) + + Spacer(Modifier.width(8.dp)) ReorderButton { setReorderModalVisible(true) @@ -472,25 +426,10 @@ private val testDateTime = LocalDateTime.of(2023, 4, 20, 0, 35) @Preview @Composable -private fun PreviewInTabularMode(theme: Theme = Theme.LIGHT) { +private fun Preview(theme: Theme = Theme.LIGHT) { val state = LoanScreenState( baseCurrency = "BGN", selectedTab = LoanTab.PENDING, - loans = persistentListOf( - DisplayLoan( - loan = Loan( - name = "Loan 1", - icon = "rocket", - color = Red.toArgb(), - amount = 5000.0, - type = LoanType.BORROW, - dateTime = testDateTime - ), - loanTotalAmount = 5500.0, - amountPaid = 0.0, - percentPaid = 0.4 - ) - ), completedLoans = persistentListOf( DisplayLoan( loan = Loan( @@ -528,75 +467,6 @@ private fun PreviewInTabularMode(theme: Theme = Theme.LIGHT) { reorderModalVisible = false, selectedAccount = null, paidOffLoanVisibility = true, - screenMode = LoanScreenMode.TabularMode, - dateTime = Instant.now() - ) - IvyWalletPreview(theme) { - UI( - state = state - ) {} - } -} - -@Preview -@Composable -private fun PreviewInNonTabularMode(theme: Theme = Theme.LIGHT) { - val state = LoanScreenState( - baseCurrency = "BGN", - selectedTab = LoanTab.PENDING, - loans = persistentListOf( - DisplayLoan( - loan = Loan( - name = "Loan 3", - icon = "bank", - color = Blue.toArgb(), - amount = 7000.0, - type = LoanType.LEND, - dateTime = testDateTime - ), - loanTotalAmount = 7000.0, - amountPaid = 8000.0, - percentPaid = 0.8 - ), - ), - completedLoans = persistentListOf( - DisplayLoan( - loan = Loan( - name = "Loan 1", - icon = "rocket", - color = Red.toArgb(), - amount = 5000.0, - type = LoanType.BORROW, - dateTime = testDateTime - ), - loanTotalAmount = 5500.0, - amountPaid = 0.0, - percentPaid = 0.4 - ), - ), - pendingLoans = persistentListOf( - DisplayLoan( - loan = Loan( - name = "Loan 3", - icon = "bank", - color = Blue.toArgb(), - amount = 7000.0, - type = LoanType.LEND, - dateTime = testDateTime - ), - loanTotalAmount = 7000.0, - amountPaid = 8000.0, - percentPaid = 0.8 - ), - ), - accounts = persistentListOf(), - totalOweAmount = "1000.00 INR", - totalOwedAmount = "1500.0 INR", - loanModalData = null, - reorderModalVisible = false, - selectedAccount = null, - paidOffLoanVisibility = true, - screenMode = LoanScreenMode.NonTabularMode, dateTime = Instant.now() ) IvyWalletPreview(theme) { @@ -608,19 +478,10 @@ private fun PreviewInNonTabularMode(theme: Theme = Theme.LIGHT) { /** For screenshot testing */ @Composable -fun LoanScreenTabularModeUiTest(isDark: Boolean) { - val theme = when (isDark) { - true -> Theme.DARK - false -> Theme.LIGHT - } - PreviewInTabularMode(theme) -} - -@Composable -fun LoanScreenNonTabularModeUiTest(isDark: Boolean) { +fun LoanScreenUiTest(isDark: Boolean) { val theme = when (isDark) { true -> Theme.DARK false -> Theme.LIGHT } - PreviewInNonTabularMode(theme) + Preview(theme) } \ No newline at end of file diff --git a/screen/loans/src/main/java/com/ivy/loans/loan/NonTabularLoanBottomBar.kt b/screen/loans/src/main/java/com/ivy/loans/loan/NonTabularLoanBottomBar.kt deleted file mode 100644 index 8958cf673e..0000000000 --- a/screen/loans/src/main/java/com/ivy/loans/loan/NonTabularLoanBottomBar.kt +++ /dev/null @@ -1,73 +0,0 @@ -package com.ivy.loans.loan - -import androidx.compose.foundation.background -import androidx.compose.foundation.layout.BoxWithConstraintsScope -import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.Spacer -import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.foundation.layout.width -import androidx.compose.runtime.Composable -import androidx.compose.ui.Alignment -import androidx.compose.ui.Modifier -import androidx.compose.ui.res.stringResource -import androidx.compose.ui.tooling.preview.Preview -import androidx.compose.ui.unit.dp -import com.ivy.legacy.IvyWalletPreview -import com.ivy.ui.R -import com.ivy.wallet.ui.theme.Blue -import com.ivy.wallet.ui.theme.components.BackBottomBar -import com.ivy.wallet.ui.theme.components.IvyButton -import com.ivy.wallet.ui.theme.components.IvyCircleButton - -@Composable -internal fun BoxWithConstraintsScope.NonTabularLoanBottomBar( - isPaidOffLoanVisible: Boolean, - onClose: () -> Unit, - onAdd: () -> Unit, - onTogglePaidOffLoanVisibility: () -> Unit -) { - BackBottomBar(onBack = onClose) { - Row(verticalAlignment = Alignment.CenterVertically) { - // TODO: Add icon content description - need to update - IvyCircleButton( - icon = when (isPaidOffLoanVisible) { - true -> R.drawable.ic_visible - else -> R.drawable.ic_hidden - }, - backgroundPadding = 10.dp - ) { - onTogglePaidOffLoanVisibility() - } - - Spacer(Modifier.width(12.dp)) - - IvyButton( - text = stringResource(R.string.add_loan), - iconStart = R.drawable.ic_plus - ) { - onAdd() - } - } - } -} - -@Preview -@Composable -private fun PreviewNonTabularBottomBar() { - IvyWalletPreview { - Column( - Modifier - .fillMaxSize() - .background(Blue) - ) { - } - - NonTabularLoanBottomBar( - isPaidOffLoanVisible = false, - onAdd = {}, - onClose = {}, - onTogglePaidOffLoanVisibility = {} - ) - } -} diff --git a/screen/loans/src/test/java/com/ivy/loans/LoanScreenPaparazziTest.kt b/screen/loans/src/test/java/com/ivy/loans/LoanScreenPaparazziTest.kt index 2c3188fb95..992d2ac9b2 100644 --- a/screen/loans/src/test/java/com/ivy/loans/LoanScreenPaparazziTest.kt +++ b/screen/loans/src/test/java/com/ivy/loans/LoanScreenPaparazziTest.kt @@ -2,8 +2,7 @@ package com.ivy.loans import com.google.testing.junit.testparameterinjector.TestParameter import com.google.testing.junit.testparameterinjector.TestParameterInjector -import com.ivy.loans.loan.LoanScreenNonTabularModeUiTest -import com.ivy.loans.loan.LoanScreenTabularModeUiTest +import com.ivy.loans.loan.LoanScreenUiTest import com.ivy.ui.testing.PaparazziScreenshotTest import com.ivy.ui.testing.PaparazziTheme import org.junit.Test @@ -15,16 +14,9 @@ class LoanScreenPaparazziTest( private val theme: PaparazziTheme, ) : PaparazziScreenshotTest() { @Test - fun `snapshot loanScreen tabular composable`() { + fun `snapshot loanScreen composable`() { snapshot(theme) { - LoanScreenTabularModeUiTest(theme == PaparazziTheme.Dark) - } - } - - @Test - fun `snapshot loanScreen non tabular composable`() { - snapshot(theme) { - LoanScreenNonTabularModeUiTest(theme == PaparazziTheme.Dark) + LoanScreenUiTest(theme == PaparazziTheme.Dark) } } } \ No newline at end of file diff --git a/screen/loans/src/test/snapshots/images/com.ivy.loans_LoanScreenPaparazziTest_snapshot loanScreen composable[Dark].png b/screen/loans/src/test/snapshots/images/com.ivy.loans_LoanScreenPaparazziTest_snapshot loanScreen composable[Dark].png new file mode 100644 index 0000000000000000000000000000000000000000..2f4783c9ceef5348f96867104b37cf449e298878 GIT binary patch literal 30458 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 z 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 } diff --git a/shared/domain/src/main/java/com/ivy/domain/features/IvyFeatures.kt b/shared/domain/src/main/java/com/ivy/domain/features/IvyFeatures.kt index 37a5584bb1..a946c8a23e 100644 --- a/shared/domain/src/main/java/com/ivy/domain/features/IvyFeatures.kt +++ b/shared/domain/src/main/java/com/ivy/domain/features/IvyFeatures.kt @@ -46,13 +46,6 @@ class IvyFeatures @Inject constructor() : Features { defaultValue = false ) - override val tabularLoanMode = BoolFeature( - key = "tabular_loan_ui", - name = "Tabular Loan UI", - description = "Show Completed and Pending loans in separate tabs", - defaultValue = false - ) - override val allFeatures: List get() = listOf( sortCategoriesAlphabetically, @@ -60,7 +53,6 @@ class IvyFeatures @Inject constructor() : Features { compactCategoriesMode, showTitleSuggestions, showCategorySearchBar, - hideTotalBalance, - tabularLoanMode + hideTotalBalance ) }