diff --git a/app/src/main/java/com/aurora/extensions/Commons.kt b/app/src/main/java/com/aurora/extensions/Commons.kt index af88aebbf..90c2b48a4 100644 --- a/app/src/main/java/com/aurora/extensions/Commons.kt +++ b/app/src/main/java/com/aurora/extensions/Commons.kt @@ -19,11 +19,14 @@ package com.aurora.extensions +import android.graphics.Color import android.text.format.DateFormat +import androidx.annotation.ColorInt import java.io.PrintWriter import java.io.StringWriter import java.util.Calendar import java.util.Locale +import javax.annotation.Nullable fun Long.toDate(): String { val calendar = Calendar.getInstance(Locale.getDefault()) @@ -42,4 +45,51 @@ fun Throwable.stackTraceToString(): String { fun isValidPackageName(packageName: String): Boolean { val packageRegex = "^[a-zA-Z][a-zA-Z0-9_]*(\\.[a-zA-Z][a-zA-Z0-9_]*)*$".toRegex() return packageName.matches(packageRegex) +} + +/** + * Computes a darker color from the given color. + * @param color The color to darken. + * @param factor The factor to darken the color by. + * - higher factor values will result in a lighter color. + * @return The darker color. + */ +fun darkenColor(@ColorInt color: Int, factor: Float = 0.25f): Int { + val a = Color.alpha(color) + val r = (Color.red(color) * factor).coerceIn(0f, 255f).toInt() + val g = (Color.green(color) * factor).coerceIn(0f, 255f).toInt() + val b = (Color.blue(color) * factor).coerceIn(0f, 255f).toInt() + + return Color.argb(a, r, g, b) +} + +/** + * Computes a lighter color from the given color. + * @param color The color to lighten. + * @param factor The factor to lighten the color by. + * - higher factor values will result in a lighter color. + * @param alpha The alpha value to use for the lighter color. + * @return The lighter color. + */ +fun lightenColor(@ColorInt color: Int, factor: Float = 0.5f, @Nullable alpha: Int? = null): Int { + val a = alpha ?: Color.alpha(color) + val r = (Color.red(color) + (255 - Color.red(color)) * factor).toInt() + val g = (Color.green(color) + (255 - Color.green(color)) * factor).toInt() + val b = (Color.blue(color) + (255 - Color.blue(color)) * factor).toInt() + + return Color.argb(a, r, g, b) +} + +/** + * Computes a contrasting color from the given color. + * @param color The color to contrast. + * @return The contrasting color. + */ +fun contrastingColor(@ColorInt color: Int): Int { + val red = Color.red(color) + val green = Color.green(color) + val blue = Color.blue(color) + val yiq = ((red * 299) + (green * 587) + (blue * 114)) / 1000 + + return if (yiq >= 128) Color.BLACK else Color.WHITE } \ No newline at end of file diff --git a/app/src/main/java/com/aurora/store/view/custom/layouts/button/UpdateButton.kt b/app/src/main/java/com/aurora/store/view/custom/layouts/button/UpdateButton.kt index 49ba8a8fe..95a7dcff3 100644 --- a/app/src/main/java/com/aurora/store/view/custom/layouts/button/UpdateButton.kt +++ b/app/src/main/java/com/aurora/store/view/custom/layouts/button/UpdateButton.kt @@ -20,9 +20,13 @@ package com.aurora.store.view.custom.layouts.button import android.content.Context +import android.content.res.ColorStateList import android.util.AttributeSet import android.widget.RelativeLayout +import com.aurora.extensions.accentColor +import com.aurora.extensions.darkenColor import com.aurora.extensions.getString +import com.aurora.extensions.lightenColor import com.aurora.extensions.runOnUiThread import com.aurora.store.R import com.aurora.store.data.model.DownloadStatus @@ -51,6 +55,15 @@ class UpdateButton : RelativeLayout { private fun init(context: Context) { val view = inflate(context, R.layout.view_update_button, this) binding = ViewUpdateButtonBinding.bind(view) + + // Apply primaryColor tint to all buttons with alpha + val alphaAccent = lightenColor(context.accentColor(), alpha = 200) + binding.btnPositive.backgroundTintList = ColorStateList.valueOf(alphaAccent) + binding.btnNegative.backgroundTintList = ColorStateList.valueOf(alphaAccent) + + val textColor = darkenColor(context.accentColor()) + binding.btnPositive.setTextColor(textColor) + binding.btnNegative.setTextColor(textColor) } fun setText(text: String) { @@ -65,9 +78,8 @@ class UpdateButton : RelativeLayout { fun updateState(downloadStatus: DownloadStatus) { val displayChild = when (downloadStatus) { - DownloadStatus.QUEUED, + DownloadStatus.QUEUED -> 1 DownloadStatus.DOWNLOADING -> 2 - else -> 0 } diff --git a/app/src/main/java/com/aurora/store/view/epoxy/views/UpdateHeaderView.kt b/app/src/main/java/com/aurora/store/view/epoxy/views/UpdateHeaderView.kt index 8faaf1a90..0452a4ebd 100644 --- a/app/src/main/java/com/aurora/store/view/epoxy/views/UpdateHeaderView.kt +++ b/app/src/main/java/com/aurora/store/view/epoxy/views/UpdateHeaderView.kt @@ -25,6 +25,8 @@ import com.airbnb.epoxy.CallbackProp import com.airbnb.epoxy.ModelProp import com.airbnb.epoxy.ModelView import com.airbnb.epoxy.OnViewRecycled +import com.aurora.extensions.accentColor +import com.aurora.extensions.contrastingColor import com.aurora.store.databinding.ViewHeaderUpdateBinding @@ -46,6 +48,7 @@ class UpdateHeaderView @JvmOverloads constructor( @ModelProp fun action(action: String) { binding.btnAction.text = action + binding.btnAction.setTextColor(contrastingColor(context.accentColor())) } @CallbackProp diff --git a/app/src/main/res/layout/view_app_update.xml b/app/src/main/res/layout/view_app_update.xml index 04368ff7b..8e421cd53 100644 --- a/app/src/main/res/layout/view_app_update.xml +++ b/app/src/main/res/layout/view_app_update.xml @@ -106,6 +106,7 @@ android:layout_alignTop="@id/txt_line1" android:layout_toStartOf="@id/btn_action" android:contentDescription="@string/details_changelog" + app:iconTint="?colorControlNormal" app:icon="@drawable/ic_arrow_down" /> + android:text="@string/action_update_all" + android:textAppearance="@style/TextAppearance.Aurora.Line1" /> diff --git a/app/src/main/res/layout/view_state_button.xml b/app/src/main/res/layout/view_state_button.xml index ba6bdd0db..5d0637c62 100644 --- a/app/src/main/res/layout/view_state_button.xml +++ b/app/src/main/res/layout/view_state_button.xml @@ -25,14 +25,16 @@ diff --git a/app/src/main/res/layout/view_update_button.xml b/app/src/main/res/layout/view_update_button.xml index 18a0bccbe..366a5efb0 100644 --- a/app/src/main/res/layout/view_update_button.xml +++ b/app/src/main/res/layout/view_update_button.xml @@ -36,6 +36,7 @@ - - - - -