diff --git a/packages/SystemUI/res/values/colors.xml b/packages/SystemUI/res/values/colors.xml
index c827e21a20e61..75baeeff60259 100644
--- a/packages/SystemUI/res/values/colors.xml
+++ b/packages/SystemUI/res/values/colors.xml
@@ -241,6 +241,10 @@
#AD1457
#880E4F
#BDC1C6
+
+
#4D000000
#4D000000
+ #66000000
+ #59000000
diff --git a/packages/SystemUI/res/values/dimens.xml b/packages/SystemUI/res/values/dimens.xml
index 1b169e2e1a31e..eb6c457479245 100644
--- a/packages/SystemUI/res/values/dimens.xml
+++ b/packages/SystemUI/res/values/dimens.xml
@@ -1547,10 +1547,20 @@
16sp
44dp
16dp
+
+
0dp
0dp
- 5dp
+ 3dp
0dp
0dp
1dp
+
+
+ 0.5dp
+ 0.5dp
+ 1dp
+ 0.5dp
+ 0.5dp
+ 2dp
diff --git a/packages/SystemUI/src/com/android/systemui/dreams/complication/DoubleShadowTextClock.java b/packages/SystemUI/src/com/android/systemui/dreams/complication/DoubleShadowTextClock.java
index 653f4dc662004..789ebc5172714 100644
--- a/packages/SystemUI/src/com/android/systemui/dreams/complication/DoubleShadowTextClock.java
+++ b/packages/SystemUI/src/com/android/systemui/dreams/complication/DoubleShadowTextClock.java
@@ -17,24 +17,21 @@
package com.android.systemui.dreams.complication;
import android.content.Context;
+import android.content.res.Resources;
import android.graphics.Canvas;
import android.util.AttributeSet;
import android.widget.TextClock;
import com.android.systemui.R;
+import com.android.systemui.dreams.complication.DoubleShadowTextHelper.ShadowInfo;
+
+import kotlin.Unit;
/**
* Extension of {@link TextClock} which draws two shadows on the text (ambient and key shadows)
*/
public class DoubleShadowTextClock extends TextClock {
- private final float mAmbientShadowBlur;
- private final int mAmbientShadowColor;
- private final float mKeyShadowBlur;
- private final float mKeyShadowOffsetX;
- private final float mKeyShadowOffsetY;
- private final int mKeyShadowColor;
- private final float mAmbientShadowOffsetX;
- private final float mAmbientShadowOffsetY;
+ private final DoubleShadowTextHelper mShadowHelper;
public DoubleShadowTextClock(Context context) {
this(context, null);
@@ -46,38 +43,28 @@ public class DoubleShadowTextClock extends TextClock {
public DoubleShadowTextClock(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
- mKeyShadowBlur = context.getResources()
- .getDimensionPixelSize(R.dimen.dream_overlay_clock_key_text_shadow_radius);
- mKeyShadowOffsetX = context.getResources()
- .getDimensionPixelSize(R.dimen.dream_overlay_clock_key_text_shadow_dx);
- mKeyShadowOffsetY = context.getResources()
- .getDimensionPixelSize(R.dimen.dream_overlay_clock_key_text_shadow_dy);
- mKeyShadowColor = context.getResources().getColor(
- R.color.dream_overlay_clock_key_text_shadow_color);
- mAmbientShadowBlur = context.getResources()
- .getDimensionPixelSize(R.dimen.dream_overlay_clock_ambient_text_shadow_radius);
- mAmbientShadowColor = context.getResources().getColor(
- R.color.dream_overlay_clock_ambient_text_shadow_color);
- mAmbientShadowOffsetX = context.getResources()
- .getDimensionPixelSize(R.dimen.dream_overlay_clock_ambient_text_shadow_dx);
- mAmbientShadowOffsetY = context.getResources()
- .getDimensionPixelSize(R.dimen.dream_overlay_clock_ambient_text_shadow_dy);
+
+ final Resources resources = context.getResources();
+ final ShadowInfo keyShadowInfo = new ShadowInfo(
+ resources.getDimensionPixelSize(R.dimen.dream_overlay_clock_key_text_shadow_radius),
+ resources.getDimensionPixelSize(R.dimen.dream_overlay_clock_key_text_shadow_dx),
+ resources.getDimensionPixelSize(R.dimen.dream_overlay_clock_key_text_shadow_dy),
+ resources.getColor(R.color.dream_overlay_clock_key_text_shadow_color));
+
+ final ShadowInfo ambientShadowInfo = new ShadowInfo(
+ resources.getDimensionPixelSize(
+ R.dimen.dream_overlay_clock_ambient_text_shadow_radius),
+ resources.getDimensionPixelSize(R.dimen.dream_overlay_clock_ambient_text_shadow_dx),
+ resources.getDimensionPixelSize(R.dimen.dream_overlay_clock_ambient_text_shadow_dy),
+ resources.getColor(R.color.dream_overlay_clock_ambient_text_shadow_color));
+ mShadowHelper = new DoubleShadowTextHelper(keyShadowInfo, ambientShadowInfo);
}
@Override
public void onDraw(Canvas canvas) {
- // We enhance the shadow by drawing the shadow twice
- getPaint().setShadowLayer(mAmbientShadowBlur, mAmbientShadowOffsetX, mAmbientShadowOffsetY,
- mAmbientShadowColor);
- super.onDraw(canvas);
- canvas.save();
- canvas.clipRect(getScrollX(), getScrollY() + getExtendedPaddingTop(),
- getScrollX() + getWidth(),
- getScrollY() + getHeight());
-
- getPaint().setShadowLayer(
- mKeyShadowBlur, mKeyShadowOffsetX, mKeyShadowOffsetY, mKeyShadowColor);
- super.onDraw(canvas);
- canvas.restore();
+ mShadowHelper.applyShadows(this, canvas, () -> {
+ super.onDraw(canvas);
+ return Unit.INSTANCE;
+ });
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/dreams/complication/DoubleShadowTextHelper.kt b/packages/SystemUI/src/com/android/systemui/dreams/complication/DoubleShadowTextHelper.kt
new file mode 100644
index 0000000000000..b1dc5a2e5deab
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/dreams/complication/DoubleShadowTextHelper.kt
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.dreams.complication
+
+import android.graphics.Canvas
+import android.widget.TextView
+import androidx.annotation.ColorInt
+
+class DoubleShadowTextHelper
+constructor(
+ private val keyShadowInfo: ShadowInfo,
+ private val ambientShadowInfo: ShadowInfo,
+) {
+ data class ShadowInfo(
+ val blur: Float,
+ val offsetX: Float = 0f,
+ val offsetY: Float = 0f,
+ @ColorInt val color: Int
+ )
+
+ fun applyShadows(view: TextView, canvas: Canvas, onDrawCallback: () -> Unit) {
+ // We enhance the shadow by drawing the shadow twice
+ view.paint.setShadowLayer(
+ ambientShadowInfo.blur,
+ ambientShadowInfo.offsetX,
+ ambientShadowInfo.offsetY,
+ ambientShadowInfo.color
+ )
+ onDrawCallback()
+ canvas.save()
+ canvas.clipRect(
+ view.scrollX,
+ view.scrollY + view.extendedPaddingTop,
+ view.scrollX + view.width,
+ view.scrollY + view.height
+ )
+
+ view.paint.setShadowLayer(
+ keyShadowInfo.blur,
+ keyShadowInfo.offsetX,
+ keyShadowInfo.offsetY,
+ keyShadowInfo.color
+ )
+ onDrawCallback()
+ canvas.restore()
+ }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/dreams/complication/DoubleShadowTextView.java b/packages/SystemUI/src/com/android/systemui/dreams/complication/DoubleShadowTextView.java
new file mode 100644
index 0000000000000..cf7e3127dedf7
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/dreams/complication/DoubleShadowTextView.java
@@ -0,0 +1,76 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.dreams.complication;
+
+import android.content.Context;
+import android.content.res.Resources;
+import android.graphics.Canvas;
+import android.util.AttributeSet;
+import android.widget.TextView;
+
+import com.android.systemui.R;
+
+import kotlin.Unit;
+
+/**
+ * Extension of {@link TextView} which draws two shadows on the text (ambient and key shadows}
+ */
+public class DoubleShadowTextView extends TextView {
+ private final DoubleShadowTextHelper mShadowHelper;
+
+ public DoubleShadowTextView(Context context) {
+ this(context, null);
+ }
+
+ public DoubleShadowTextView(Context context, AttributeSet attrs) {
+ this(context, attrs, 0);
+ }
+
+ public DoubleShadowTextView(Context context, AttributeSet attrs, int defStyle) {
+ super(context, attrs, defStyle);
+
+ final Resources resources = context.getResources();
+ final DoubleShadowTextHelper.ShadowInfo
+ keyShadowInfo = new DoubleShadowTextHelper.ShadowInfo(
+ resources.getDimensionPixelSize(
+ R.dimen.dream_overlay_status_bar_key_text_shadow_radius),
+ resources.getDimensionPixelSize(
+ R.dimen.dream_overlay_status_bar_key_text_shadow_dx),
+ resources.getDimensionPixelSize(
+ R.dimen.dream_overlay_status_bar_key_text_shadow_dy),
+ resources.getColor(R.color.dream_overlay_status_bar_key_text_shadow_color));
+
+ final DoubleShadowTextHelper.ShadowInfo
+ ambientShadowInfo = new DoubleShadowTextHelper.ShadowInfo(
+ resources.getDimensionPixelSize(
+ R.dimen.dream_overlay_status_bar_ambient_text_shadow_radius),
+ resources.getDimensionPixelSize(
+ R.dimen.dream_overlay_status_bar_ambient_text_shadow_dx),
+ resources.getDimensionPixelSize(
+ R.dimen.dream_overlay_status_bar_ambient_text_shadow_dy),
+ resources.getColor(R.color.dream_overlay_status_bar_ambient_text_shadow_color));
+ mShadowHelper = new DoubleShadowTextHelper(keyShadowInfo, ambientShadowInfo);
+ }
+
+ @Override
+ public void onDraw(Canvas canvas) {
+ mShadowHelper.applyShadows(this, canvas, () -> {
+ super.onDraw(canvas);
+ return Unit.INSTANCE;
+ });
+ }
+}