diff --git a/packages/SystemUI/res/drawable/ic_chevron_icon.xml b/packages/SystemUI/res/drawable/ic_chevron_icon.xml
new file mode 100644
index 0000000000000..acbbbcb21503f
--- /dev/null
+++ b/packages/SystemUI/res/drawable/ic_chevron_icon.xml
@@ -0,0 +1,28 @@
+
+
+
+
+
+
diff --git a/packages/SystemUI/res/layout/controls_base_item.xml b/packages/SystemUI/res/layout/controls_base_item.xml
index 5d80da8cb9aae..e1dbe695bd0e1 100644
--- a/packages/SystemUI/res/layout/controls_base_item.xml
+++ b/packages/SystemUI/res/layout/controls_base_item.xml
@@ -113,4 +113,16 @@
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toBottomOf="parent"/>
+
diff --git a/packages/SystemUI/res/values/dimens.xml b/packages/SystemUI/res/values/dimens.xml
index a08d824b837e2..3704134007663 100644
--- a/packages/SystemUI/res/values/dimens.xml
+++ b/packages/SystemUI/res/values/dimens.xml
@@ -1038,6 +1038,7 @@
20dp
14sp
24dp
+ 20dp
8dp
1dp
14dp
diff --git a/packages/SystemUI/src/com/android/systemui/controls/ui/ControlViewHolder.kt b/packages/SystemUI/src/com/android/systemui/controls/ui/ControlViewHolder.kt
index 47e749cd11851..4819bf565cbce 100644
--- a/packages/SystemUI/src/com/android/systemui/controls/ui/ControlViewHolder.kt
+++ b/packages/SystemUI/src/com/android/systemui/controls/ui/ControlViewHolder.kt
@@ -118,6 +118,7 @@ class ControlViewHolder(
private var nextStatusText: CharSequence = ""
val title: TextView = layout.requireViewById(R.id.title)
val subtitle: TextView = layout.requireViewById(R.id.subtitle)
+ val chevronIcon: ImageView = layout.requireViewById(R.id.chevron_icon)
val context: Context = layout.getContext()
val clipLayer: ClipDrawable
lateinit var cws: ControlWithState
@@ -163,6 +164,7 @@ class ControlViewHolder(
cws.control?.let {
title.setText(it.title)
subtitle.setText(it.subtitle)
+ chevronIcon.visibility = if (usePanel()) View.VISIBLE else View.INVISIBLE
}
}
@@ -469,6 +471,7 @@ class ControlViewHolder(
updateContentDescription()
status.setTextColor(color)
+ chevronIcon.imageTintList = color
control?.getCustomIcon()?.let {
icon.setImageIcon(it)
diff --git a/packages/SystemUI/tests/src/com/android/systemui/controls/ui/ControlViewHolderTest.kt b/packages/SystemUI/tests/src/com/android/systemui/controls/ui/ControlViewHolderTest.kt
index 47ab17dd7ed00..d3c465dab4386 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/controls/ui/ControlViewHolderTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/controls/ui/ControlViewHolderTest.kt
@@ -23,22 +23,24 @@ import android.graphics.drawable.GradientDrawable
import android.graphics.drawable.Icon
import android.service.controls.Control
import android.service.controls.DeviceTypes
+import android.service.controls.templates.ControlTemplate
import android.testing.AndroidTestingRunner
import android.testing.TestableLooper
import android.view.LayoutInflater
+import android.view.View
import android.view.ViewGroup
import androidx.test.filters.SmallTest
import com.android.systemui.R
-import com.android.systemui.controls.controller.ControlsController
-import com.android.systemui.util.time.FakeSystemClock
-import org.junit.runner.RunWith
import com.android.systemui.SysuiTestCase
import com.android.systemui.controls.ControlsMetricsLogger
import com.android.systemui.controls.controller.ControlInfo
+import com.android.systemui.controls.controller.ControlsController
import com.android.systemui.util.concurrency.FakeExecutor
+import com.android.systemui.util.time.FakeSystemClock
import com.google.common.truth.Truth.assertThat
import org.junit.Before
import org.junit.Test
+import org.junit.runner.RunWith
import org.mockito.Mockito.mock
@SmallTest
@@ -49,11 +51,12 @@ class ControlViewHolderTest : SysuiTestCase() {
private val clock = FakeSystemClock()
private lateinit var cvh: ControlViewHolder
+ private lateinit var baseLayout: ViewGroup
@Before
fun setUp() {
TestableLooper.get(this).runWithLooper {
- val baseLayout = LayoutInflater.from(mContext).inflate(
+ baseLayout = LayoutInflater.from(mContext).inflate(
R.layout.controls_base_item, null, false) as ViewGroup
cvh = ControlViewHolder(
@@ -106,6 +109,25 @@ class ControlViewHolderTest : SysuiTestCase() {
assertThat(cvh.icon.imageTintList).isEqualTo(customIconTintList)
}
+
+ @Test
+ fun chevronIcon() {
+ val control = Control.StatefulBuilder(CONTROL_ID, mock(PendingIntent::class.java))
+ .setStatus(Control.STATUS_OK)
+ .setControlTemplate(ControlTemplate.NO_TEMPLATE)
+ .build()
+ val cws = ControlWithState(
+ ComponentName.createRelative("pkg", "cls"),
+ ControlInfo(
+ CONTROL_ID, CONTROL_TITLE, "subtitle", DeviceTypes.TYPE_AIR_FRESHENER
+ ),
+ control
+ )
+ cvh.bindData(cws, false)
+ val chevronIcon = baseLayout.findViewById(R.id.chevron_icon)
+
+ assertThat(chevronIcon.visibility).isEqualTo(View.VISIBLE)
+ }
}
private const val CONTROL_ID = "CONTROL_ID"