summaryrefslogtreecommitdiff
path: root/packages/SystemUI/src/com/android/systemui/controls/ui/TemperatureControlBehavior.kt
blob: 39d69704d8171e03869f52c342dc730bac0204f1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
/*
 * Copyright (C) 2020 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.
 */

package com.android.systemui.controls.ui

import android.graphics.drawable.Drawable
import android.graphics.drawable.LayerDrawable
import android.service.controls.Control
import android.service.controls.templates.ControlTemplate
import android.service.controls.templates.TemperatureControlTemplate

import com.android.systemui.R
import com.android.systemui.controls.ui.ControlViewHolder.Companion.MIN_LEVEL
import com.android.systemui.controls.ui.ControlViewHolder.Companion.MAX_LEVEL

class TemperatureControlBehavior : Behavior {
    lateinit var clipLayer: Drawable
    lateinit var control: Control
    lateinit var cvh: ControlViewHolder
    var subBehavior: Behavior? = null

    override fun initialize(cvh: ControlViewHolder) {
        this.cvh = cvh
    }

    override fun bind(cws: ControlWithState, colorOffset: Int) {
        this.control = cws.control!!

        cvh.setStatusText(control.getStatusText())

        val ld = cvh.layout.getBackground() as LayerDrawable
        clipLayer = ld.findDrawableByLayerId(R.id.clip_layer)

        val template = control.getControlTemplate() as TemperatureControlTemplate
        val activeMode = template.getCurrentActiveMode()
        val subTemplate = template.getTemplate()
        if (subTemplate == ControlTemplate.getNoTemplateObject() ||
            subTemplate == ControlTemplate.getErrorTemplate()) {
            // No sub template is specified, apply a default look with basic touch interaction.
            // Treat an error as no template.
            val enabled = activeMode != 0 && activeMode != TemperatureControlTemplate.MODE_OFF
            clipLayer.setLevel(if (enabled) MAX_LEVEL else MIN_LEVEL)
            cvh.applyRenderInfo(enabled, activeMode)

            cvh.layout.setOnClickListener { _ ->
                cvh.controlActionCoordinator.touch(cvh, template.getTemplateId(), control)
            }
        } else {
            // A sub template has been specified, use this as the default behavior for user
            // interactions (touch, range)
            subBehavior = cvh.bindBehavior(
                subBehavior,
                cvh.findBehaviorClass(
                    control.status,
                    subTemplate,
                    control.deviceType
                ),
                activeMode
            )
        }
    }
}