Skip to content

Commit 3de6f3e

Browse files
committed
migrated account fragments to compose
1 parent ae1389c commit 3de6f3e

File tree

8 files changed

+402
-172
lines changed

8 files changed

+402
-172
lines changed

mifospay/src/main/AndroidManifest.xml

+2-2
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737
<activity
3838
android:name=".SplashScreenActivity"
3939
android:theme="@style/SplashScreenTheme"
40-
android:exported="true">
40+
android:exported="true" >
4141
<intent-filter>
4242
<action android:name="android.intent.action.MAIN" />
4343

@@ -51,7 +51,7 @@
5151
<activity
5252
android:name=".home.ui.MainActivity"
5353
android:theme="@style/AppTheme"
54-
android:windowSoftInputMode="adjustPan" />
54+
android:windowSoftInputMode="adjustPan"/>
5555
<activity
5656
android:name=".common.ui.SearchActivity"
5757
android:theme="@style/AppTheme" />
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,113 @@
1+
package org.mifos.mobilewallet.mifospay.bank.composeScreen
2+
3+
import androidx.compose.foundation.layout.Arrangement
4+
import androidx.compose.foundation.layout.Column
5+
import androidx.compose.foundation.layout.Spacer
6+
import androidx.compose.foundation.layout.fillMaxSize
7+
import androidx.compose.foundation.layout.fillMaxWidth
8+
import androidx.compose.foundation.layout.height
9+
import androidx.compose.foundation.layout.padding
10+
import androidx.compose.foundation.lazy.LazyColumn
11+
import androidx.compose.material.Text
12+
import androidx.compose.runtime.Composable
13+
import androidx.compose.ui.Alignment
14+
import androidx.compose.ui.Modifier
15+
import androidx.compose.ui.res.colorResource
16+
import androidx.compose.ui.res.stringResource
17+
import androidx.compose.ui.tooling.preview.Preview
18+
import androidx.compose.ui.unit.dp
19+
import androidx.compose.ui.unit.sp
20+
import com.mifos.mobilewallet.model.domain.BankAccountDetails
21+
import org.mifos.mobilewallet.mifospay.R
22+
import org.mifos.mobilewallet.mifospay.bank.viewmodel.BankAccountsViewModel
23+
24+
@Composable
25+
fun AccountScreen(viewModel: BankAccountsViewModel, onAddAccountClicked: () -> Unit) {
26+
val bankAccountDetails = viewModel.bankAccountDetailsList
27+
AccountDisplay(bankAccountDetails,onAddAccountClicked)
28+
}
29+
30+
@Composable
31+
fun AccountDisplay(bankAccountDetails: List<BankAccountDetails>, onAddAccountClicked: () -> Unit) {
32+
Column(
33+
modifier = Modifier
34+
.fillMaxSize()
35+
) {
36+
Text(
37+
text = stringResource(id = R.string.linked_bank_account),
38+
fontSize = 16.sp,
39+
color = colorResource(id = R.color.colorTextPrimary),
40+
modifier = Modifier.padding(top = 24.dp, start = 24.dp,bottom = 16.dp)
41+
)
42+
if (bankAccountDetails.isEmpty()) {
43+
Column(
44+
modifier = Modifier
45+
.weight(1f)
46+
.fillMaxWidth()
47+
.padding(top = 48.dp, bottom = 70.dp) ,
48+
verticalArrangement = Arrangement.Center,
49+
horizontalAlignment = Alignment.CenterHorizontally
50+
51+
){
52+
PlaceholderStateLayout(
53+
title =stringResource(id = R.string.empty_no_accounts_title),
54+
subtitle = stringResource(id =R.string.empty_no_accounts_subtitle),
55+
drawableResId = R.drawable.ic_empty_state
56+
)
57+
} }
58+
else {
59+
LazyColumn(
60+
modifier = Modifier
61+
.weight(1f)
62+
.fillMaxWidth()
63+
) {
64+
items(bankAccountDetails.size) { index ->
65+
val bankAccount = bankAccountDetails[index]
66+
bankAccount.accountholderName?.let {
67+
bankAccount.bankName?.let { it1 ->
68+
bankAccount.branch?.let { it2 ->
69+
ItemCausualList(
70+
title = it1,
71+
subtitle = it,
72+
optionalCaption = it2
73+
)
74+
}
75+
}
76+
}
77+
}
78+
}
79+
}
80+
Spacer(modifier = Modifier.height(16.dp))
81+
AddAccountChip(
82+
modifier = Modifier
83+
.align(Alignment.CenterHorizontally)
84+
.padding(bottom = 128.dp),
85+
onAddAccountClicked = onAddAccountClicked
86+
)
87+
}
88+
}
89+
90+
@Preview
91+
@Composable
92+
fun AccountScreenPreview() {
93+
var bankAccountDetails = listOf(
94+
BankAccountDetails(
95+
"SBI", "Ankur Sharma", "New Delhi",
96+
"1234567890", "Savings"
97+
),
98+
BankAccountDetails(
99+
"HDFC", "Mandeep Singh ", "Uttar Pradesh",
100+
"1234567890", "Savings"
101+
),
102+
BankAccountDetails(
103+
"ANDHRA", "Rakesh anna ", "Telegana",
104+
"1234567890", "Savings"
105+
),
106+
BankAccountDetails(
107+
"PNB", "luv Pro ", "Gujrat",
108+
"1234567890", "Savings"
109+
)
110+
)
111+
AccountDisplay(bankAccountDetails,{})
112+
// AccountDisplay(bankAccountDetails = emptyList(),{})
113+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
package org.mifos.mobilewallet.mifospay.bank.composeScreen
2+
3+
import androidx.compose.foundation.BorderStroke
4+
import androidx.compose.foundation.layout.padding
5+
import androidx.compose.material.Chip
6+
import androidx.compose.material.ChipDefaults
7+
import androidx.compose.material.ExperimentalMaterialApi
8+
import androidx.compose.material.Icon
9+
import androidx.compose.material.Text
10+
import androidx.compose.material.icons.Icons
11+
import androidx.compose.material.icons.filled.Add
12+
import androidx.compose.runtime.Composable
13+
import androidx.compose.ui.Modifier
14+
import androidx.compose.ui.graphics.Color
15+
import androidx.compose.ui.res.colorResource
16+
import androidx.compose.ui.res.stringResource
17+
import androidx.compose.ui.text.style.TextAlign
18+
import androidx.compose.ui.tooling.preview.Preview
19+
import androidx.compose.ui.unit.dp
20+
import org.mifos.mobilewallet.mifospay.R
21+
22+
@OptIn(ExperimentalMaterialApi::class)
23+
@Composable
24+
fun AddAccountChip(modifier: Modifier = Modifier, onAddAccountClicked: () -> Unit) {
25+
Chip(
26+
modifier = modifier,
27+
onClick = { onAddAccountClicked() },
28+
colors = ChipDefaults.chipColors(
29+
backgroundColor = Color.Black,
30+
contentColor = colorResource(id = R.color.colorPrimary)
31+
),
32+
border = BorderStroke(width = 1.dp, color = Color.Gray),
33+
) {
34+
Icon(
35+
imageVector = Icons.Default.Add,
36+
contentDescription = null,
37+
tint = colorResource(id = R.color.colorPrimary),
38+
modifier = Modifier.padding(end = 4.dp)
39+
)
40+
Text(
41+
text = stringResource(id = R.string.add_account),
42+
modifier = Modifier.padding(horizontal = 8.dp, vertical = 4.dp),
43+
color = colorResource(id = R.color.colorPrimary),
44+
textAlign = TextAlign.Center
45+
)
46+
}
47+
}
48+
49+
@Preview
50+
@Composable
51+
fun AddAccountChipPreview() {
52+
AddAccountChip(onAddAccountClicked = { })
53+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
package org.mifos.mobilewallet.mifospay.bank.composeScreen
2+
3+
import androidx.compose.foundation.layout.Column
4+
import androidx.compose.foundation.layout.Row
5+
import androidx.compose.foundation.layout.fillMaxWidth
6+
import androidx.compose.foundation.layout.padding
7+
import androidx.compose.material.Divider
8+
import androidx.compose.material3.Icon
9+
import androidx.compose.material3.Text
10+
import androidx.compose.runtime.Composable
11+
import androidx.compose.ui.Alignment
12+
import androidx.compose.ui.Modifier
13+
import androidx.compose.ui.res.colorResource
14+
import androidx.compose.ui.res.dimensionResource
15+
import androidx.compose.ui.res.painterResource
16+
import androidx.compose.ui.tooling.preview.Preview
17+
import androidx.compose.ui.unit.dp
18+
import androidx.compose.ui.unit.sp
19+
import org.mifos.mobilewallet.mifospay.R
20+
21+
@Composable
22+
fun ItemCausualList(
23+
title: String,
24+
subtitle: String,
25+
optionalCaption: String,
26+
) {
27+
Row(
28+
modifier = Modifier
29+
.fillMaxWidth()
30+
) {
31+
Icon(
32+
painter = painterResource(id = R.drawable.ic_bank),
33+
contentDescription = "bank`s icon",
34+
modifier = Modifier
35+
.align(Alignment.CenterVertically)
36+
.padding(dimensionResource(id = R.dimen.marginItemsInSectionSmall))
37+
)
38+
39+
Column {
40+
Text(
41+
text = subtitle,
42+
modifier = Modifier.padding(top = 16.dp)
43+
)
44+
45+
Text(
46+
text = title,
47+
color = colorResource(id = R.color.colorTextPrimary),
48+
modifier = Modifier.padding(top = 4.dp),
49+
fontSize = 16.sp
50+
)
51+
Text(
52+
text = optionalCaption,
53+
modifier = Modifier.padding(top = 4.dp, bottom = 4.dp),
54+
fontSize = 12.sp
55+
)
56+
}
57+
}
58+
Divider(modifier = Modifier.padding(start = 8.dp, end = 8.dp))
59+
}
60+
61+
@Preview
62+
@Composable
63+
fun ComposeItemPreview() {
64+
ItemCausualList(
65+
title = "Item Title",
66+
subtitle = "Item Subtitle",
67+
optionalCaption = "Optional Caption"
68+
)
69+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
package org.mifos.mobilewallet.mifospay.bank.composeScreen
2+
import androidx.compose.foundation.Image
3+
import androidx.compose.foundation.layout.*
4+
import androidx.compose.foundation.text.BasicText
5+
import androidx.compose.material.MaterialTheme
6+
import androidx.compose.runtime.Composable
7+
import androidx.compose.ui.Alignment
8+
import androidx.compose.ui.Modifier
9+
import androidx.compose.ui.res.painterResource
10+
import androidx.compose.ui.text.style.TextAlign
11+
import androidx.compose.ui.tooling.preview.Preview
12+
import androidx.compose.ui.unit.dp
13+
import org.mifos.mobilewallet.mifospay.R
14+
@Composable
15+
fun PlaceholderStateLayout(
16+
title: String,
17+
subtitle: String,
18+
drawableResId: Int
19+
) {
20+
Column(
21+
modifier = Modifier
22+
.padding(16.dp),
23+
verticalArrangement = Arrangement.Center,
24+
horizontalAlignment = Alignment.CenterHorizontally
25+
) {
26+
Image(
27+
painter = painterResource(id = drawableResId),
28+
contentDescription = "Content Description Placeholder",
29+
modifier = Modifier.size(120.dp)
30+
)
31+
32+
Spacer(modifier = Modifier.height(16.dp))
33+
34+
BasicText(
35+
text = title,
36+
style = MaterialTheme.typography.body1
37+
)
38+
39+
Spacer(modifier = Modifier.height(8.dp))
40+
41+
BasicText(
42+
text = subtitle,
43+
style = MaterialTheme.typography.body2
44+
)
45+
}
46+
}
47+
48+
@Preview
49+
@Composable
50+
fun PlaceholderStateLayoutPreview() {
51+
PlaceholderStateLayout(
52+
title = "No Bank Accounts Linked",
53+
subtitle = "You have not linked any bank accounts yet",
54+
drawableResId = R.drawable.ic_empty_state
55+
)
56+
}

0 commit comments

Comments
 (0)