summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/SystemUI/res/values/colors.xml4
-rw-r--r--packages/SystemUI/res/values/dimens.xml12
-rw-r--r--packages/SystemUI/src/com/android/systemui/dreams/complication/DoubleShadowTextClock.java61
-rw-r--r--packages/SystemUI/src/com/android/systemui/dreams/complication/DoubleShadowTextHelper.kt61
-rw-r--r--packages/SystemUI/src/com/android/systemui/dreams/complication/DoubleShadowTextView.java76
5 files changed, 176 insertions, 38 deletions
diff --git a/packages/SystemUI/res/values/colors.xml b/packages/SystemUI/res/values/colors.xml
index c827e21a20e6..75baeeff6025 100644
--- a/packages/SystemUI/res/values/colors.xml
+++ b/packages/SystemUI/res/values/colors.xml
@@ -241,6 +241,10 @@
<color name="dream_overlay_aqi_very_unhealthy">#AD1457</color>
<color name="dream_overlay_aqi_hazardous">#880E4F</color>
<color name="dream_overlay_aqi_unknown">#BDC1C6</color>
+
+ <!-- Dream overlay text shadows -->
<color name="dream_overlay_clock_key_text_shadow_color">#4D000000</color>
<color name="dream_overlay_clock_ambient_text_shadow_color">#4D000000</color>
+ <color name="dream_overlay_status_bar_key_text_shadow_color">#66000000</color>
+ <color name="dream_overlay_status_bar_ambient_text_shadow_color">#59000000</color>
</resources>
diff --git a/packages/SystemUI/res/values/dimens.xml b/packages/SystemUI/res/values/dimens.xml
index 1b169e2e1a31..eb6c45747924 100644
--- a/packages/SystemUI/res/values/dimens.xml
+++ b/packages/SystemUI/res/values/dimens.xml
@@ -1547,10 +1547,20 @@
<dimen name="broadcast_dialog_btn_text_size">16sp</dimen>
<dimen name="broadcast_dialog_btn_minHeight">44dp</dimen>
<dimen name="broadcast_dialog_margin">16dp</dimen>
+
+ <!-- Shadow for dream overlay clock complication -->
<dimen name="dream_overlay_clock_key_text_shadow_dx">0dp</dimen>
<dimen name="dream_overlay_clock_key_text_shadow_dy">0dp</dimen>
- <dimen name="dream_overlay_clock_key_text_shadow_radius">5dp</dimen>
+ <dimen name="dream_overlay_clock_key_text_shadow_radius">3dp</dimen>
<dimen name="dream_overlay_clock_ambient_text_shadow_dx">0dp</dimen>
<dimen name="dream_overlay_clock_ambient_text_shadow_dy">0dp</dimen>
<dimen name="dream_overlay_clock_ambient_text_shadow_radius">1dp</dimen>
+
+ <!-- Shadow for dream overlay status bar complications -->
+ <dimen name="dream_overlay_status_bar_key_text_shadow_dx">0.5dp</dimen>
+ <dimen name="dream_overlay_status_bar_key_text_shadow_dy">0.5dp</dimen>
+ <dimen name="dream_overlay_status_bar_key_text_shadow_radius">1dp</dimen>
+ <dimen name="dream_overlay_status_bar_ambient_text_shadow_dx">0.5dp</dimen>
+ <dimen name="dream_overlay_status_bar_ambient_text_shadow_dy">0.5dp</dimen>
+ <dimen name="dream_overlay_status_bar_ambient_text_shadow_radius">2dp</dimen>
</resources>
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 653f4dc66200..789ebc517271 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 000000000000..b1dc5a2e5dea
--- /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 000000000000..cf7e3127dedf
--- /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;
+ });
+ }
+}