Skip to content

Commit

Permalink
Add loading icon to widget
Browse files Browse the repository at this point in the history
  • Loading branch information
Ixam97 committed Nov 15, 2023
1 parent 2ff5335 commit 5be824f
Show file tree
Hide file tree
Showing 5 changed files with 46 additions and 24 deletions.
9 changes: 5 additions & 4 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@ android {
applicationId = "de.ixam97.carstatswidget"
minSdk = 24
targetSdk = 34
versionCode = 2
versionName = "0.1.1.0001"
versionCode = 3
versionName = "0.1.2.0001"

testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
vectorDrawables {
Expand All @@ -25,7 +25,8 @@ android {

buildTypes {
release {
isMinifyEnabled = false
isMinifyEnabled = true
isShrinkResources = true
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
Expand Down Expand Up @@ -56,7 +57,6 @@ android {
dependencies {

implementation(libs.core.ktx)
implementation(libs.androidx.appcompat)
implementation(libs.lifecycle.runtime.ktx)
implementation(libs.lifecycle.viewmodel.compose)
implementation(libs.activity.compose)
Expand All @@ -80,6 +80,7 @@ dependencies {
implementation(libs.kotlinx.serialization.json)
implementation(libs.accompanist.systemuicontroller)
implementation(libs.aboutlibraries.core)
implementation(libs.androidx.appcompat.resources)
testImplementation(libs.junit)
androidTestImplementation(libs.androidx.test.ext.junit)
androidTestImplementation(libs.espresso.core)
Expand Down
36 changes: 23 additions & 13 deletions app/src/main/java/de/ixam97/carstatswidget/StateOfChargeWidget.kt
Original file line number Diff line number Diff line change
Expand Up @@ -81,12 +81,10 @@ class StateOfChargeWidget : GlanceAppWidget() {
) {
val carDataInfo = currentState<CarDataInfo>()
when (carDataInfo.status) {
is CarDataStatus.Loading -> {
LoadingComponent()
}
is CarDataStatus.NotLoggedIn -> {
NotLoggedInComponent()
}
is CarDataStatus.Loading,
is CarDataStatus.Unavailable,
is CarDataStatus.Available -> {
AvailableComponent(carDataInfo, carDataInfo.carData)
Expand Down Expand Up @@ -128,6 +126,7 @@ class StateOfChargeWidget : GlanceAppWidget() {
}
}

/*
@Composable
private fun LoadingComponent() {
Column(
Expand All @@ -142,7 +141,7 @@ class StateOfChargeWidget : GlanceAppWidget() {
)
}
}

*/
@Composable
private fun NotLoggedInComponent() {
val mainActivityIntent = Intent(LocalContext.current, MainActivity::class.java)
Expand Down Expand Up @@ -206,7 +205,7 @@ class StateOfChargeWidget : GlanceAppWidget() {
val context = LocalContext.current

val showImage = size.width > 230.dp
val showDate = true /* (size.height > 110.dp || showImage) && carDataInfo.showLastSeen */
val showDate = carDataInfo.showLastSeen

LaunchedEffect(null) {
Log.i("Widget", "Start image loading")
Expand Down Expand Up @@ -341,7 +340,7 @@ class StateOfChargeWidget : GlanceAppWidget() {
.fillMaxHeight()
.clickable(actionStartActivity(mainActivityIntent))
) {
if (/* carDataInfo.showVehicleName */ true) {
if (carDataInfo.showVehicleName) {
Text(
style = TextStyle(
color = GlanceTheme.colors.onSurfaceVariant,
Expand Down Expand Up @@ -376,13 +375,24 @@ class StateOfChargeWidget : GlanceAppWidget() {
}
}

if (carDataInfo.status == CarDataStatus.Unavailable) {
Image(
modifier = GlanceModifier.padding(10.dp),
provider = ImageProvider(R.drawable.ic_offline),
contentDescription = null,
colorFilter = ColorFilter.tint(ColorProvider(Color.Red))
)
when (carDataInfo.status) {
CarDataStatus.Unavailable -> {
Image(
modifier = GlanceModifier.padding(10.dp),
provider = ImageProvider(R.drawable.ic_offline),
contentDescription = null,
colorFilter = ColorFilter.tint(ColorProvider(Color.Red))
)
}
CarDataStatus.Loading -> {
Image(
modifier = GlanceModifier.padding(10.dp),
provider = ImageProvider(R.drawable.ic_hourglas),
contentDescription = null,
colorFilter = ColorFilter.tint(GlanceTheme.colors.onSurfaceVariant)
)
}
else -> {}
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@ class CarDataWorker(
if (email == "" || password == "") {
setWidgetState(glanceIds, CarDataInfo(status = CarDataStatus.NotLoggedIn))
} else {
setWidgetState(glanceIds, CarDataInfo(status = CarDataStatus.Loading))
val carDataInfo = CarDataRepository.getCarDataInfo(email, password)
val carDataInfoWithSettings = carDataInfo.copy(
showLastSeen = preferencesManager.getBoolean("showLastSeen", true),
Expand All @@ -77,20 +78,21 @@ class CarDataWorker(

private suspend fun setWidgetState(glanceIds: List<GlanceId>, newState: CarDataInfo) {
glanceIds.forEach {glanceId ->


val prevData = getAppWidgetState(
context = context,
definition = CarDataInfoStateDefinition,
glanceId = glanceId)

Log.d("CarDataWorker", "Car data length in widget state: ${prevData.carData.size}")

updateAppWidgetState(
context = context,
definition = CarDataInfoStateDefinition,
glanceId = glanceId,
updateState = { newState.copy(carData = prevData.carData) }
updateState = {
if (newState.status == CarDataStatus.Available) {
newState
} else
newState.copy(carData = prevData.carData)
}
)
StateOfChargeWidget().update(context, glanceId)
}
Expand Down
9 changes: 9 additions & 0 deletions app/src/main/res/drawable/ic_hourglas.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960">
<path
android:fillColor="@android:color/white"
android:pathData="M320,800L640,800L640,680Q640,614 593,567Q546,520 480,520Q414,520 367,567Q320,614 320,680L320,800ZM480,440Q546,440 593,393Q640,346 640,280L640,160L320,160L320,280Q320,346 367,393Q414,440 480,440ZM160,880L160,800L240,800L240,680Q240,619 268.5,565.5Q297,512 348,480Q297,448 268.5,394.5Q240,341 240,280L240,160L160,160L160,80L800,80L800,160L720,160L720,280Q720,341 691.5,394.5Q663,448 612,480Q663,512 691.5,565.5Q720,619 720,680L720,800L800,800L800,880L160,880Z"/>
</vector>
4 changes: 2 additions & 2 deletions gradle/libs.versions.toml
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,9 @@ lifecycle-runtime-ktx = "2.6.2"
activity-compose = "1.8.0"
compose-bom = "2023.10.01"
work-runtime-ktx = "2.8.1"
appcompat-resources = "1.6.1"

[libraries]
androidx-appcompat = { module = "androidx.appcompat:appcompat", version.ref = "appcompat" }
androidx-work-runtime-ktx = { module = "androidx.work:work-runtime-ktx", version.ref = "work-runtime-ktx" }
coil = { module = "io.coil-kt:coil", version.ref = "coil" }
coil-compose = { module = "io.coil-kt:coil-compose", version.ref = "coil" }
Expand Down Expand Up @@ -47,8 +47,8 @@ material3 = { group = "androidx.compose.material3", name = "material3", version
material = { group = "androidx.compose.material", name = "material"}
navigation-compose = { module = "androidx.navigation:navigation-compose", version = "2.7.5"}
aboutlibraries-core = { module = "com.mikepenz:aboutlibraries-core", version = "10.9.2"}

accompanist-systemuicontroller = {module = "com.google.accompanist:accompanist-systemuicontroller", version = "0.27.0"}
androidx-appcompat-resources = { group = "androidx.appcompat", name = "appcompat-resources", version.ref = "appcompat-resources" }

[plugins]
androidApplication = { id = "com.android.application", version.ref = "agp" }
Expand Down

0 comments on commit 5be824f

Please sign in to comment.