diff --git a/app/src/main/java/net/helcel/cowspent/android/bill_edit/EditBillActivity.kt b/app/src/main/java/net/helcel/cowspent/android/bill_edit/EditBillActivity.kt
index 611dd12..a088640 100644
--- a/app/src/main/java/net/helcel/cowspent/android/bill_edit/EditBillActivity.kt
+++ b/app/src/main/java/net/helcel/cowspent/android/bill_edit/EditBillActivity.kt
@@ -209,6 +209,7 @@ class EditBillActivity : AppCompatActivity() {
calendar.timeInMillis = austrianBill.date.time
viewModel.timestamp = calendar.timeInMillis / 1000
viewModel.amount = austrianBill.amount.toString()
+ viewModel.updateSplits()
return@registerForActivityResult
} catch (_: ParseException) {
}
@@ -220,6 +221,7 @@ class EditBillActivity : AppCompatActivity() {
viewModel.timestamp = calendar.timeInMillis / 1000
}
viewModel.amount = croatianBill.amount.toString()
+ viewModel.updateSplits()
return@registerForActivityResult
} catch (_: ParseException) {
}
@@ -235,7 +237,8 @@ class EditBillActivity : AppCompatActivity() {
viewModel.repeat, bill.paymentMode, viewModel.categoryRemoteId,
viewModel.getFinalComment(), viewModel.paymentModeRemoteId
)
- viewModel.timestamp = bill.timestamp
+ calendar.timeInMillis = System.currentTimeMillis()
+ viewModel.timestamp = calendar.timeInMillis / 1000
viewModel.isNewBill = true
showToast(this, "Duplicating bill...")
diff --git a/app/src/main/java/net/helcel/cowspent/android/bill_edit/EditBillScreen.kt b/app/src/main/java/net/helcel/cowspent/android/bill_edit/EditBillScreen.kt
index 212e41f..bccaa90 100644
--- a/app/src/main/java/net/helcel/cowspent/android/bill_edit/EditBillScreen.kt
+++ b/app/src/main/java/net/helcel/cowspent/android/bill_edit/EditBillScreen.kt
@@ -207,9 +207,7 @@ fun BillBasicInfoSection(
items = options,
onItemSelected = { index ->
if (index == 0) {
- viewModel.selectedCurrencyName = ""
- viewModel.selectedCurrencyRate = 1.0
- viewModel.updateSplits()
+ viewModel.resetCurrency()
} else {
viewModel.convertCurrency(viewModel.currencies[index - 1])
}
@@ -217,7 +215,7 @@ fun BillBasicInfoSection(
)
}
) {
- Icon(Icons.Default.SwapHoriz, contentDescription = null)
+ Icon(Icons.Default.SwapHoriz, contentDescription = "Change Currency")
}
},
keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Number)
@@ -238,7 +236,7 @@ fun BillBasicInfoSection(
onClick = onDateClick,
modifier = Modifier.weight(1f),
enabled = canEdit,
- leadingIcon = { Icon(Icons.Default.Event, contentDescription = null) }
+ leadingIcon = { Icon(Icons.Default.Event, contentDescription = "Select Date") }
)
Spacer(modifier = Modifier.width(8.dp))
ClickableOutlinedTextField(
@@ -246,7 +244,7 @@ fun BillBasicInfoSection(
onClick = onTimeClick,
modifier = Modifier.weight(1f),
enabled = canEdit,
- leadingIcon = { Icon(Icons.Default.AccessTime, contentDescription = null) }
+ leadingIcon = { Icon(Icons.Default.AccessTime, contentDescription = "Select Time") }
)
}
}
@@ -269,12 +267,8 @@ fun PayerSection(
leadingIcon = {
Box(modifier = Modifier.padding(start = 12.dp)) {
if (selectedPayer != null) {
- UserAvatar(
- name = selectedPayer.name,
- r = selectedPayer.r,
- g = selectedPayer.g,
- b = selectedPayer.b,
- disabled = !selectedPayer.isActivated,
+ MemberAvatar(
+ member = selectedPayer,
size = 24.dp
)
} else {
@@ -288,12 +282,8 @@ fun PayerSection(
viewModel.payerId = member.id
payerExpanded = false
}) {
- UserAvatar(
- name = member.name,
- r = member.r,
- g = member.g,
- b = member.b,
- disabled = !member.isActivated,
+ MemberAvatar(
+ member = member,
size = 24.dp
)
Spacer(modifier = Modifier.width(8.dp))
@@ -398,12 +388,8 @@ fun OwerSelectionSection(
enabled = canEdit,
onCheckedChange = { viewModel.toggleMember(member.id, it) }
)
- UserAvatar(
- name = member.name,
- r = member.r,
- g = member.g,
- b = member.b,
- disabled = !member.isActivated,
+ MemberAvatar(
+ member = member,
size = 32.dp
)
Spacer(modifier = Modifier.width(8.dp))
diff --git a/app/src/main/java/net/helcel/cowspent/android/bill_edit/EditBillViewModel.kt b/app/src/main/java/net/helcel/cowspent/android/bill_edit/EditBillViewModel.kt
index 7e71cbe..defdb8c 100644
--- a/app/src/main/java/net/helcel/cowspent/android/bill_edit/EditBillViewModel.kt
+++ b/app/src/main/java/net/helcel/cowspent/android/bill_edit/EditBillViewModel.kt
@@ -131,8 +131,6 @@ class EditBillViewModel : ViewModel() {
}
fun convertCurrency(currency: DBCurrency) {
- if (amountAsDouble == 0.0) return
-
selectedCurrencyName = currency.name ?: ""
selectedCurrencyRate = currency.exchangeRate
@@ -142,6 +140,12 @@ class EditBillViewModel : ViewModel() {
updateSplits()
}
+ fun resetCurrency() {
+ selectedCurrencyName = ""
+ selectedCurrencyRate = 1.0
+ updateSplits()
+ }
+
fun getFinalAmount(): Double {
return SupportUtil.round2(amountAsDouble / selectedCurrencyRate)
}
diff --git a/app/src/main/java/net/helcel/cowspent/android/drawer/Drawer.kt b/app/src/main/java/net/helcel/cowspent/android/drawer/Drawer.kt
index f46b967..d2bc0c3 100644
--- a/app/src/main/java/net/helcel/cowspent/android/drawer/Drawer.kt
+++ b/app/src/main/java/net/helcel/cowspent/android/drawer/Drawer.kt
@@ -24,7 +24,7 @@ import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import net.helcel.cowspent.R
-import net.helcel.cowspent.android.helper.UserAvatar
+import net.helcel.cowspent.android.helper.MemberAvatar
import net.helcel.cowspent.android.helper.formatBalance
import net.helcel.cowspent.android.helper.lazyVerticalScrollbar
import net.helcel.cowspent.android.helper.TextIcon
@@ -279,13 +279,8 @@ fun DrawerItem(
verticalAlignment = Alignment.CenterVertically
) {
if (member != null) {
- UserAvatar(
- name = member.name,
- r = member.r,
- g = member.g,
- b = member.b,
- avatar = member.avatar,
- disabled = !member.isActivated,
+ MemberAvatar(
+ member = member,
size = 24.dp,
alpha = alpha
)
diff --git a/app/src/main/java/net/helcel/cowspent/android/helper/AlertDialog.kt b/app/src/main/java/net/helcel/cowspent/android/helper/AlertDialog.kt
index 284d1af..421a38c 100644
--- a/app/src/main/java/net/helcel/cowspent/android/helper/AlertDialog.kt
+++ b/app/src/main/java/net/helcel/cowspent/android/helper/AlertDialog.kt
@@ -111,49 +111,54 @@ fun AlertDialog(
if (message != null) Spacer(Modifier.height(8.dp))
LazyColumn {
itemsIndexed(items) { index, item ->
- Row(
- modifier = Modifier
- .fillMaxWidth()
- .clickable {
- onItemSelected?.invoke(index)
+ Column {
+ Row(
+ modifier = Modifier
+ .fillMaxWidth()
+ .clickable {
+ onItemSelected?.invoke(index)
+ }
+ .padding(vertical = 16.dp),
+ verticalAlignment = Alignment.CenterVertically
+ ) {
+ if (itemIcons != null && index < itemIcons.size) {
+ Icon(
+ itemIcons[index],
+ contentDescription = null,
+ modifier = Modifier.size(24.dp),
+ tint = MaterialTheme.colors.primary.copy(alpha = 0.7f)
+ )
+ Spacer(Modifier.width(16.dp))
+ }
+
+ val text = item.toString()
+ if (text.contains("|")) {
+ val parts = text.split("|")
+ Row(
+ modifier = Modifier.fillMaxWidth(),
+ horizontalArrangement = Arrangement.SpaceBetween,
+ verticalAlignment = Alignment.CenterVertically
+ ) {
+ Text(
+ text = parts[0].trim(),
+ style = MaterialTheme.typography.body1,
+ fontWeight = FontWeight.Bold
+ )
+ Text(
+ text = parts[1].trim(),
+ style = MaterialTheme.typography.body2,
+ color = MaterialTheme.colors.onSurface.copy(alpha = 0.6f)
+ )
+ }
+ } else {
+ Text(
+ text = text,
+ style = MaterialTheme.typography.body1
+ )
}
- .padding(vertical = 12.dp),
- verticalAlignment = Alignment.CenterVertically
- ) {
- if (itemIcons != null && index < itemIcons.size) {
- Icon(
- itemIcons[index],
- contentDescription = null,
- modifier = Modifier.size(24.dp),
- tint = MaterialTheme.colors.primary.copy(alpha = 0.7f)
- )
- Spacer(Modifier.width(16.dp))
}
-
- val text = item.toString()
- if (text.contains("|")) {
- val parts = text.split("|")
- Row(
- modifier = Modifier.fillMaxWidth(),
- horizontalArrangement = Arrangement.SpaceBetween,
- verticalAlignment = Alignment.CenterVertically
- ) {
- Text(
- text = parts[0].trim(),
- style = MaterialTheme.typography.body1,
- fontWeight = FontWeight.Bold
- )
- Text(
- text = parts[1].trim(),
- style = MaterialTheme.typography.body2,
- color = MaterialTheme.colors.onSurface.copy(alpha = 0.6f)
- )
- }
- } else {
- Text(
- text = text,
- style = MaterialTheme.typography.body1
- )
+ if (index < items.size - 1) {
+ Divider(color = MaterialTheme.colors.onSurface.copy(alpha = 0.08f))
}
}
}
@@ -239,49 +244,54 @@ fun AlertDialogContent(
if (message != null) Spacer(Modifier.height(8.dp))
LazyColumn {
itemsIndexed(items) { index, item ->
- Row(
- modifier = Modifier
- .fillMaxWidth()
- .clickable {
- onItemSelected?.invoke(index)
+ Column {
+ Row(
+ modifier = Modifier
+ .fillMaxWidth()
+ .clickable {
+ onItemSelected?.invoke(index)
+ }
+ .padding(vertical = 12.dp),
+ verticalAlignment = Alignment.CenterVertically
+ ) {
+ if (itemIcons != null && index < itemIcons.size) {
+ Icon(
+ itemIcons[index],
+ contentDescription = null,
+ modifier = Modifier.size(24.dp),
+ tint = MaterialTheme.colors.primary.copy(alpha = 0.7f)
+ )
+ Spacer(Modifier.width(16.dp))
+ }
+
+ val text = item.toString()
+ if (text.contains("|")) {
+ val parts = text.split("|")
+ Row(
+ modifier = Modifier.fillMaxWidth(),
+ horizontalArrangement = Arrangement.SpaceBetween,
+ verticalAlignment = Alignment.CenterVertically
+ ) {
+ Text(
+ text = parts[0].trim(),
+ style = MaterialTheme.typography.body1,
+ fontWeight = FontWeight.Bold
+ )
+ Text(
+ text = parts[1].trim(),
+ style = MaterialTheme.typography.body2,
+ color = MaterialTheme.colors.onSurface.copy(alpha = 0.6f)
+ )
+ }
+ } else {
+ Text(
+ text = text,
+ style = MaterialTheme.typography.body1
+ )
}
- .padding(vertical = 8.dp),
- verticalAlignment = Alignment.CenterVertically
- ) {
- if (itemIcons != null && index < itemIcons.size) {
- Icon(
- itemIcons[index],
- contentDescription = null,
- modifier = Modifier.size(24.dp),
- tint = MaterialTheme.colors.primary.copy(alpha = 0.7f)
- )
- Spacer(Modifier.width(16.dp))
}
-
- val text = item.toString()
- if (text.contains("|")) {
- val parts = text.split("|")
- Row(
- modifier = Modifier.fillMaxWidth(),
- horizontalArrangement = Arrangement.SpaceBetween,
- verticalAlignment = Alignment.CenterVertically
- ) {
- Text(
- text = parts[0].trim(),
- style = MaterialTheme.typography.body1,
- fontWeight = FontWeight.Bold
- )
- Text(
- text = parts[1].trim(),
- style = MaterialTheme.typography.body2,
- color = MaterialTheme.colors.onSurface.copy(alpha = 0.6f)
- )
- }
- } else {
- Text(
- text = text,
- style = MaterialTheme.typography.body1
- )
+ if (index < items.size - 1) {
+ Divider(color = MaterialTheme.colors.onSurface.copy(alpha = 0.08f))
}
}
}
diff --git a/app/src/main/java/net/helcel/cowspent/android/helper/UserAvatar.kt b/app/src/main/java/net/helcel/cowspent/android/helper/UserAvatar.kt
index 30bd1c8..3a61358 100644
--- a/app/src/main/java/net/helcel/cowspent/android/helper/UserAvatar.kt
+++ b/app/src/main/java/net/helcel/cowspent/android/helper/UserAvatar.kt
@@ -21,6 +21,7 @@ import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import android.graphics.BitmapFactory
import android.util.Base64
+import net.helcel.cowspent.model.DBMember
@Composable
fun UserAvatar(
@@ -91,6 +92,26 @@ fun UserAvatar(
}
}
+@Composable
+fun MemberAvatar(
+ member: DBMember,
+ modifier: Modifier = Modifier,
+ size: Dp = 40.dp,
+ alpha: Float = 1f
+) {
+ UserAvatar(
+ name = member.name,
+ modifier = modifier,
+ size = size,
+ r = member.r,
+ g = member.g,
+ b = member.b,
+ avatar = member.avatar,
+ disabled = !member.isActivated,
+ alpha = alpha
+ )
+}
+
@Preview
@Composable
fun UserAvatarPreview() {
diff --git a/app/src/main/java/net/helcel/cowspent/android/main/BillsListComponents.kt b/app/src/main/java/net/helcel/cowspent/android/main/BillsListComponents.kt
index cb855b2..8c20bc1 100644
--- a/app/src/main/java/net/helcel/cowspent/android/main/BillsListComponents.kt
+++ b/app/src/main/java/net/helcel/cowspent/android/main/BillsListComponents.kt
@@ -16,7 +16,7 @@ import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import net.helcel.cowspent.R
-import net.helcel.cowspent.android.helper.UserAvatar
+import net.helcel.cowspent.android.helper.MemberAvatar
import net.helcel.cowspent.model.DBBill
import net.helcel.cowspent.model.DBMember
import net.helcel.cowspent.util.SupportUtil
@@ -83,13 +83,8 @@ fun BillItemRow(bill: DBBill, payer: DBMember?, onClick: () -> Unit) {
) {
if (payer != null) {
Box {
- UserAvatar(
- name = payer.name,
- r = payer.r,
- g = payer.g,
- b = payer.b,
- avatar = payer.avatar,
- disabled = !payer.isActivated,
+ MemberAvatar(
+ member = payer,
size = 40.dp
)
if (bill.repeat != null && bill.repeat != DBBill.NON_REPEATED) {
diff --git a/app/src/main/java/net/helcel/cowspent/android/project/member/MemberManagementDialog.kt b/app/src/main/java/net/helcel/cowspent/android/project/member/MemberManagementDialog.kt
index d2121f3..aa476f4 100644
--- a/app/src/main/java/net/helcel/cowspent/android/project/member/MemberManagementDialog.kt
+++ b/app/src/main/java/net/helcel/cowspent/android/project/member/MemberManagementDialog.kt
@@ -30,7 +30,7 @@ import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import net.helcel.cowspent.R
-import net.helcel.cowspent.android.helper.UserAvatar
+import net.helcel.cowspent.android.helper.MemberAvatar
import net.helcel.cowspent.android.helper.lazyVerticalScrollbar
import net.helcel.cowspent.model.DBMember
@@ -84,13 +84,8 @@ fun MemberManagementDialogContent(
.padding(vertical = 12.dp),
verticalAlignment = Alignment.CenterVertically
) {
- UserAvatar(
- name = member.name,
- r = member.r,
- g = member.g,
- b = member.b,
- avatar = member.avatar,
- disabled = !member.isActivated,
+ MemberAvatar(
+ member = member,
size = 40.dp
)
Spacer(modifier = Modifier.width(16.dp))
diff --git a/app/src/main/java/net/helcel/cowspent/android/statistics/ProjectSankeyDiagram.kt b/app/src/main/java/net/helcel/cowspent/android/statistics/ProjectSankeyDiagram.kt
index 416a5cc..351234f 100644
--- a/app/src/main/java/net/helcel/cowspent/android/statistics/ProjectSankeyDiagram.kt
+++ b/app/src/main/java/net/helcel/cowspent/android/statistics/ProjectSankeyDiagram.kt
@@ -66,7 +66,7 @@ import androidx.core.graphics.toColorInt
import kotlinx.coroutines.launch
import net.helcel.cowspent.R
import net.helcel.cowspent.android.helper.EditableExposedDropdownMenu
-import net.helcel.cowspent.android.helper.UserAvatar
+import net.helcel.cowspent.android.helper.MemberAvatar
import net.helcel.cowspent.android.helper.formatShortValue
import net.helcel.cowspent.model.DBBill
import net.helcel.cowspent.model.DBCategory
@@ -170,7 +170,7 @@ fun ProjectSankeyDiagram(
leadingIcon = {
Box(modifier = Modifier.padding(start = 12.dp)) {
if (selectedMember != null) {
- UserAvatar(name = selectedMember.name, r = selectedMember.r, g = selectedMember.g, b = selectedMember.b, disabled = !selectedMember.isActivated, size = 24.dp)
+ MemberAvatar(member = selectedMember, size = 24.dp)
} else Icon(Icons.Default.Group, contentDescription = null)
}
},
@@ -182,7 +182,7 @@ fun ProjectSankeyDiagram(
}
allMembers.forEach { member ->
DropdownMenuItem(onClick = { selectedMemberId = member.id; expanded = false }) {
- UserAvatar(name = member.name, r = member.r, g = member.g, b = member.b, disabled = !member.isActivated, size = 24.dp)
+ MemberAvatar(member = member, size = 24.dp)
Spacer(modifier = Modifier.width(12.dp))
Text(member.name)
}
diff --git a/app/src/main/res/drawable/ic_launcher_foreground.xml b/app/src/main/res/drawable/ic_launcher_foreground.xml
index 030fd29..e0c14c5 100644
--- a/app/src/main/res/drawable/ic_launcher_foreground.xml
+++ b/app/src/main/res/drawable/ic_launcher_foreground.xml
@@ -29,7 +29,6 @@
-
diff --git a/app/src/main/res/drawable/ic_launcher_monochrome.xml b/app/src/main/res/drawable/ic_launcher_monochrome.xml
new file mode 100644
index 0000000..2979fd6
--- /dev/null
+++ b/app/src/main/res/drawable/ic_launcher_monochrome.xml
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
index 50ec886..04091bd 100644
--- a/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
+++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
@@ -2,5 +2,5 @@
-
+
\ No newline at end of file
diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
index 50ec886..04091bd 100644
--- a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
+++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
@@ -2,5 +2,5 @@
-
+
\ No newline at end of file