diff options
| author | 2020-04-16 19:25:23 +0000 | |
|---|---|---|
| committer | 2020-04-16 19:25:23 +0000 | |
| commit | 56cd4dcad580061f53b938dc48fa7933614dff0f (patch) | |
| tree | c3333bf5c1beaa8de58cc8c0c18f3a0b23e6306a | |
| parent | 3875de7c940385938a77d86d5d42a011bc154692 (diff) | |
| parent | d60b33275e4578741ee8056d9dcfeac2d8f12cf3 (diff) | |
Merge "Dim down controls when slider is active" into rvc-dev
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 { |