From a7cc1238d396e0986670ef2c58aaa4c902763f88 Mon Sep 17 00:00:00 2001 From: Fabian Bender Date: Thu, 10 Apr 2025 13:31:35 +0200 Subject: [PATCH 1/6] add new toolbar colors and adjust checkout activity toolbar accordingly --- .../sdk/ui/checkout/CheckoutActivity.kt | 17 +++++++++- .../ui/remotetheme/RemoteThemingExtensions.kt | 34 +++++++++++++++++++ 2 files changed, 50 insertions(+), 1 deletion(-) diff --git a/ui/src/main/java/io/snabble/sdk/ui/checkout/CheckoutActivity.kt b/ui/src/main/java/io/snabble/sdk/ui/checkout/CheckoutActivity.kt index c12f44cda7..e30027bc92 100644 --- a/ui/src/main/java/io/snabble/sdk/ui/checkout/CheckoutActivity.kt +++ b/ui/src/main/java/io/snabble/sdk/ui/checkout/CheckoutActivity.kt @@ -23,12 +23,15 @@ import androidx.navigation.NavController import androidx.navigation.NavGraph import androidx.navigation.NavOptions import androidx.navigation.fragment.NavHostFragment +import com.google.android.material.appbar.MaterialToolbar import io.snabble.sdk.InitializationState import io.snabble.sdk.PaymentMethod import io.snabble.sdk.Snabble import io.snabble.sdk.checkout.Checkout import io.snabble.sdk.checkout.CheckoutState import io.snabble.sdk.ui.R +import io.snabble.sdk.ui.remotetheme.onToolBarColorForProject +import io.snabble.sdk.ui.remotetheme.toolBarColorForProject import io.snabble.sdk.utils.Logger class CheckoutActivity : FragmentActivity() { @@ -120,6 +123,17 @@ class CheckoutActivity : FragmentActivity() { } navController.graph = navGraph + navController.addOnDestinationChangedListener { _, _, _ -> + val toolBarColor = + this@CheckoutActivity.toolBarColorForProject(Snabble.checkedInProject.value) + val onToolBarColor = + this@CheckoutActivity.onToolBarColorForProject(Snabble.checkedInProject.value) + this.findViewById(R.id.checkout_toolbar).apply { + setBackgroundColor(toolBarColor) + setTitleTextColor(onToolBarColor) + } + } + } } @@ -137,7 +151,8 @@ class CheckoutActivity : FragmentActivity() { val showToolBar = resources.getBoolean(R.bool.showToolbarInCheckout) findViewById(R.id.checkout_toolbar_spacer)?.isVisible = showToolBar navController.addOnDestinationChangedListener { _, _, arguments -> - findViewById(R.id.checkout_toolbar)?.isVisible = arguments?.getBoolean("showToolbar", false) == true + findViewById(R.id.checkout_toolbar)?.isVisible = + arguments?.getBoolean("showToolbar", false) == true } if (showToolBar) { applyInsets() diff --git a/ui/src/main/java/io/snabble/sdk/ui/remotetheme/RemoteThemingExtensions.kt b/ui/src/main/java/io/snabble/sdk/ui/remotetheme/RemoteThemingExtensions.kt index 2d9eeadf8e..7dd681938d 100644 --- a/ui/src/main/java/io/snabble/sdk/ui/remotetheme/RemoteThemingExtensions.kt +++ b/ui/src/main/java/io/snabble/sdk/ui/remotetheme/RemoteThemingExtensions.kt @@ -5,8 +5,11 @@ package io.snabble.sdk.ui.remotetheme import android.content.Context import android.graphics.Color import androidx.appcompat.app.AlertDialog +import com.google.gson.annotations.SerializedName import io.snabble.sdk.Project +import io.snabble.sdk.extensions.xx import io.snabble.sdk.ui.R +import io.snabble.sdk.utils.GsonHolder import io.snabble.sdk.utils.getColorByAttribute fun Context.getPrimaryColorForProject(project: Project?): Int { @@ -72,3 +75,34 @@ fun AlertDialog.changeButtonColorFor(project: Project?): AlertDialog { } return this } + +private data class ToolbarColors( + @SerializedName("colorAppBar_light") val lightToolbarColor: String?, + @SerializedName("colorAppBar_dark") val darkToolbarColor: String?, + @SerializedName("colorOnAppBar_light") val lightOnToolbarColor: String?, + @SerializedName("colorOnAppBar_dark") val darkOnToolbarColor: String?, +) + +fun Context.toolBarColorForProject(project: Project?): Int = + GsonHolder.get().fromJson(project?.customizationConfig.xx(), ToolbarColors::class.java)?.let { + val lightColor = it.lightToolbarColor?.asColor() + val darkColor = it.darkToolbarColor?.asColor() + when { + isDarkMode() -> darkColor ?: lightColor + ?: getColorByAttribute(io.snabble.sdk.ui.R.attr.colorSecondary) + + else -> lightColor ?: getColorByAttribute(io.snabble.sdk.ui.R.attr.colorSecondary) + } + } ?: getColorByAttribute(io.snabble.sdk.ui.R.attr.colorSecondary) + +fun Context.onToolBarColorForProject(project: Project?): Int = + GsonHolder.get().fromJson(project?.customizationConfig.xx(), ToolbarColors::class.java)?.let { + val lightColor = it.lightOnToolbarColor?.asColor() + val darkColor = it.darkOnToolbarColor?.asColor() + when { + isDarkMode() -> darkColor ?: lightColor + ?: getColorByAttribute(io.snabble.sdk.ui.R.attr.colorOnSecondary) + + else -> lightColor ?: getColorByAttribute(io.snabble.sdk.ui.R.attr.colorOnSecondary) + } + } ?: getColorByAttribute(io.snabble.sdk.ui.R.attr.colorOnSecondary) From cbef19078d7d97d09aec5213d74cf750ccf4f274 Mon Sep 17 00:00:00 2001 From: Fabian Bender Date: Thu, 10 Apr 2025 13:31:47 +0200 Subject: [PATCH 2/6] update CHANGELOG.md --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6152ae3c81..4080e16d75 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ All notable changes to this project will be documented in this file. ### Added ### Changed * ui: add new style and theme manager to make primary and secondary buttons customizable (APPS-2213) +* ui: add new remote colors for toolbar and adjust it accordingly in the checkout activity (APPS-2062) ### Removed ### Fixed From b2ea985c27e82b5c944abcc7f8f0469bd0877b4c Mon Sep 17 00:00:00 2001 From: Fabian Bender Date: Thu, 10 Apr 2025 13:35:31 +0200 Subject: [PATCH 3/6] update toolbar to adjust to the new remote theme colors --- ui/src/main/res/drawable/ic_arrow_back.xml | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 ui/src/main/res/drawable/ic_arrow_back.xml diff --git a/ui/src/main/res/drawable/ic_arrow_back.xml b/ui/src/main/res/drawable/ic_arrow_back.xml new file mode 100644 index 0000000000..412949ea20 --- /dev/null +++ b/ui/src/main/res/drawable/ic_arrow_back.xml @@ -0,0 +1,12 @@ + + + + From 8f0b2f814e3cc495c0239c2dfdff8b2a57f705a0 Mon Sep 17 00:00:00 2001 From: Fabian Bender Date: Thu, 10 Apr 2025 13:46:34 +0200 Subject: [PATCH 4/6] change to only set it if it is given --- .../sdk/ui/checkout/CheckoutActivity.kt | 4 ++-- .../ui/remotetheme/RemoteThemingExtensions.kt | 21 +++++++------------ 2 files changed, 10 insertions(+), 15 deletions(-) diff --git a/ui/src/main/java/io/snabble/sdk/ui/checkout/CheckoutActivity.kt b/ui/src/main/java/io/snabble/sdk/ui/checkout/CheckoutActivity.kt index e30027bc92..4976581c7c 100644 --- a/ui/src/main/java/io/snabble/sdk/ui/checkout/CheckoutActivity.kt +++ b/ui/src/main/java/io/snabble/sdk/ui/checkout/CheckoutActivity.kt @@ -129,8 +129,8 @@ class CheckoutActivity : FragmentActivity() { val onToolBarColor = this@CheckoutActivity.onToolBarColorForProject(Snabble.checkedInProject.value) this.findViewById(R.id.checkout_toolbar).apply { - setBackgroundColor(toolBarColor) - setTitleTextColor(onToolBarColor) + toolBarColor?.let(::setBackgroundColor) + onToolBarColor?.let(::setTitleTextColor) } } diff --git a/ui/src/main/java/io/snabble/sdk/ui/remotetheme/RemoteThemingExtensions.kt b/ui/src/main/java/io/snabble/sdk/ui/remotetheme/RemoteThemingExtensions.kt index 7dd681938d..47d0d34163 100644 --- a/ui/src/main/java/io/snabble/sdk/ui/remotetheme/RemoteThemingExtensions.kt +++ b/ui/src/main/java/io/snabble/sdk/ui/remotetheme/RemoteThemingExtensions.kt @@ -7,7 +7,6 @@ import android.graphics.Color import androidx.appcompat.app.AlertDialog import com.google.gson.annotations.SerializedName import io.snabble.sdk.Project -import io.snabble.sdk.extensions.xx import io.snabble.sdk.ui.R import io.snabble.sdk.utils.GsonHolder import io.snabble.sdk.utils.getColorByAttribute @@ -83,26 +82,22 @@ private data class ToolbarColors( @SerializedName("colorOnAppBar_dark") val darkOnToolbarColor: String?, ) -fun Context.toolBarColorForProject(project: Project?): Int = - GsonHolder.get().fromJson(project?.customizationConfig.xx(), ToolbarColors::class.java)?.let { +fun Context.toolBarColorForProject(project: Project?): Int? = + GsonHolder.get().fromJson(project?.customizationConfig, ToolbarColors::class.java)?.let { val lightColor = it.lightToolbarColor?.asColor() val darkColor = it.darkToolbarColor?.asColor() when { isDarkMode() -> darkColor ?: lightColor - ?: getColorByAttribute(io.snabble.sdk.ui.R.attr.colorSecondary) - - else -> lightColor ?: getColorByAttribute(io.snabble.sdk.ui.R.attr.colorSecondary) + else -> lightColor } - } ?: getColorByAttribute(io.snabble.sdk.ui.R.attr.colorSecondary) + } -fun Context.onToolBarColorForProject(project: Project?): Int = - GsonHolder.get().fromJson(project?.customizationConfig.xx(), ToolbarColors::class.java)?.let { +fun Context.onToolBarColorForProject(project: Project?): Int? = + GsonHolder.get().fromJson(project?.customizationConfig, ToolbarColors::class.java)?.let { val lightColor = it.lightOnToolbarColor?.asColor() val darkColor = it.darkOnToolbarColor?.asColor() when { isDarkMode() -> darkColor ?: lightColor - ?: getColorByAttribute(io.snabble.sdk.ui.R.attr.colorOnSecondary) - - else -> lightColor ?: getColorByAttribute(io.snabble.sdk.ui.R.attr.colorOnSecondary) + else -> lightColor } - } ?: getColorByAttribute(io.snabble.sdk.ui.R.attr.colorOnSecondary) + } From e56978407b431764938698e01f62c801de23aefb Mon Sep 17 00:00:00 2001 From: Fabian Bender Date: Thu, 10 Apr 2025 13:51:36 +0200 Subject: [PATCH 5/6] use existing onChange listener --- .../sdk/ui/checkout/CheckoutActivity.kt | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/ui/src/main/java/io/snabble/sdk/ui/checkout/CheckoutActivity.kt b/ui/src/main/java/io/snabble/sdk/ui/checkout/CheckoutActivity.kt index 4976581c7c..3cd6d7f557 100644 --- a/ui/src/main/java/io/snabble/sdk/ui/checkout/CheckoutActivity.kt +++ b/ui/src/main/java/io/snabble/sdk/ui/checkout/CheckoutActivity.kt @@ -123,17 +123,6 @@ class CheckoutActivity : FragmentActivity() { } navController.graph = navGraph - navController.addOnDestinationChangedListener { _, _, _ -> - val toolBarColor = - this@CheckoutActivity.toolBarColorForProject(Snabble.checkedInProject.value) - val onToolBarColor = - this@CheckoutActivity.onToolBarColorForProject(Snabble.checkedInProject.value) - this.findViewById(R.id.checkout_toolbar).apply { - toolBarColor?.let(::setBackgroundColor) - onToolBarColor?.let(::setTitleTextColor) - } - } - } } @@ -150,10 +139,21 @@ class CheckoutActivity : FragmentActivity() { private fun setUpToolBarAndStatusBar() { val showToolBar = resources.getBoolean(R.bool.showToolbarInCheckout) findViewById(R.id.checkout_toolbar_spacer)?.isVisible = showToolBar + navController.addOnDestinationChangedListener { _, _, arguments -> findViewById(R.id.checkout_toolbar)?.isVisible = arguments?.getBoolean("showToolbar", false) == true + + val toolBarColor = + this@CheckoutActivity.toolBarColorForProject(Snabble.checkedInProject.value) + val onToolBarColor = + this@CheckoutActivity.onToolBarColorForProject(Snabble.checkedInProject.value) + this.findViewById(R.id.checkout_toolbar).apply { + toolBarColor?.let(::setBackgroundColor) + onToolBarColor?.let(::setTitleTextColor) + } } + if (showToolBar) { applyInsets() } From 1318a6e7526aee3cbc362fac021f96c239de23ba Mon Sep 17 00:00:00 2001 From: Fabian Bender Date: Thu, 10 Apr 2025 13:56:36 +0200 Subject: [PATCH 6/6] tint toolbar spacer --- .../main/java/io/snabble/sdk/ui/checkout/CheckoutActivity.kt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/ui/src/main/java/io/snabble/sdk/ui/checkout/CheckoutActivity.kt b/ui/src/main/java/io/snabble/sdk/ui/checkout/CheckoutActivity.kt index 3cd6d7f557..d82dc6196e 100644 --- a/ui/src/main/java/io/snabble/sdk/ui/checkout/CheckoutActivity.kt +++ b/ui/src/main/java/io/snabble/sdk/ui/checkout/CheckoutActivity.kt @@ -8,6 +8,7 @@ import android.os.Bundle import android.view.View import android.view.ViewGroup import android.view.WindowManager +import android.widget.FrameLayout import androidx.activity.addCallback import androidx.appcompat.app.AlertDialog import androidx.core.view.ViewCompat @@ -152,6 +153,9 @@ class CheckoutActivity : FragmentActivity() { toolBarColor?.let(::setBackgroundColor) onToolBarColor?.let(::setTitleTextColor) } + this.findViewById(R.id.checkout_toolbar_spacer).apply { + toolBarColor?.let(::setBackgroundColor) + } } if (showToolBar) {