summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Steven Ng <stevenckng@google.com> 2025-01-27 18:21:30 +0000
committer Steven Ng <stevenckng@google.com> 2025-01-28 14:17:31 +0000
commitf5f13228909bf94be25d4f64a91aac4a443e9a83 (patch)
tree0b4b668673000fdc17c780f5e851a6529d6b892d
parentf02e481ac9399365fb0fe88b92b94823ee3e53d5 (diff)
Update GradientColorWallpaper to match the hub mode background
Flag: android.app.enable_connected_displays_wallpaper Test: atest SystemUITests:GradientColorWallpaperTest Bug: 384519696 Change-Id: Ie5b47faddaea0ef96c564f53bdb6722332eeb8d5
-rw-r--r--packages/SystemUI/multivalentTests/src/com/android/systemui/wallpapers/GradientColorWallpaperTest.kt16
-rw-r--r--packages/SystemUI/res/values/dimens.xml4
-rw-r--r--packages/SystemUI/src/com/android/systemui/wallpapers/GradientColorWallpaper.kt57
3 files changed, 76 insertions, 1 deletions
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/wallpapers/GradientColorWallpaperTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/wallpapers/GradientColorWallpaperTest.kt
index 89410593fe62..b4fbaad6ab37 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/wallpapers/GradientColorWallpaperTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/wallpapers/GradientColorWallpaperTest.kt
@@ -18,6 +18,7 @@ package com.android.systemui.wallpapers
import android.app.Flags
import android.content.Context
+import android.content.res.Resources
import android.graphics.Canvas
import android.graphics.Paint
import android.graphics.Rect
@@ -31,14 +32,18 @@ import android.view.SurfaceHolder
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.android.systemui.SysuiTestCase
+import com.android.systemui.res.R
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
+import org.mockito.ArgumentMatchers.anyFloat
import org.mockito.ArgumentMatchers.anyInt
+import org.mockito.ArgumentMatchers.eq
import org.mockito.Mock
import org.mockito.Mockito.spy
import org.mockito.MockitoAnnotations
import org.mockito.kotlin.any
+import org.mockito.kotlin.times
import org.mockito.kotlin.verify
import org.mockito.kotlin.verifyZeroInteractions
import org.mockito.kotlin.whenever
@@ -56,6 +61,8 @@ class GradientColorWallpaperTest : SysuiTestCase() {
@Mock private lateinit var mockContext: Context
+ @Mock private lateinit var mockResources: Resources
+
@Before
fun setUp() {
MockitoAnnotations.initMocks(this)
@@ -64,6 +71,13 @@ class GradientColorWallpaperTest : SysuiTestCase() {
whenever(surfaceHolder.surfaceFrame).thenReturn(surfaceFrame)
whenever(surface.lockHardwareCanvas()).thenReturn(canvas)
whenever(mockContext.getColor(anyInt())).thenReturn(1)
+ whenever(mockContext.resources).thenReturn(mockResources)
+ whenever(
+ mockResources.getDimensionPixelOffset(
+ eq(R.dimen.gradient_color_wallpaper_center_offset)
+ )
+ )
+ .thenReturn(OFFSET_PX)
}
private fun createGradientColorWallpaperEngine(): Engine {
@@ -93,9 +107,11 @@ class GradientColorWallpaperTest : SysuiTestCase() {
engine.onSurfaceRedrawNeeded(surfaceHolder)
verify(canvas).drawRect(any<RectF>(), any<Paint>())
+ verify(canvas, times(2)).drawCircle(anyFloat(), anyFloat(), anyFloat(), any<Paint>())
}
private companion object {
val surfaceFrame = Rect(0, 0, 100, 100)
+ const val OFFSET_PX = 100
}
}
diff --git a/packages/SystemUI/res/values/dimens.xml b/packages/SystemUI/res/values/dimens.xml
index 724a12c12490..d6de203b0564 100644
--- a/packages/SystemUI/res/values/dimens.xml
+++ b/packages/SystemUI/res/values/dimens.xml
@@ -2138,4 +2138,8 @@
<dimen name="volume_panel_slice_vertical_padding">8dp</dimen>
<dimen name="volume_panel_slice_horizontal_padding">24dp</dimen>
<!-- Volume end -->
+
+ <!-- Gradient color wallpaper start -->
+ <dimen name="gradient_color_wallpaper_center_offset">128dp</dimen>
+ <!-- Gradient color wallpaper end -->
</resources>
diff --git a/packages/SystemUI/src/com/android/systemui/wallpapers/GradientColorWallpaper.kt b/packages/SystemUI/src/com/android/systemui/wallpapers/GradientColorWallpaper.kt
index 760e94c72f19..33e1929ebf8b 100644
--- a/packages/SystemUI/src/com/android/systemui/wallpapers/GradientColorWallpaper.kt
+++ b/packages/SystemUI/src/com/android/systemui/wallpapers/GradientColorWallpaper.kt
@@ -19,10 +19,14 @@ package com.android.systemui.wallpapers
import android.app.Flags
import android.graphics.Canvas
import android.graphics.Paint
+import android.graphics.RadialGradient
+import android.graphics.Shader
import android.service.wallpaper.WallpaperService
import android.util.Log
import android.view.SurfaceHolder
+import androidx.core.graphics.ColorUtils
import androidx.core.graphics.toRectF
+import com.android.systemui.res.R
/** A wallpaper that shows a static gradient color image wallpaper. */
class GradientColorWallpaper : WallpaperService() {
@@ -54,9 +58,60 @@ class GradientColorWallpaper : WallpaperService() {
canvas = surface.lockHardwareCanvas()
val destRectF = surfaceHolder.surfaceFrame.toRectF()
val toColor = context.getColor(com.android.internal.R.color.materialColorPrimary)
+ val fromColor =
+ ColorUtils.setAlphaComponent(
+ context.getColor(
+ com.android.internal.R.color.materialColorPrimaryContainer
+ ),
+ /* alpha= */ 153, // 0.6f * 255
+ )
- // TODO(b/384519696): Draw the actual gradient color wallpaper instead.
canvas.drawRect(destRectF, Paint().apply { color = toColor })
+
+ val offsetPx: Float =
+ context.resources
+ .getDimensionPixelSize(R.dimen.gradient_color_wallpaper_center_offset)
+ .toFloat()
+ val totalHeight = destRectF.height() + (offsetPx * 2)
+ val leftCenterX = -offsetPx
+ val leftCenterY = -offsetPx
+ val rightCenterX = offsetPx + destRectF.width()
+ val rightCenterY = totalHeight - offsetPx
+ val radius = (destRectF.width() / 2) + offsetPx
+
+ canvas.drawCircle(
+ leftCenterX,
+ leftCenterY,
+ radius,
+ Paint().apply {
+ shader =
+ RadialGradient(
+ /* centerX= */ leftCenterX,
+ /* centerY= */ leftCenterY,
+ /* radius= */ radius,
+ /* centerColor= */ fromColor,
+ /* edgeColor= */ toColor,
+ /* tileMode= */ Shader.TileMode.CLAMP,
+ )
+ },
+ )
+
+ canvas.drawCircle(
+ rightCenterX,
+ rightCenterY,
+ radius,
+ Paint().apply {
+ shader =
+ RadialGradient(
+ /* centerX= */ rightCenterX,
+ /* centerY= */ rightCenterY,
+ /* radius= */ radius,
+ /* centerColor= */ fromColor,
+ /* edgeColor= */ toColor,
+ /* tileMode= */ Shader.TileMode.CLAMP,
+ )
+ },
+ )
} catch (exception: IllegalStateException) {
Log.d(TAG, "Fail to draw in the canvas", exception)
} finally {