Skip to content

Commit

Permalink
Displaying status of insurances (app version 1.0)
Browse files Browse the repository at this point in the history
  • Loading branch information
jumpiniasty committed Sep 28, 2023
1 parent 9e5d28b commit f33b782
Show file tree
Hide file tree
Showing 20 changed files with 165 additions and 257 deletions.
2 changes: 0 additions & 2 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -66,8 +66,6 @@ dependencies {
implementation("androidx.compose.material3:material3")
implementation("androidx.navigation:navigation-compose:2.7.3")
implementation("com.google.code.gson:gson:2.10.1")
implementation("androidx.glance:glance-appwidget:1.0.0")
implementation("androidx.glance:glance-material3:1.0.0")

testImplementation("junit:junit:4.13.2")
androidTestImplementation(platform("androidx.compose:compose-bom:2023.03.00"))
Expand Down
11 changes: 0 additions & 11 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -23,16 +23,5 @@
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>

<receiver
android:name=".ui.widgets.ExpirationsReceiver"
android:exported="false">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<meta-data
android:name="android.appwidget.provider"
android:resource="@xml/expirations_widget" />
</receiver>
</application>
</manifest>
3 changes: 0 additions & 3 deletions app/src/main/java/io/fixmyride/database/DatabaseDao.kt
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,6 @@ import io.fixmyride.models.Vehicle

@Dao
interface DatabaseDao {
@Query("SELECT * FROM vehicle")
suspend fun getData(): List<Vehicle>

@Insert(onConflict = OnConflictStrategy.IGNORE)
suspend fun addVehicle(vehicle: Vehicle)

Expand Down
7 changes: 7 additions & 0 deletions app/src/main/java/io/fixmyride/enums/ExpirationStatus.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package io.fixmyride.enums

enum class ExpirationStatus {
ACTIVE,
EXPIRED,
WARNING;
}
8 changes: 0 additions & 8 deletions app/src/main/java/io/fixmyride/models/Vehicle.kt
Original file line number Diff line number Diff line change
Expand Up @@ -26,14 +26,6 @@ data class Vehicle(
@TypeConverters(DateConverter::class)
val nextInspectionDate: LocalDate,
) {
fun toMap() = mapOf(
"id" to id,
"model" to model,
"registration" to registration,
"tplInsuranceExpiry" to tplInsuranceExpiry,
"collisionInsuranceExpiry" to collisionInsuranceExpiry,
"nextInspectionDate" to nextInspectionDate,
)
companion object {
@RequiresApi(Build.VERSION_CODES.O)
val EMPTY = Vehicle(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ fun FormField(
initialValue: String? = null,
caption: String,
placeholder: String,
upperCase: Boolean = false,
onInput: (String) -> Unit,
) {
val fieldValue = remember { mutableStateOf("") }
Expand All @@ -68,8 +69,11 @@ fun FormField(
TextField(
value = fieldValue.value,
onValueChange = {
fieldValue.value = it
onInput(it)
fieldValue.value = when (upperCase) {
true -> it.uppercase()
false -> it
}
onInput(fieldValue.value)
},
textStyle = Typing.textFieldText,
maxLines = 1,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package io.fixmyride.ui.components.notifications

import android.os.Build
import androidx.annotation.RequiresApi
import androidx.compose.animation.AnimatedVisibility
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
Expand All @@ -25,10 +26,13 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import io.fixmyride.R
import io.fixmyride.database.DatabaseManager
import io.fixmyride.enums.ExpirationStatus
import io.fixmyride.enums.NotificationType
import io.fixmyride.models.Notification
import io.fixmyride.models.Vehicle
import io.fixmyride.ui.components.ExpandButton
Expand Down Expand Up @@ -78,7 +82,7 @@ fun NotificationItem(notification: Notification) {
vehicle.value.model.length > 12 -> {
vehicle.value.model
.substring(0, 11)
.trim() + "..."
.trim().plus("...")
}

else -> vehicle.value.model
Expand All @@ -99,8 +103,90 @@ fun NotificationItem(notification: Notification) {
expired = notification.expirations.filter { it < 0 }.size,
warnings = notification.expirations.filter { it > 0 }.size,
expanded = isExpanded.value,
) {
isExpanded.value = !isExpanded.value
) { isExpanded.value = !isExpanded.value }
}

AnimatedVisibility(isExpanded.value) {
Column {
Spacer(Modifier.height(10.dp))
Row(
verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.SpaceBetween,
modifier = Modifier.fillMaxWidth(),
) {
@Composable
fun TextWithBackground(text: String) {
Box(
contentAlignment = Alignment.Center,
modifier = Modifier.background(
color = ColorPalette.tertiary,
shape = RoundedCornerShape(50.dp),
)
) {
Text(
text,
style = Typing.buttonText.copy(
color = ColorPalette.secondary,
fontWeight = FontWeight.Bold,
),
modifier = Modifier.padding(
horizontal = 7.dp,
vertical = 3.dp,
),
)
}
}

val tplStatus = when {
notification.expirations.contains(NotificationType.TPL_EXPIRED) -> ExpirationStatus.EXPIRED
notification.expirations.contains(NotificationType.TPL_ABOUT_TO_EXPIRE) -> ExpirationStatus.WARNING
else -> ExpirationStatus.ACTIVE
}
Column(horizontalAlignment = Alignment.CenterHorizontally) {
TextWithBackground(stringResource(R.string.tpl_insurance))
Spacer(Modifier.height(5.dp))
StatusLabel(tplStatus)

}
Spacer(
modifier = Modifier
.width(5.dp)
.background(
ColorPalette.tertiary,
shape = RoundedCornerShape(100),
),
)

val ciStatus = when {
notification.expirations.contains(NotificationType.CI_EXPIRED) -> ExpirationStatus.EXPIRED
notification.expirations.contains(NotificationType.CI_ABOUT_TO_EXPIRE) -> ExpirationStatus.WARNING
else -> ExpirationStatus.ACTIVE
}
Column(horizontalAlignment = Alignment.CenterHorizontally) {
TextWithBackground(stringResource(R.string.ci))
Spacer(Modifier.height(5.dp))
StatusLabel(ciStatus)
}
Spacer(
modifier = Modifier
.width(5.dp)
.background(
ColorPalette.tertiary,
shape = RoundedCornerShape(100),
),
)

val inspectionStatus = when {
notification.expirations.contains(NotificationType.INSPECTION_EXPIRED) -> ExpirationStatus.EXPIRED
notification.expirations.contains(NotificationType.INSPECTION_UPCOMING) -> ExpirationStatus.WARNING
else -> ExpirationStatus.ACTIVE
}
Column(horizontalAlignment = Alignment.CenterHorizontally) {
TextWithBackground(stringResource(R.string.inspection))
Spacer(Modifier.height(5.dp))
StatusLabel(inspectionStatus)
}
}
}
}
}
Expand All @@ -124,11 +210,11 @@ fun WarningsAndExpand(
Box(
contentAlignment = Alignment.Center,
modifier = Modifier
.clip(RoundedCornerShape(5.dp))
.background(
color = ColorPalette.lightRed.copy(alpha = 0.1f),
shape = RoundedCornerShape(5.dp),
)
.clip(RoundedCornerShape(5.dp))
),
) {
Text(
text = "$expired ${if (hasOnlyExpirationsOrWarnings) stringResource(R.string.expirations) else ""}".trim(),
Expand All @@ -144,16 +230,15 @@ fun WarningsAndExpand(

if (!hasOnlyExpirationsOrWarnings) Spacer(Modifier.width(5.dp))


if (warnings != 0) {
Box(
contentAlignment = Alignment.Center,
modifier = Modifier
.clip(RoundedCornerShape(5.dp))
.background(
color = ColorPalette.yellow.copy(alpha = 0.1f),
shape = RoundedCornerShape(5.dp),
)
.clip(RoundedCornerShape(5.dp))
),
) {
Text(
text = "$warnings ${if (hasOnlyExpirationsOrWarnings) stringResource(R.string.warnings) else ""}".trim(),
Expand All @@ -170,4 +255,39 @@ fun WarningsAndExpand(

ExpandButton(expanded) { onClickExpand() }
}
}

@Composable
fun StatusLabel(status: ExpirationStatus) {
Box(
contentAlignment = Alignment.Center,
modifier = Modifier
.background(
color = when (status) {
ExpirationStatus.EXPIRED -> ColorPalette.lightRed.copy(alpha = 0.1f)
ExpirationStatus.WARNING -> ColorPalette.yellow.copy(alpha = 0.1f)
ExpirationStatus.ACTIVE -> ColorPalette.green.copy(alpha = 0.1f)
},
shape = RoundedCornerShape(5.dp),
)
.clip(RoundedCornerShape(5.dp))
) {
Text(
text = when (status) {
ExpirationStatus.EXPIRED -> stringResource(R.string.expired)
ExpirationStatus.WARNING -> stringResource(R.string.warning)
ExpirationStatus.ACTIVE -> stringResource(R.string.active)
},
style = when (status) {
ExpirationStatus.EXPIRED -> Typing.expiredText
ExpirationStatus.WARNING -> Typing.warningText
ExpirationStatus.ACTIVE -> Typing.activeText
},
modifier = Modifier
.padding(
horizontal = 5.dp,
vertical = 2.dp,
),
)
}
}
10 changes: 1 addition & 9 deletions app/src/main/java/io/fixmyride/ui/components/settings/Option.kt
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,6 @@ package io.fixmyride.ui.components.settings

import androidx.compose.animation.AnimatedVisibility
import androidx.compose.animation.animateContentSize
import androidx.compose.animation.expandVertically
import androidx.compose.animation.fadeIn
import androidx.compose.animation.fadeOut
import androidx.compose.animation.shrinkVertically
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
Expand Down Expand Up @@ -55,11 +51,7 @@ fun Option(
isExpanded.value = !isExpanded.value
}
}
AnimatedVisibility(
visible = isExpanded.value,
enter = fadeIn() + expandVertically(),
exit = fadeOut() + shrinkVertically(),
) {
AnimatedVisibility(visible = isExpanded.value) {
content()
}
}
Expand Down
Loading

0 comments on commit f33b782

Please sign in to comment.