diff --git a/CHANGELOG.md b/CHANGELOG.md index 1fba349e19..0513e098e9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,9 +6,15 @@ All notable changes to this project will be documented in this file. ### Changed ### Removed ### Fixed + +## [0.75.8] +### Changed +* ui: Refactor RemoteThemingExtensions +### Fixed * ui: subject dialog for external billing now works in dark mode * ui: external billing icon works with dark mode now * core: prevent SQLiteLockedException and recover from it on product database update +* core: Fix theming related bug by setting restored shop in CheckInManager ## [0.75.7] ### Added diff --git a/core/src/main/java/io/snabble/sdk/Snabble.kt b/core/src/main/java/io/snabble/sdk/Snabble.kt index ebd309d8dd..7d1b55caa6 100644 --- a/core/src/main/java/io/snabble/sdk/Snabble.kt +++ b/core/src/main/java/io/snabble/sdk/Snabble.kt @@ -575,7 +575,7 @@ object Snabble { } if (shop != null) { Logger.d("Restoring last checked in shop " + shop.id + ", " + shop.name) - checkedInShop = shop + checkInManager.shop = shop break; } } diff --git a/ui/src/main/java/io/snabble/sdk/ui/payment/PaymentCredentialsListView.java b/ui/src/main/java/io/snabble/sdk/ui/payment/PaymentCredentialsListView.java index c6d530f16f..0cc0d172a1 100644 --- a/ui/src/main/java/io/snabble/sdk/ui/payment/PaymentCredentialsListView.java +++ b/ui/src/main/java/io/snabble/sdk/ui/payment/PaymentCredentialsListView.java @@ -33,7 +33,7 @@ import io.snabble.sdk.payment.PaymentCredentials; import io.snabble.sdk.payment.PaymentCredentialsStore; import io.snabble.sdk.ui.R; -import io.snabble.sdk.ui.remotetheme.RemoteThemingExtensionsKt; +import io.snabble.sdk.ui.remotetheme.RemoteThemingHelper; import io.snabble.sdk.ui.telemetry.Telemetry; import io.snabble.sdk.ui.utils.KeyguardUtils; import io.snabble.sdk.ui.utils.OneShotClickListener; @@ -81,8 +81,8 @@ private void inflateView() { FloatingActionButton fab = findViewById(R.id.fab); final Project currentProject = Snabble.getInstance().getCheckedInProject().getLatestValue(); - final int primaryColor = RemoteThemingExtensionsKt.getPrimaryColorForProject(getContext(), currentProject); - final int onPrimaryColor = RemoteThemingExtensionsKt.getOnPrimaryColorForProject(getContext(), currentProject); + final int primaryColor = RemoteThemingHelper.primaryColorForProject(getContext(), currentProject); + final int onPrimaryColor = RemoteThemingHelper.onPrimaryColorForProject(getContext(), currentProject); fab.setBackgroundTintList(ColorStateList.valueOf(primaryColor)); fab.setImageTintList(ColorStateList.valueOf(onPrimaryColor)); @@ -118,8 +118,8 @@ public void click() { .setCancelable(false) .show(); - RemoteThemingExtensionsKt - .setButtonColorFor(alertDialog, currentProject) + RemoteThemingHelper + .changeButtonColorFor(alertDialog, currentProject) .show(); } } @@ -306,8 +306,8 @@ public void onBindViewHolder(@NonNull final EntryViewHolder vh, final int positi .create(); final Project currentProject = Snabble.getInstance().getCheckedInProject().getLatestValue(); - RemoteThemingExtensionsKt - .setButtonColorFor(alertDialog, currentProject) + RemoteThemingHelper + .changeButtonColorFor(alertDialog, currentProject) .show(); Telemetry.event(Telemetry.Event.PaymentMethodDeleted, e.paymentCredentials.getType()); diff --git a/ui/src/main/java/io/snabble/sdk/ui/payment/PaymentInputViewHelper.kt b/ui/src/main/java/io/snabble/sdk/ui/payment/PaymentInputViewHelper.kt index 217cde7bf6..12311fcd6a 100644 --- a/ui/src/main/java/io/snabble/sdk/ui/payment/PaymentInputViewHelper.kt +++ b/ui/src/main/java/io/snabble/sdk/ui/payment/PaymentInputViewHelper.kt @@ -13,7 +13,7 @@ import io.snabble.sdk.ui.SnabbleUI import io.snabble.sdk.ui.payment.creditcard.datatrans.ui.DatatransFragment import io.snabble.sdk.ui.payment.creditcard.fiserv.FiservInputView import io.snabble.sdk.ui.payment.externalbilling.ExternalBillingFragment.Companion.ARG_PROJECT_ID -import io.snabble.sdk.ui.remotetheme.setButtonColorFor +import io.snabble.sdk.ui.remotetheme.changeButtonColorFor import io.snabble.sdk.ui.utils.KeyguardUtils import io.snabble.sdk.ui.utils.UIUtils import io.snabble.sdk.utils.Logger @@ -78,7 +78,7 @@ object PaymentInputViewHelper { val currentProject = Snabble.instance.checkedInProject.value alertDialog - .setButtonColorFor(currentProject) + .changeButtonColorFor(currentProject) .show() } } 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 8edfc35797..2d9eeadf8e 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 @@ -1,3 +1,5 @@ +@file:JvmName("RemoteThemingHelper") + package io.snabble.sdk.ui.remotetheme import android.content.Context @@ -16,31 +18,42 @@ fun Context.getPrimaryColorForProject(project: Project?): Int { } } -fun Context.getOnPrimaryColorForProject(project: Project?): Int { +@JvmOverloads +fun Context.primaryColorForProject(project: Project?, action: ((Int) -> Unit)? = null): Int { + val lightColor = project?.appTheme?.lightModeColors?.primaryColor?.asColor() + val darkColor = project?.appTheme?.darkModeColors?.primaryColor?.asColor() + return when { + isDarkMode() -> darkColor ?: lightColor ?: getColorByAttribute(R.attr.colorPrimary) + else -> lightColor ?: getColorByAttribute(R.attr.colorPrimary) + }.also { action?.invoke(it) } +} + +@JvmOverloads +fun Context.onPrimaryColorForProject(project: Project?, action: ((Int) -> Unit)? = null): Int { val lightColor = project?.appTheme?.lightModeColors?.onPrimaryColor?.asColor() val darkColor = project?.appTheme?.darkModeColors?.onPrimaryColor?.asColor() return when { isDarkMode() -> darkColor ?: lightColor ?: getColorByAttribute(R.attr.colorOnPrimary) else -> lightColor ?: getColorByAttribute(R.attr.colorOnPrimary) - } + }.also { action?.invoke(it) } } -fun Context.getSecondaryColorForProject(project: Project?): Int { +fun Context.secondaryColorForProject(project: Project?, action: ((Int) -> Unit)? = null): Int { val lightColor = project?.appTheme?.lightModeColors?.secondaryColor?.asColor() val darkColor = project?.appTheme?.darkModeColors?.secondaryColor?.asColor() return when { isDarkMode() -> darkColor ?: lightColor ?: getColorByAttribute(R.attr.colorSecondary) else -> lightColor ?: getColorByAttribute(R.attr.colorSecondary) - } + }.also { action?.invoke(it) } } -fun Context.getOnSecondaryColorForProject(project: Project?): Int { +fun Context.onSecondaryColorForProject(project: Project?, action: ((Int) -> Unit)? = null): Int { val lightColor = project?.appTheme?.lightModeColors?.onSecondaryColor?.asColor() val darkColor = project?.appTheme?.darkModeColors?.onSecondaryColor?.asColor() return when { isDarkMode() -> darkColor ?: lightColor ?: getColorByAttribute(R.attr.colorOnSecondary) else -> lightColor ?: getColorByAttribute(R.attr.colorOnSecondary) - } + }.also { action?.invoke(it) } } fun String.asColor() = Color.parseColor(this) @@ -51,11 +64,11 @@ fun Context.isDarkMode(): Boolean { return currentNightMode == android.content.res.Configuration.UI_MODE_NIGHT_YES } -fun AlertDialog.setButtonColorFor(project: Project?): AlertDialog { - val primaryColor = context.getPrimaryColorForProject(project) +fun AlertDialog.changeButtonColorFor(project: Project?): AlertDialog { + val primaryColor = context.primaryColorForProject(project) setOnShowListener { - getButton(AlertDialog.BUTTON_POSITIVE).setTextColor(primaryColor); - getButton(AlertDialog.BUTTON_NEGATIVE).setTextColor(primaryColor); + getButton(AlertDialog.BUTTON_POSITIVE).setTextColor(primaryColor) + getButton(AlertDialog.BUTTON_NEGATIVE).setTextColor(primaryColor) } return this } diff --git a/ui/src/main/java/io/snabble/sdk/ui/remotetheme/SnabblePrimaryButton.kt b/ui/src/main/java/io/snabble/sdk/ui/remotetheme/SnabblePrimaryButton.kt index e8483532ae..8764d1eae4 100644 --- a/ui/src/main/java/io/snabble/sdk/ui/remotetheme/SnabblePrimaryButton.kt +++ b/ui/src/main/java/io/snabble/sdk/ui/remotetheme/SnabblePrimaryButton.kt @@ -69,7 +69,7 @@ class SnabblePrimaryButton @JvmOverloads constructor( val colors = intArrayOf( defaultDisabledBackgroundColor ?: currentBackgroundColor, - context.getPrimaryColorForProject(project) + context.primaryColorForProject(project) ) backgroundTintList = ColorStateList(states, colors) @@ -89,7 +89,7 @@ class SnabblePrimaryButton @JvmOverloads constructor( val colors = intArrayOf( defaultDisabledTextColor, - context.getOnPrimaryColorForProject(project) + context.onPrimaryColorForProject(project) ) setTextColor(ColorStateList(states, colors)) diff --git a/ui/src/main/java/io/snabble/sdk/ui/remotetheme/SnabblePrimaryTextView.kt b/ui/src/main/java/io/snabble/sdk/ui/remotetheme/SnabblePrimaryTextView.kt index e051ba1a74..c0a0763eed 100644 --- a/ui/src/main/java/io/snabble/sdk/ui/remotetheme/SnabblePrimaryTextView.kt +++ b/ui/src/main/java/io/snabble/sdk/ui/remotetheme/SnabblePrimaryTextView.kt @@ -22,6 +22,6 @@ class SnabblePrimaryTextView @JvmOverloads constructor( private fun setProjectAppTheme() { val project = Snabble.checkedInProject.value - setTextColor(context.getPrimaryColorForProject(project)) + setTextColor(context.primaryColorForProject(project)) } } diff --git a/ui/src/main/java/io/snabble/sdk/ui/remotetheme/SnabbleSecondaryButton.kt b/ui/src/main/java/io/snabble/sdk/ui/remotetheme/SnabbleSecondaryButton.kt index 7d515af2c0..d9627325bc 100644 --- a/ui/src/main/java/io/snabble/sdk/ui/remotetheme/SnabbleSecondaryButton.kt +++ b/ui/src/main/java/io/snabble/sdk/ui/remotetheme/SnabbleSecondaryButton.kt @@ -45,7 +45,7 @@ class SnabbleSecondaryButton @JvmOverloads constructor( val colors = intArrayOf( defaultDisabledTextColor, - context.getPrimaryColorForProject(project) + context.primaryColorForProject(project) ) setTextColor(ColorStateList(states, colors)) diff --git a/ui/src/main/java/io/snabble/sdk/ui/scanner/SelfScanningView.java b/ui/src/main/java/io/snabble/sdk/ui/scanner/SelfScanningView.java index 8065acdd07..2951000ed6 100644 --- a/ui/src/main/java/io/snabble/sdk/ui/scanner/SelfScanningView.java +++ b/ui/src/main/java/io/snabble/sdk/ui/scanner/SelfScanningView.java @@ -46,7 +46,7 @@ import io.snabble.sdk.ui.R; import io.snabble.sdk.ui.SnabbleUI; import io.snabble.sdk.ui.checkout.ViolationNotificationUtils; -import io.snabble.sdk.ui.remotetheme.RemoteThemingExtensionsKt; +import io.snabble.sdk.ui.remotetheme.RemoteThemingHelper; import io.snabble.sdk.ui.telemetry.Telemetry; import io.snabble.sdk.ui.utils.DelayedProgressDialog; import io.snabble.sdk.ui.utils.I18nUtils; @@ -336,8 +336,8 @@ public void searchWithBarcode() { final Project currentProject = Snabble.getInstance().getCheckedInProject().getLatestValue(); - RemoteThemingExtensionsKt - .setButtonColorFor(alertDialog,currentProject) + RemoteThemingHelper + .changeButtonColorFor(alertDialog,currentProject) .show(); input.requestFocus();