Home Controls: Add chevron icon

Add chevron icon to control viewholder if usePanel is true.

Fixes: 218708482
Test: Manual
Change-Id: Id873aabd907a6eb711b38b92f5520cc527679e89
This commit is contained in:
Aaron Liu
2022-02-10 18:52:35 +00:00
parent f240e0b7c3
commit 12572a7404
5 changed files with 70 additions and 4 deletions

View File

@@ -0,0 +1,28 @@
<!--
~ 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.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="18dp"
android:height="31dp"
android:viewportWidth="18"
android:viewportHeight="31">
<path
android:pathData="M0.0061,27.8986L2.6906,30.5831L17.9219,15.3518L2.6906,0.1206L0.0061,2.8051L12.5338,15.3518"
android:strokeAlpha="0.7"
android:fillColor="#FFFFFF"
android:fillAlpha="0.7"/>
</vector>

View File

@@ -113,4 +113,16 @@
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toBottomOf="parent"/>
<ImageView
android:id="@+id/chevron_icon"
android:autoMirrored="true"
android:src="@drawable/ic_chevron_icon"
android:visibility="invisible"
android:layout_width="@dimen/control_chevron_icon_size"
android:layout_height="@dimen/control_chevron_icon_size"
android:clickable="false"
android:focusable="false"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -1038,6 +1038,7 @@
<dimen name="control_spinner_padding_horizontal">20dp</dimen>
<dimen name="control_text_size">14sp</dimen>
<dimen name="control_icon_size">24dp</dimen>
<dimen name="control_chevron_icon_size">20dp</dimen>
<dimen name="control_spacing">8dp</dimen>
<dimen name="control_list_divider">1dp</dimen>
<dimen name="control_corner_radius">14dp</dimen>

View File

@@ -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)

View File

@@ -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<View>(R.id.chevron_icon)
assertThat(chevronIcon.visibility).isEqualTo(View.VISIBLE)
}
}
private const val CONTROL_ID = "CONTROL_ID"