summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author TreeHugger Robot <treehugger-gerrit@google.com> 2020-04-16 19:25:23 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2020-04-16 19:25:23 +0000
commit56cd4dcad580061f53b938dc48fa7933614dff0f (patch)
treec3333bf5c1beaa8de58cc8c0c18f3a0b23e6306a
parent3875de7c940385938a77d86d5d42a011bc154692 (diff)
parentd60b33275e4578741ee8056d9dcfeac2d8f12cf3 (diff)
Merge "Dim down controls when slider is active" into rvc-dev
-rw-r--r--packages/SystemUI/res/values/dimens.xml1
-rw-r--r--packages/SystemUI/src/com/android/systemui/controls/controller/ControlsController.kt8
-rw-r--r--packages/SystemUI/src/com/android/systemui/controls/controller/ControlsControllerImpl.kt5
-rw-r--r--packages/SystemUI/src/com/android/systemui/controls/ui/ControlActionCoordinator.kt5
-rw-r--r--packages/SystemUI/src/com/android/systemui/controls/ui/ControlViewHolder.kt14
-rw-r--r--packages/SystemUI/src/com/android/systemui/controls/ui/ControlsUiController.kt1
-rw-r--r--packages/SystemUI/src/com/android/systemui/controls/ui/ControlsUiControllerImpl.kt14
-rw-r--r--packages/SystemUI/src/com/android/systemui/controls/ui/ToggleRangeBehavior.kt2
8 files changed, 49 insertions, 1 deletions
diff --git a/packages/SystemUI/res/values/dimens.xml b/packages/SystemUI/res/values/dimens.xml
index 622e4ccef487..599ed1696ec9 100644
--- a/packages/SystemUI/res/values/dimens.xml
+++ b/packages/SystemUI/res/values/dimens.xml
@@ -1253,6 +1253,7 @@
<dimen name="control_base_item_margin">2dp</dimen>
<dimen name="control_status_padding">3dp</dimen>
<fraction name="controls_toggle_bg_intensity">5%</fraction>
+ <fraction name="controls_dimmed_alpha">40%</fraction>
<!-- Home Controls activity view detail panel-->
<dimen name="controls_activity_view_top_padding">25dp</dimen>
diff --git a/packages/SystemUI/src/com/android/systemui/controls/controller/ControlsController.kt b/packages/SystemUI/src/com/android/systemui/controls/controller/ControlsController.kt
index 7cab847d52f7..79a5b0a1ce52 100644
--- a/packages/SystemUI/src/com/android/systemui/controls/controller/ControlsController.kt
+++ b/packages/SystemUI/src/com/android/systemui/controls/controller/ControlsController.kt
@@ -23,6 +23,7 @@ import android.service.controls.actions.ControlAction
import com.android.systemui.controls.ControlStatus
import com.android.systemui.controls.UserAwareController
import com.android.systemui.controls.management.ControlsFavoritingActivity
+import com.android.systemui.controls.ui.ControlWithState
import com.android.systemui.controls.ui.ControlsUiController
import java.util.function.Consumer
@@ -111,6 +112,13 @@ interface ControlsController : UserAwareController {
@ControlAction.ResponseResult response: Int
)
+ /**
+ * When a control should be highlighted, dimming down what's around it.
+ *
+ * @param cws focused control, or {@code null} if nothing should be highlighted.
+ */
+ fun onFocusChanged(cws: ControlWithState?)
+
// FAVORITE MANAGEMENT
/**
diff --git a/packages/SystemUI/src/com/android/systemui/controls/controller/ControlsControllerImpl.kt b/packages/SystemUI/src/com/android/systemui/controls/controller/ControlsControllerImpl.kt
index 6d34009169d5..5626a5de2e3c 100644
--- a/packages/SystemUI/src/com/android/systemui/controls/controller/ControlsControllerImpl.kt
+++ b/packages/SystemUI/src/com/android/systemui/controls/controller/ControlsControllerImpl.kt
@@ -41,6 +41,7 @@ import com.android.systemui.broadcast.BroadcastDispatcher
import com.android.systemui.controls.ControlStatus
import com.android.systemui.controls.ControlsServiceInfo
import com.android.systemui.controls.management.ControlsListingController
+import com.android.systemui.controls.ui.ControlWithState
import com.android.systemui.controls.ui.ControlsUiController
import com.android.systemui.dagger.qualifiers.Background
import com.android.systemui.dump.DumpManager
@@ -504,6 +505,10 @@ class ControlsControllerImpl @Inject constructor (
}
}
+ override fun onFocusChanged(cws: ControlWithState?) {
+ uiController.onFocusChanged(cws)
+ }
+
override fun refreshStatus(componentName: ComponentName, control: Control) {
if (!confirmAvailability()) {
Log.d(TAG, "Controls not available")
diff --git a/packages/SystemUI/src/com/android/systemui/controls/ui/ControlActionCoordinator.kt b/packages/SystemUI/src/com/android/systemui/controls/ui/ControlActionCoordinator.kt
index 2c1a91dca225..b3c6cab2adff 100644
--- a/packages/SystemUI/src/com/android/systemui/controls/ui/ControlActionCoordinator.kt
+++ b/packages/SystemUI/src/com/android/systemui/controls/ui/ControlActionCoordinator.kt
@@ -25,6 +25,7 @@ import android.service.controls.actions.CommandAction
import android.util.Log
import android.view.HapticFeedbackConstants
import com.android.systemui.R
+import com.android.systemui.controls.controller.ControlsController
object ControlActionCoordinator {
const val MIN_LEVEL = 0
@@ -76,4 +77,8 @@ object ControlActionCoordinator {
it.show()
}
}
+
+ fun setFocusedElement(cvh: ControlViewHolder?, controlsController: ControlsController) {
+ controlsController.onFocusChanged(cvh?.cws)
+ }
}
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 93e1bd444938..61a323d0b9a8 100644
--- a/packages/SystemUI/src/com/android/systemui/controls/ui/ControlViewHolder.kt
+++ b/packages/SystemUI/src/com/android/systemui/controls/ui/ControlViewHolder.kt
@@ -31,6 +31,7 @@ import android.service.controls.templates.StatelessTemplate
import android.service.controls.templates.TemperatureControlTemplate
import android.service.controls.templates.ToggleRangeTemplate
import android.service.controls.templates.ToggleTemplate
+import android.util.MathUtils
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
@@ -68,6 +69,8 @@ class ControlViewHolder(
private val toggleBackgroundIntensity: Float = layout.context.resources
.getFraction(R.fraction.controls_toggle_bg_intensity, 1, 1)
+ private val dimmedAlpha: Float = layout.context.resources
+ .getFraction(R.fraction.controls_dimmed_alpha, 1, 1)
private var stateAnimator: ValueAnimator? = null
private val baseLayer: GradientDrawable
val icon: ImageView = layout.requireViewById(R.id.icon)
@@ -82,6 +85,11 @@ class ControlViewHolder(
var lastAction: ControlAction? = null
val deviceType: Int
get() = cws.control?.let { it.getDeviceType() } ?: cws.ci.deviceType
+ var dimmed: Boolean = false
+ set(value) {
+ field = value
+ bindData(cws)
+ }
init {
val ld = layout.getBackground() as LayerDrawable
@@ -177,7 +185,8 @@ class ControlViewHolder(
val fg = context.resources.getColorStateList(ri.foreground, context.theme)
val bg = context.resources.getColor(R.color.control_default_background, context.theme)
- val (clip, newAlpha) = if (enabled) {
+ val dimAlpha = if (dimmed) dimmedAlpha else 1f
+ var (clip, newAlpha) = if (enabled) {
listOf(ri.enabledBackground, ALPHA_ENABLED)
} else {
listOf(R.color.control_default_background, ALPHA_DISABLED)
@@ -202,12 +211,14 @@ class ControlViewHolder(
if (animated) {
val oldColor = color?.defaultColor ?: newClipColor
val oldBaseColor = baseLayer.color?.defaultColor ?: newBaseColor
+ val oldAlpha = layout.alpha
stateAnimator = ValueAnimator.ofInt(clipLayer.alpha, newAlpha).apply {
addUpdateListener {
alpha = it.animatedValue as Int
setColor(ColorUtils.blendARGB(oldColor, newClipColor, it.animatedFraction))
baseLayer.setColor(ColorUtils.blendARGB(oldBaseColor,
newBaseColor, it.animatedFraction))
+ layout.alpha = MathUtils.lerp(oldAlpha, dimAlpha, it.animatedFraction)
}
addListener(object : AnimatorListenerAdapter() {
override fun onAnimationEnd(animation: Animator?) {
@@ -222,6 +233,7 @@ class ControlViewHolder(
alpha = newAlpha
setColor(newClipColor)
baseLayer.setColor(newBaseColor)
+ layout.alpha = dimAlpha
}
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/controls/ui/ControlsUiController.kt b/packages/SystemUI/src/com/android/systemui/controls/ui/ControlsUiController.kt
index 0f105376847f..61a1a986c091 100644
--- a/packages/SystemUI/src/com/android/systemui/controls/ui/ControlsUiController.kt
+++ b/packages/SystemUI/src/com/android/systemui/controls/ui/ControlsUiController.kt
@@ -36,4 +36,5 @@ interface ControlsUiController {
controlId: String,
@ControlAction.ResponseResult response: Int
)
+ fun onFocusChanged(controlWithState: ControlWithState?)
}
diff --git a/packages/SystemUI/src/com/android/systemui/controls/ui/ControlsUiControllerImpl.kt b/packages/SystemUI/src/com/android/systemui/controls/ui/ControlsUiControllerImpl.kt
index fab6fc7357dd..2adfb1bd6d4f 100644
--- a/packages/SystemUI/src/com/android/systemui/controls/ui/ControlsUiControllerImpl.kt
+++ b/packages/SystemUI/src/com/android/systemui/controls/ui/ControlsUiControllerImpl.kt
@@ -209,6 +209,20 @@ class ControlsUiControllerImpl @Inject constructor (
}
}
+ override fun onFocusChanged(focusedControl: ControlWithState?) {
+ controlViewsById.forEach { key: ControlKey, viewHolder: ControlViewHolder ->
+ val state = controlsById.get(key) ?: return@forEach
+ val shouldBeDimmed = focusedControl != null && state != focusedControl
+ if (viewHolder.dimmed == shouldBeDimmed) {
+ return@forEach
+ }
+
+ uiExecutor.execute {
+ viewHolder.dimmed = shouldBeDimmed
+ }
+ }
+ }
+
private fun startFavoritingActivity(context: Context, si: StructureInfo) {
startTargetedActivity(context, si, ControlsFavoritingActivity::class.java)
}
diff --git a/packages/SystemUI/src/com/android/systemui/controls/ui/ToggleRangeBehavior.kt b/packages/SystemUI/src/com/android/systemui/controls/ui/ToggleRangeBehavior.kt
index d8b26e2e68d8..dafd8b25ec2e 100644
--- a/packages/SystemUI/src/com/android/systemui/controls/ui/ToggleRangeBehavior.kt
+++ b/packages/SystemUI/src/com/android/systemui/controls/ui/ToggleRangeBehavior.kt
@@ -175,6 +175,7 @@ class ToggleRangeBehavior : Behavior {
fun beginUpdateRange() {
status.setTextSize(TypedValue.COMPLEX_UNIT_PX, context.getResources()
.getDimensionPixelSize(R.dimen.control_status_expanded).toFloat())
+ ControlActionCoordinator.setFocusedElement(cvh, cvh.controlsController)
}
fun updateRange(level: Int, checked: Boolean, isDragging: Boolean) {
@@ -243,6 +244,7 @@ class ToggleRangeBehavior : Behavior {
status.setText("$currentStatusText $currentRangeValue")
cvh.action(FloatAction(rangeTemplate.getTemplateId(),
findNearestStep(levelToRangeValue(clipLayer.getLevel()))))
+ ControlActionCoordinator.setFocusedElement(null, cvh.controlsController)
}
fun findNearestStep(value: Float): Float {