Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion core/src/main/java/io/snabble/sdk/Snabble.kt
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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));
Expand Down Expand Up @@ -118,8 +118,8 @@ public void click() {
.setCancelable(false)
.show();

RemoteThemingExtensionsKt
.setButtonColorFor(alertDialog, currentProject)
RemoteThemingHelper
.changeButtonColorFor(alertDialog, currentProject)
.show();
}
}
Expand Down Expand Up @@ -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());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -78,7 +78,7 @@ object PaymentInputViewHelper {
val currentProject = Snabble.instance.checkedInProject.value

alertDialog
.setButtonColorFor(currentProject)
.changeButtonColorFor(currentProject)
.show()
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
@file:JvmName("RemoteThemingHelper")

package io.snabble.sdk.ui.remotetheme

import android.content.Context
Expand All @@ -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)
Expand All @@ -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
}
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ class SnabblePrimaryButton @JvmOverloads constructor(

val colors = intArrayOf(
defaultDisabledBackgroundColor ?: currentBackgroundColor,
context.getPrimaryColorForProject(project)
context.primaryColorForProject(project)
)

backgroundTintList = ColorStateList(states, colors)
Expand All @@ -89,7 +89,7 @@ class SnabblePrimaryButton @JvmOverloads constructor(

val colors = intArrayOf(
defaultDisabledTextColor,
context.getOnPrimaryColorForProject(project)
context.onPrimaryColorForProject(project)
)

setTextColor(ColorStateList(states, colors))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,6 @@ class SnabblePrimaryTextView @JvmOverloads constructor(

private fun setProjectAppTheme() {
val project = Snabble.checkedInProject.value
setTextColor(context.getPrimaryColorForProject(project))
setTextColor(context.primaryColorForProject(project))
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ class SnabbleSecondaryButton @JvmOverloads constructor(

val colors = intArrayOf(
defaultDisabledTextColor,
context.getPrimaryColorForProject(project)
context.primaryColorForProject(project)
)

setTextColor(ColorStateList(states, colors))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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();
Expand Down