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"