diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/RingView.kt b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/RingView.kt index 870097800..afffc2b05 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/RingView.kt +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/RingView.kt @@ -215,4 +215,16 @@ class RingView : View { companion object { val XFERMODE_CLEAR = PorterDuffXfermode(PorterDuff.Mode.CLEAR) } + + fun hide() { + this.visibility = GONE + } + + fun show() { + this.visibility = VISIBLE + } + + fun makeInvisible(){ + this.visibility = INVISIBLE + } } diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/widgets/views/CheckmarkWidgetView.kt b/uhabits-android/src/main/java/org/isoron/uhabits/widgets/views/CheckmarkWidgetView.kt index 6515542b0..ebb06a95c 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/widgets/views/CheckmarkWidgetView.kt +++ b/uhabits-android/src/main/java/org/isoron/uhabits/widgets/views/CheckmarkWidgetView.kt @@ -23,6 +23,10 @@ import android.util.AttributeSet import android.util.TypedValue import android.view.View import android.widget.TextView +import androidx.core.graphics.ColorUtils.blendARGB +import com.google.android.material.color.utilities.MathUtils.lerp +import org.isoron.platform.gui.Color +import org.isoron.platform.gui.toInt import org.isoron.uhabits.HabitsApplication import org.isoron.uhabits.R import org.isoron.uhabits.activities.common.views.RingView @@ -67,21 +71,26 @@ class CheckmarkWidgetView : HabitWidgetView { val bgColor: Int val fgColor: Int setShadowAlpha(0x4f) - when (entryState) { - YES_MANUAL, SKIP -> { - bgColor = activeColor - fgColor = res.getColor(R.attr.contrast0) - backgroundPaint!!.color = bgColor - frame!!.setBackgroundDrawable(background) - } - YES_AUTO, NO, UNKNOWN -> { - bgColor = res.getColor(R.attr.cardBgColor) - fgColor = res.getColor(R.attr.contrast60) - } - else -> { - bgColor = res.getColor(R.attr.cardBgColor) - fgColor = res.getColor(R.attr.contrast60) - } + + if(entryState == YES_MANUAL || entryState == SKIP) { + bgColor = activeColor + fgColor = res.getColor(R.attr.contrast0) + backgroundPaint!!.color = bgColor + frame!!.setBackgroundDrawable(background) + } else if(preferences!!.widgetCheckmarkTinting && entryState == YES_AUTO) { + bgColor = blendARGB(activeColor, res.getColor(R.attr.cardBgColor), 0.5f) + fgColor = res.getColor(R.attr.contrast0) + backgroundPaint!!.color = bgColor + frame!!.setBackgroundDrawable(background) + } else { + bgColor = res.getColor(R.attr.cardBgColor) + fgColor = res.getColor(R.attr.contrast60) + } + + if(preferences!!.widgetCheckmarkHideRing) { + ring.hide() + } else { + ring.show() } ring.setPercentage(percentage) ring.setColor(fgColor) diff --git a/uhabits-android/src/main/res/values/strings.xml b/uhabits-android/src/main/res/values/strings.xml index 9fec1cbca..ef130bc53 100644 --- a/uhabits-android/src/main/res/values/strings.xml +++ b/uhabits-android/src/main/res/values/strings.xml @@ -233,4 +233,8 @@ No app was found to support this action Extend day a few hours past midnight Wait until 3:00 AM to show a new day. Useful if you typically go to sleep after midnight. Requires app restart. + Checkmark widget tinting + Tints the checkmark widget on days where a habit is paused or auto-filled. + Hides the ring display within the checkmark widget. + Hide ring in checkmark widget diff --git a/uhabits-android/src/main/res/xml/preferences.xml b/uhabits-android/src/main/res/xml/preferences.xml index ad381b502..f3937ed12 100644 --- a/uhabits-android/src/main/res/xml/preferences.xml +++ b/uhabits-android/src/main/res/xml/preferences.xml @@ -76,6 +76,24 @@ android:title="@string/widget_opacity_title" app:iconSpaceReserved="false" /> + +